<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Kauê Martins]]></title><description><![CDATA[A free developer in the world. Thinking out the box. Building apps using Flutter, everything is Widget 💙]]></description><link>https://kmartins.dev</link><generator>RSS for Node</generator><lastBuildDate>Fri, 10 Apr 2026 16:17:04 GMT</lastBuildDate><atom:link href="https://kmartins.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Agora sim, o grande ganho do enum no Dart 2.17]]></title><description><![CDATA[Como mencionado no artigo anterior, não era possível declarar membros nos nossos enums e de certa forma vários devs ficavam chateados(as) e magoados(as) 😤
Mas para nossa alegria, isso finalmente mudou, fique tranquilo(a), você não leu errado, melhor...]]></description><link>https://kmartins.dev/enum-no-dart-217</link><guid isPermaLink="true">https://kmartins.dev/enum-no-dart-217</guid><category><![CDATA[Dart]]></category><category><![CDATA[Flutter]]></category><category><![CDATA[enum]]></category><category><![CDATA[newbie]]></category><category><![CDATA[2.17]]></category><dc:creator><![CDATA[Kauê Martins]]></dc:creator><pubDate>Fri, 08 Jul 2022 13:40:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1657113457307/LE-Z9Lr3H.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Como mencionado no <a target="_blank" href="https://kmartins.dev/enum-no-dart-215">artigo anterior</a>, não era possível declarar <strong>membros</strong> nos nossos <code>enums</code> e de certa forma vários <code>devs</code> ficavam chateados(as) e magoados(as) 😤</p>
<p>Mas para nossa alegria, isso finalmente mudou, fique tranquilo(a), você não leu errado, melhoria implementa e <a target="_blank" href="https://github.com/dart-lang/language/issues/158">issue</a> fechada <em>(oiá até rimou 🤪)</em>.</p>
<p>Vai, bora dar aquele <strong>refactor</strong> em um código que está usando uma <code>extensions</code>!? Eu sei que você quer, então só vamos...</p>
<ul>
<li>Versão que causa certa tristeza ao olhar 🥲</li>
</ul>
<pre><code class="lang-dart"><span class="hljs-keyword">enum</span> Transport { car, truck, airplane, train, boat }

<span class="hljs-keyword">extension</span> TransportExt <span class="hljs-keyword">on</span> Transport {
  <span class="hljs-built_in">int</span> getSpeed() {
    <span class="hljs-keyword">switch</span> (<span class="hljs-keyword">this</span>) {
      <span class="hljs-keyword">case</span> Transport.car:
        <span class="hljs-keyword">return</span> <span class="hljs-number">65</span>;
      <span class="hljs-keyword">case</span> Transport.truck:
        <span class="hljs-keyword">return</span> <span class="hljs-number">55</span>;
      <span class="hljs-keyword">case</span> Transport.airplane:
        <span class="hljs-keyword">return</span> <span class="hljs-number">600</span>;
      <span class="hljs-keyword">case</span> Transport.train:
        <span class="hljs-keyword">return</span> <span class="hljs-number">70</span>;
      <span class="hljs-keyword">case</span> Transport.boat:
        <span class="hljs-keyword">return</span> <span class="hljs-number">22</span>;
    }
  }
}
</code></pre>
<p><em>Fique tranquilo, você ainda pode fazer assim</em> 😮‍💨</p>
<ul>
<li>Versão que causa alegria ao olhar 😆</li>
</ul>
<pre><code class="lang-dart"><span class="hljs-keyword">enum</span> Transport {
  car(<span class="hljs-number">65</span>),
  truck(<span class="hljs-number">55</span>),
  airplane(<span class="hljs-number">600</span>),
  train(<span class="hljs-number">70</span>),
  boat(<span class="hljs-number">22</span>);

  <span class="hljs-keyword">final</span> <span class="hljs-built_in">int</span> _speed;
  <span class="hljs-keyword">const</span> Transport(<span class="hljs-keyword">this</span>._speed);

  <span class="hljs-built_in">int</span> getSpeed() =&gt; _speed;
}
</code></pre>
<p>Como algo "simples" pode deixar tanto(a) <code>dev</code> feliz não é mesmo 💁🏽‍♀️</p>
<p>Ei, calma que só melhora, há mais coisas que vão te dar uma "explosão" de felicidade 🥳</p>
<ul>
<li>Use com <code>generics</code>:</li>
</ul>
<pre><code class="lang-dart"><span class="hljs-keyword">enum</span> Transport&lt;T <span class="hljs-keyword">extends</span> <span class="hljs-built_in">num</span>&gt; {
  car&lt;<span class="hljs-built_in">int</span>&gt;(<span class="hljs-number">65</span>),
  truck&lt;<span class="hljs-built_in">int</span>&gt;(<span class="hljs-number">55</span>),
  airplane&lt;<span class="hljs-built_in">double</span>&gt;(<span class="hljs-number">600.50</span>),
  train&lt;<span class="hljs-built_in">num</span>&gt;(<span class="hljs-number">70.25</span>),
  boat(<span class="hljs-number">22</span>); <span class="hljs-comment">// A inferência do tipo também funciona ;)</span>

  <span class="hljs-keyword">final</span> T _speed;
  <span class="hljs-keyword">const</span> Transport(<span class="hljs-keyword">this</span>._speed);

  T getSpeed() =&gt; _speed;
}
</code></pre>
<ul>
<li>Adicione <code>mixins</code> e implemente <code>interfaces</code>:</li>
</ul>
<pre><code class="lang-dart"><span class="hljs-keyword">mixin</span> Speedometer {
  <span class="hljs-comment">// int speed = 0; Se usado no enum, deve ser final  </span>
  <span class="hljs-built_in">int</span> <span class="hljs-keyword">get</span> maxSpeed;
}

<span class="hljs-keyword">abstract</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Validation</span> </span>{
 <span class="hljs-built_in">bool</span> isValidSpeed(<span class="hljs-built_in">int</span> speed);
}

<span class="hljs-keyword">enum</span> Transport <span class="hljs-keyword">with</span> Speedometer <span class="hljs-keyword">implements</span> Validation {
  ...
  <span class="hljs-keyword">const</span> Transport(<span class="hljs-keyword">this</span>.maxSpeed);

  <span class="hljs-meta">@override</span>
  <span class="hljs-keyword">final</span> <span class="hljs-built_in">int</span> maxSpeed;

  <span class="hljs-meta">@override</span>
  <span class="hljs-built_in">bool</span> isValidSpeed(<span class="hljs-built_in">int</span> speed) =&gt; speed &lt;= maxSpeed;
}
</code></pre>
<ul>
<li>Faça <code>Factory constructors</code>:</li>
</ul>
<pre><code class="lang-dart"><span class="hljs-keyword">enum</span> Transport {
  ...
  <span class="hljs-keyword">const</span> Transport(<span class="hljs-keyword">this</span>.speed);

  <span class="hljs-keyword">factory</span> Transport.faster() =&gt; Transport.airplane;

  <span class="hljs-keyword">factory</span> Transport.slower() =&gt; Transport.boat;
}
</code></pre>
<p><em>Só não se esqueça, o <code>enum</code> continua sendo uma <strong>constante</strong>, você não pode <strong>estender</strong> dele, <strong>sobrescrever</strong> o <code>index</code>, <code>hashCode</code>, o operador <code>==</code> e nem se quer pensar em <strong>declarar um membro</strong> chamado <code>values</code></em> 😉</p>
<p>Sobre essa melhoria, deixo a seguinte frase do qual não sei o seu autor(a):</p>
<blockquote>
<p><em>"Não existe começo perfeito, a evolução é um processo."</em></p>
</blockquote>
<p><strong>Reflitamos</strong> 🤔</p>
<p>Se chegou até aqui, não fique acanhado(a), deixe aquele <strong>like</strong>, <strong>compartilha</strong> com os(as) <code>devs</code> e <strong>me segue</strong> nas redes sociais 🍻</p>
<p><em>Esqueci ou errei algo? Não hesite e me avise</em> 🤗</p>
<h3 id="heading-links-uteis">Links úteis</h3>
<ul>
<li><a target="_blank" href="https://dart.dev/guides/language/language-tour#enumerated-types">Dart Guide - enumerated-types</a></li>
<li><a target="_blank" href="https://stackoverflow.com/a/71412047">Stack Overflow - How do I add Methods or Values to Enums in Dart?</a></li>
</ul>
]]></content:encoded></item><item><title><![CDATA[O pequeno grande ganho do enum no Dart 2.15]]></title><description><![CDATA[Como sabemos o enum no Dart tem limitações se comparado com outras linguagens 🙄, como exemplo, não podemos declarar membros e antes que se pergunte, sim, já temos essa solicitação em andamento, veja a issue para acompanhar.
Outro ponto é que não hav...]]></description><link>https://kmartins.dev/enum-no-dart-215</link><guid isPermaLink="true">https://kmartins.dev/enum-no-dart-215</guid><category><![CDATA[Dart]]></category><category><![CDATA[Flutter SDK]]></category><dc:creator><![CDATA[Kauê Martins]]></dc:creator><pubDate>Thu, 23 Dec 2021 16:32:29 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1656952199109/kuD1Qevpg.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Como sabemos o <code>enum</code> no <strong>Dart</strong> tem limitações se comparado com outras linguagens 🙄, como exemplo, não podemos declarar membros e antes que se pergunte, sim, já temos essa solicitação em andamento, veja a <a target="_blank" href="https://github.com/dart-lang/language/issues/158">issue</a> para acompanhar.</p>
<p>Outro ponto é que não havia uma forma de obter a <code>String</code> de um <code>valor</code> do <code>enum</code>.</p>
<p>Antes para conseguir esse "feito", era necessário, por exemplo, usar as <code>extensions</code>:</p>
<pre><code class="lang-dart"><span class="hljs-keyword">enum</span> Day { monday, tuesday, wednesday, thursday, friday, saturday, sunday }

<span class="hljs-keyword">extension</span> <span class="hljs-keyword">on</span> Day {
  <span class="hljs-built_in">String</span> <span class="hljs-keyword">get</span> toShortString =&gt; toString().split(<span class="hljs-string">'.'</span>).last;
}

<span class="hljs-built_in">print</span>(<span class="hljs-string">'It\'s <span class="hljs-subst">${Day.friday.toShortString}</span>'</span>);
</code></pre>
<p>No <strong>Flutter</strong> ainda há um método chamado <code>describeEnum</code> que faz o mesmo, leia a <a target="_blank" href="https://api.flutter.dev/flutter/foundation/describeEnum.html">documentação</a> para saber mais 📖
<br /><strong>Porém, aconselho a usar a forma que irei descrever adiante.</strong></p>
<h2 id="heading-agora-no-215">Agora no 2.15 🙏</h2>
<p>Fazendo o mesmo uso das <code>extensions</code> acima, a equipe do <strong>Dart</strong> implementou alguns métodos visando melhorar a forma de se obter e trabalhar com essa <code>String</code>, eles são demonstrados abaixo:</p>
<pre><code class="lang-dart"><span class="hljs-keyword">enum</span> Day { monday, tuesday, wednesday, thursday, friday, saturday, sunday }

<span class="hljs-built_in">print</span>(<span class="hljs-string">'It\'s <span class="hljs-subst">${Day.friday.name}</span>'</span>);
<span class="hljs-built_in">print</span>(<span class="hljs-string">'It\'s <span class="hljs-subst">${Day.values.byName(<span class="hljs-string">'monday'</span>).name}</span>'</span>);
<span class="hljs-keyword">final</span> enumMap = Day.values.asNameMap();
<span class="hljs-built_in">print</span>(<span class="hljs-string">'It\'s <span class="hljs-subst">${enumMap[<span class="hljs-string">'sunday'</span>]?.name}</span>'</span>);
</code></pre>
<p>Ae sim, bem melhor 🙌</p>
<p>Sabemos que ainda faltam melhorias, mas vamos aguardar os próximos capítulos 🕥</p>
<p>Bom já sabe neh?! Se curtiu, deixe um <strong>like</strong>, dá aquela <strong>compartilhada</strong> com outros <code>devs</code> e me <strong>segue</strong> nas redes sociais 🍻</p>
<h3 id="heading-links-uteis">Links úteis</h3>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://medium.com/dartlang/dart-2-15-7e7a598e508a">https://medium.com/dartlang/dart-2-15-7e7a598e508a</a></div>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://stackoverflow.com/questions/29567236/dart-how-to-get-the-value-of-an-enum">https://stackoverflow.com/questions/29567236/dart-how-to-get-the-value-of-an-enum</a></div>
]]></content:encoded></item></channel></rss>