<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Beatriz Herculano</title>
    <description>The latest articles on DEV Community by Beatriz Herculano (@biaherculano).</description>
    <link>https://dev.to/biaherculano</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F222574%2F2fadf433-62ea-42c7-b10d-3330c094cd64.jpeg</url>
      <title>DEV Community: Beatriz Herculano</title>
      <link>https://dev.to/biaherculano</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/biaherculano"/>
    <language>en</language>
    <item>
      <title>Flutter and the basics on Widgets</title>
      <dc:creator>Beatriz Herculano</dc:creator>
      <pubDate>Fri, 25 Dec 2020 23:17:24 +0000</pubDate>
      <link>https://dev.to/biaherculano/flutter-and-the-basics-on-widgets-382b</link>
      <guid>https://dev.to/biaherculano/flutter-and-the-basics-on-widgets-382b</guid>
      <description>&lt;h1&gt;
  
  
  What is Flutter?
&lt;/h1&gt;

&lt;p&gt;Flutter is a SDK, created by Google, to build cross platform mobile apps and web applications.&lt;br&gt;
&lt;a href="https://dev.to/flutter/o-que-e-o-flutter-e-dart-e25"&gt;Flutter é um SDK para desenvolvimento de aplicativos multiplataforma e aplicações web criada pela Google.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I started studding flutter without ever programing with components, because of that a lot of concepts were strange to me, mainly the concept and usage of Widgets &lt;/p&gt;

&lt;p&gt;If you read the documentation for Flutter you will find the following definition for widgets:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Widgets describe what their view should look like given their current configuration and state. When a widget’s state changes, the widget rebuilds its description, which the framework diffs against the previous description in order to determine the minimal changes needed in the underlying render tree to transition from one state to the next.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This "explains" the concept of widget but not their usage. How it is used to build a flutter app?&lt;/p&gt;
&lt;h1&gt;
  
  
  Render Tree
&lt;/h1&gt;

&lt;p&gt;The first thing to learn is that every visual component in a Flutter App is a widget or a Widget inside another:&lt;br&gt;
If I want a centered text, I use a Text Widget inside a Center Widget. Actually, your entire app will be a Widget with others inside it.&lt;/p&gt;

&lt;p&gt;When, for whatever reason, a widget have to load again, it will reload its children and itself. If you are worried about performance thinking about how you could rebuild your entire app, flutter was built thinking about it and there ar several guidelines and best practices to avoid a "render hell".&lt;/p&gt;
&lt;h1&gt;
  
  
  State and behavior
&lt;/h1&gt;

&lt;p&gt;Ok, another thing about components, they can have behavior and a state.&lt;br&gt;
The behavior can be simply described as what your widget do. If you are building a button that changes colors when you click it, there you have a method to do it, a behavior!&lt;/p&gt;

&lt;p&gt;The state is what the behavior can change.&lt;/p&gt;

&lt;p&gt;One very important concept is that you widget is in function of you state.&lt;/p&gt;

&lt;p&gt;Going back to my button that changes color, the color can be represented as a variable in the state, if I click it the state changes and the appearance of the widget should change too. &lt;/p&gt;

&lt;p&gt;The state is like a save file for a game, but for your widget.&lt;/p&gt;

&lt;p&gt;You can bring this concept to any of the component style frameworks like React, Vue, SwiftUI and others.&lt;/p&gt;
&lt;h1&gt;
  
  
  How does state and behavior work in Flutter?
&lt;/h1&gt;

&lt;p&gt;So the state can change, but is not necessary. Flutter separates widgets that changes and the ones that do not. They can be Stateless and Stateful.&lt;/p&gt;

&lt;p&gt;This something that can be good or bad. This makes clear from the beginning how your widget will behave, if will be able to rebuild the render tree bellow it or if will be only modified if its parent do, but it can create verbose code and it will force you to adapt some code sometimes because suddenly you want behavior in that widget.&lt;/p&gt;

&lt;p&gt;Another thing that this difference do is to block the "render hell", and can help you to use stateful widgets only when necessary.&lt;/p&gt;
&lt;h1&gt;
  
  
  Stateless Widgets
&lt;/h1&gt;

&lt;p&gt;A Widget that is built once and cannot rebuild itself, only their parent can do it for them. A good example is the Text Widget:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;'This is a immutable text'&lt;/span&gt;&lt;span class="p"&gt;,);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This widget is once created and it has not more behavior than this.&lt;br&gt;
I could stack stateless widgets to build my own for example.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="n"&gt;Container&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nl"&gt;color:&lt;/span&gt; &lt;span class="n"&gt;Colors&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;red&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nl"&gt;child:&lt;/span&gt; &lt;span class="n"&gt;Center&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nl"&gt;child:&lt;/span&gt; &lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;'This is a immutable text'&lt;/span&gt;&lt;span class="p"&gt;,)&lt;/span&gt;
    &lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This does not have a state or a behavior.&lt;/p&gt;

&lt;h1&gt;
  
  
  Stateful Widgets
&lt;/h1&gt;

&lt;p&gt;This widget can change after is built and rebuild itself. A example is the raised button Widget, when the button is idle, it have the "raised" effect, during the click the effect is removed and if you let the click out the effect returns.&lt;/p&gt;

&lt;p&gt;Another example is the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Counter&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;StatefulWidget&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nd"&gt;@override&lt;/span&gt;
  &lt;span class="n"&gt;_CounterState&lt;/span&gt; &lt;span class="n"&gt;createState&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;_CounterState&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;_CounterState&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;State&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Counter&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;_counter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="n"&gt;_incrementCounter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="n"&gt;_counter&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nd"&gt;@override&lt;/span&gt;
  &lt;span class="n"&gt;Widget&lt;/span&gt; &lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BuildContext&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;Container&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nl"&gt;child:&lt;/span&gt; &lt;span class="n"&gt;Center&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nl"&gt;child:&lt;/span&gt; &lt;span class="n"&gt;Column&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
          &lt;span class="nl"&gt;mainAxisAlignment:&lt;/span&gt; &lt;span class="n"&gt;MainAxisAlignment&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;center&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="nl"&gt;children:&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Widget&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;[&lt;/span&gt;
            &lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
              &lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="si"&gt;$_counter&lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="nl"&gt;style:&lt;/span&gt; &lt;span class="n"&gt;Theme&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;textTheme&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;display1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="n"&gt;FloatingActionButton&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
              &lt;span class="nl"&gt;onPressed:&lt;/span&gt; &lt;span class="n"&gt;_incrementCounter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="nl"&gt;tooltip:&lt;/span&gt; &lt;span class="s"&gt;'Increment'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="nl"&gt;child:&lt;/span&gt; &lt;span class="n"&gt;Icon&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Icons&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="p"&gt;)&lt;/span&gt;
          &lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
      &lt;span class="p"&gt;),&lt;/span&gt;
      &lt;span class="nl"&gt;color:&lt;/span&gt; &lt;span class="n"&gt;Colors&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;white&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We have a widget that is visually composed by a Column, a Center, a Text and a FloatingActionButton, but it also has a state, that is a integer named counter that starts with 0.&lt;/p&gt;

&lt;p&gt;When you press the FloatActionButton the _incrementCounter is called, this private method uses the setState and inside it changes the counter value, incrementing one to this number.&lt;/p&gt;

&lt;p&gt;Now, in flutter, if you are inside a Stateful widget and you use the setState, you will rebuild the widget, because you are telling that you are changing the state, since your visual is a representation of the state it has to render again. &lt;/p&gt;

&lt;h1&gt;
  
  
  Finishing this up
&lt;/h1&gt;

&lt;p&gt;I used React, Flutter and SwiftUI, learning the basics teach me that they are far more similar that you expect. You still is confused with this concept and you think flutter is making things worse I recommend you learn a little about SwiftUI, i used the (100 days of SwiftUI)[&lt;a href="https://www.hackingwithswift.com/100/swiftui"&gt;https://www.hackingwithswift.com/100/swiftui&lt;/a&gt;] to learn it.&lt;/p&gt;

&lt;p&gt;Hope this can help if you want to learn Flutter and you can ping me for help.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>As pessoas realmente fazem TDD?</title>
      <dc:creator>Beatriz Herculano</dc:creator>
      <pubDate>Tue, 03 Nov 2020 19:00:48 +0000</pubDate>
      <link>https://dev.to/biaherculano/as-pessoas-realmente-fazem-tdd-43cn</link>
      <guid>https://dev.to/biaherculano/as-pessoas-realmente-fazem-tdd-43cn</guid>
      <description>&lt;p&gt;Muitos sabem o que é TDD e que ele pode &lt;a href="https://medium.com/javascript-scene/tdd-changed-my-life-5af0ce099f80"&gt;mudar a sua vida&lt;/a&gt;, mas muitas pessoas se fazem a pergunta:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Será que as pessoas realmente fazem TDD? Ou é só coisa de artigo?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;É bem estranho pensar que seu chefe vai deixar você trabalhar em testes e não em código. Existe a mentalidade que melhorar as coisas para os desenvolvedores não traz valor ao cliente.&lt;/p&gt;

&lt;p&gt;Vamos aos básicos primeiro.&lt;/p&gt;

&lt;h2&gt;
  
  
  TDD, o que é?
&lt;/h2&gt;

&lt;p&gt;TDD é um técnica de programação onde você codifica o teste antes da funcionalidade. Isso envolve que o teste sempre começa falhando, você codifica apenas o necessário para o teste passar (isso de qualquer jeito, não precisa ser da melhor forma), depois refatora o código e o teste tem que funcionar novamente.&lt;/p&gt;

&lt;p&gt;Esse comportamento é representado com os estados:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;vermelho&lt;/em&gt; -&amp;gt; teste falha&lt;br&gt;
&lt;em&gt;verde&lt;/em&gt; -&amp;gt; teste passa com o mínimo de código possível&lt;br&gt;
&lt;em&gt;azul&lt;/em&gt; -&amp;gt; código é refatorado&lt;br&gt;
&lt;em&gt;verde&lt;/em&gt; -&amp;gt; teste passa&lt;/p&gt;

&lt;h2&gt;
  
  
  Qual o poder mágico que o TDD tem?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  TESTES
&lt;/h3&gt;

&lt;p&gt;TDD não é magico. A magia está nos testes!&lt;/p&gt;

&lt;p&gt;O TDD te força a fazer testes pro seu código inteiro. Se você modificar seu código sem testes, como você sabe que ainda está tudo bem? &lt;/p&gt;

&lt;p&gt;Como você sabe que não quebrou o código que seu colega fez? Quem ja trabalhou com código legado entende muito bem essa dor, essa incerteza de fazer uma modificação e estragar alguma coisa.&lt;/p&gt;

&lt;p&gt;Isso é uma ótima vantagem para times com uma pessoa com menos experiencia, onde ela sabe que fez algo de errado por que o teste quebrou, o que deve evitar o código ir pra produção.&lt;/p&gt;

&lt;p&gt;Testar manualmente é uma opção, mas vai ocupar cada vez mais tempo. Os testes automatizados são a melhor forma de garantir que você não estragou nada.&lt;/p&gt;

&lt;h2&gt;
  
  
  Muitas pessoas fazem testes, nem tantas fazem TDD
&lt;/h2&gt;

&lt;p&gt;Muitas pessoas vão falar com seus chefes e lideres de time sobre fazer TDD, isso é muito legal, mas a maior parte das vezes vai ser levado como utopia e não será implementado. &lt;/p&gt;

&lt;p&gt;O argumento mais comum é:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;TDD é muito custoso, deixa o time mais lento, esse código nem é uma funcionalidade. No final vai ser tempo perdido.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Existem algumas coisas certas nesses argumentos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Seu time pode ficar mais lento.&lt;/li&gt;
&lt;li&gt;Esse código não tem contato direto com o cliente.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Mas não é tempo perdido.&lt;/strong&gt;   &lt;/p&gt;

&lt;p&gt;É criar uma melhor experiencia de desenvolvimento, trazer mais qualidade para o produto e ajudar os desenvolvedores do time a serem melhores.&lt;/p&gt;

&lt;h2&gt;
  
  
  Experiência no desenvolvimento traz valor!
&lt;/h2&gt;

&lt;p&gt;Quem nunca pegou um projeto, pra resolver uma coisa bem pequena e simples e demorou o triplo do esperado para concluir a tarefa? Ou então construiu uma funcionalidade e a colocou em produção para perceber que tinha uma regra de negócio errada?&lt;/p&gt;

&lt;p&gt;Trabalhar com código é difícil, ainda mais se ele é de outra pessoa e ainda por cima está incompreensível. Se o código estivesse melhor, você ia demorar tanto pra fazer modificações nele?&lt;/p&gt;

&lt;p&gt;A sua experiencia no desenvolvimento, como programador, é importante. Sempre pensam que os testes "atrasam" o desenvolvimento, mas nunca olham para quanto um código ruim pode fazer uma tarefa de dois dias demorar um mês.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Com modificações sendo feitas de forma mais rápida, mais valor é entregue em menos tempo!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Qualidade
&lt;/h2&gt;

&lt;p&gt;Garantir a qualidade não é um trabalho exclusivo do QA. A qualidade tem que estar em todos os processos do desenvolvimento, desde a analise da tarefa e suas regras de negócio, o desenvolvimento e o processo de validação do que foi desenvolvido.&lt;/p&gt;

&lt;p&gt;Fazer testes unitários automatizados é a ferramenta usada pelos desenvolvedores para garantir a qualidade durante o desenvolvimento, no presente e no futuro.&lt;/p&gt;

&lt;p&gt;Esses testes estão na base da pirâmide, sendo eles os menos custosos de executar e criar. Se você está tendo problemas de qualidade dentro do seu time/projeto, TDD é um dos melhores passos a se dar. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dica bonus&lt;/strong&gt;&lt;br&gt;
Uma coisa que pode ajudar muito também é uma conversa mais próxima de desenvolvedores e analistas de negocio.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finalizando aqui
&lt;/h2&gt;

&lt;p&gt;Você vai encontrar dificuldades de implementar o TDD, seja por falta de costume ou por que o time não esta aberto pra isso. Comece aos poucos, tente um pouco de TDD de cada vez, assim você fica mais rápido e vai entender melhor suas vantagens. &lt;/p&gt;

&lt;p&gt;Esse é um tema que a leitura não te trará conhecimento suficiente e que a pratica é a parte mais importante.&lt;/p&gt;

</description>
      <category>testing</category>
      <category>tdd</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Flutter no CodePen!!</title>
      <dc:creator>Beatriz Herculano</dc:creator>
      <pubDate>Sat, 25 Apr 2020 20:37:29 +0000</pubDate>
      <link>https://dev.to/biaherculano/flutter-no-codepen-jl9</link>
      <guid>https://dev.to/biaherculano/flutter-no-codepen-jl9</guid>
      <description>&lt;p&gt;Oi pessoal, hoje foi &lt;a href="https://www.youtube.com/watch?v=VFQB1zE9zYU"&gt;anunciado&lt;/a&gt; que o &lt;a href="https://codepen.io/"&gt;CodePen&lt;/a&gt; agora tem suporte para flutter! &lt;/p&gt;

&lt;p&gt;Esse anúncio é super importante para crescer a comunidade de flutter ainda mais. Alem de nos termos mais um espaço para divulgar nossas ideias, designs e dicas.&lt;/p&gt;

&lt;h1&gt;
  
  
  Como criar um Pen em flutter
&lt;/h1&gt;

&lt;p&gt;Para criar um design com flutter no CodePen voce deve acessar o a &lt;a href="https://codepen.io/topic/flutter/templates"&gt;pagina de tópico de flutter&lt;/a&gt; nela voce pode escolher um template dentre os vários disponíveis ou então clicar em "Open flutter editor" para começar com um projeto limpo.&lt;/p&gt;

&lt;h1&gt;
  
  
  Por que eu estou tão animada?
&lt;/h1&gt;

&lt;p&gt;Esse novo espaço para se descobrir pens de flutter é perfeito para uma característica da comunidade: A divulgação de designs e animações!&lt;/p&gt;

&lt;p&gt;Todo dia aparece mais um video de um aplicativo lindo feito em flutter, ou um clone do nuBank, agora voce vai poder ver como essas pessoas fizeram essas coisas, além de colocar as coisas que voce fez e acha que a comunidade pode gostar!&lt;/p&gt;

&lt;h2&gt;
  
  
  Se quiser dar uma olhada no meu CodePen
&lt;/h2&gt;

&lt;p&gt;Voce pode ver o meu &lt;a href="https://codepen.io/biaheroliveira"&gt;perfil&lt;/a&gt;, agora vou sempre colocar widgets e designs que eu gostei de fazer e user para outras pessoas usarem também.&lt;br&gt;
Ja ate mesmo coloquei alguns =D&lt;/p&gt;

</description>
      <category>codepen</category>
      <category>flutter</category>
    </item>
    <item>
      <title>Um estudo sobre Flutter Expanded</title>
      <dc:creator>Beatriz Herculano</dc:creator>
      <pubDate>Tue, 04 Feb 2020 14:09:41 +0000</pubDate>
      <link>https://dev.to/flutterfans/um-estudo-sobre-flutter-expanded-36jc</link>
      <guid>https://dev.to/flutterfans/um-estudo-sobre-flutter-expanded-36jc</guid>
      <description>&lt;p&gt;Esse artigo faz parte de uma série chamada "Widgets da Semana", para saber mais sobre essa ela leia nossa &lt;a href="https://dev.to/flutter/flutter-um-estudo-semanal-sobre-widgets-56g3"&gt;introdução&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Expaned
&lt;/h2&gt;

&lt;p&gt;O &lt;a href="https://www.youtube.com/watch?v=_rnZaagadyo&amp;amp;list=PLjxrf2q8roU23XGwz3Km7sQZFTdB996iG&amp;amp;index=3"&gt;video&lt;/a&gt; do Widget da semana postado no dia 21 de agosto de 2018, fala sobre Expanded.&lt;/p&gt;

&lt;p&gt;Esse widget é usado para organizar o espaço ocupado por itens em Rows, Columns e Flex. Ele faz com que esse item ocupe o espaço vago dentro do seu pai. &lt;/p&gt;

&lt;p&gt;Quando a renderização acontece, primeiro é construido os filhos que não são flexiveis e depois os que são flexíveis vão ser calculados com o espaço restante. &lt;/p&gt;

&lt;p&gt;Você pode pensar como se fosse um display flex no CSS, onde essa caixa vai se expandir ocupando o todo espaço restate ou então em uma proporção indicada.&lt;/p&gt;

&lt;p&gt;Como um exemplo de uso temos o código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt; &lt;span class="n"&gt;Column&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nl"&gt;children:&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Widget&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;[&lt;/span&gt;
       &lt;span class="n"&gt;Container&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
           &lt;span class="nl"&gt;color:&lt;/span&gt; &lt;span class="n"&gt;Colors&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;black&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
               &lt;span class="nl"&gt;height:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="p"&gt;),&lt;/span&gt;
       &lt;span class="n"&gt;Expanded&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
           &lt;span class="nl"&gt;child:&lt;/span&gt; &lt;span class="n"&gt;Container&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;color:&lt;/span&gt; &lt;span class="n"&gt;Colors&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;indigo&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
       &lt;span class="p"&gt;),&lt;/span&gt;
       &lt;span class="n"&gt;Expanded&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
           &lt;span class="nl"&gt;child:&lt;/span&gt; &lt;span class="n"&gt;Container&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;color:&lt;/span&gt; &lt;span class="n"&gt;Colors&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;pinkAccent&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
       &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Que produz o segunte resultado:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vf6NFe77--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/8rrnmvux8f4e4dimft57.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vf6NFe77--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/8rrnmvux8f4e4dimft57.jpg" alt="Aplicativo com 3 retangulos, o primeiro sendo preto e menor e os restantes do mesmo tamanho, um azul e o outro rosa" width="590" height="1280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Você pode ver que sem indicar o tamanho ocupado pelos retangulos azul e rosa eles se organizaram baseado nas regras de expanded.&lt;br&gt;
Mas e se eu quiser que um seja de um tamanho diferente do outro?&lt;/p&gt;

&lt;p&gt;É so usar o atributo de flex e indicar a proporção de espaço a ser ocupado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="n"&gt;Column&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nl"&gt;children:&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Widget&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;[&lt;/span&gt;
       &lt;span class="n"&gt;Container&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
           &lt;span class="nl"&gt;color:&lt;/span&gt; &lt;span class="n"&gt;Colors&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;black&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
               &lt;span class="nl"&gt;height:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="p"&gt;),&lt;/span&gt;
       &lt;span class="n"&gt;Expanded&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
           &lt;span class="nl"&gt;child:&lt;/span&gt; &lt;span class="n"&gt;Container&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;color:&lt;/span&gt; &lt;span class="n"&gt;Colors&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;indigo&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
           &lt;span class="nl"&gt;flex:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
       &lt;span class="p"&gt;),&lt;/span&gt;
       &lt;span class="n"&gt;Expanded&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
           &lt;span class="nl"&gt;child:&lt;/span&gt; &lt;span class="n"&gt;Container&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;color:&lt;/span&gt; &lt;span class="n"&gt;Colors&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;pinkAccent&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
       &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Assim obtemos o seginte resultado&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MX-MH0OE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/7rdtpz9gjgmfyp4f02pv.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MX-MH0OE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/7rdtpz9gjgmfyp4f02pv.jpg" alt="Aplicativo com 3 retangulos, o primeiro sendo preto e menor, os outros dois sendo de tamanhos diferentes, o segundo sendo o dobro de tamanho do terceiro, o maior tem cor azul e o menor tem cor rosa" width="590" height="1280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O retângulo azul com o flex de 2 esta tomando o dobro de espaço que o rosa (o valor default/padrão do flex é 1).&lt;/p&gt;

&lt;h2&gt;
  
  
  Sobre Nós
&lt;/h2&gt;

&lt;p&gt;Eu e o pessoal da Flutter Nation estamos em uma &lt;a href="https://www.facebook.com/FlutterNationBr/"&gt;página&lt;/a&gt; e um &lt;a href="https://www.facebook.com/groups/FlutterNation/"&gt;grupo&lt;/a&gt; no Facebook. &lt;br&gt;
Também estamos no &lt;a href="https://www.meetup.com/pt-BR/FlutterNation/"&gt;Meetup&lt;/a&gt; e no &lt;a href="https://github.com/Flutter-Nation"&gt;GitHub&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>dart</category>
      <category>google</category>
      <category>mobile</category>
    </item>
    <item>
      <title>#100DaysOfCode - Ano novo, novas metas</title>
      <dc:creator>Beatriz Herculano</dc:creator>
      <pubDate>Thu, 02 Jan 2020 14:34:43 +0000</pubDate>
      <link>https://dev.to/biaherculano/100daysofcode-ano-novo-novas-metas-36dj</link>
      <guid>https://dev.to/biaherculano/100daysofcode-ano-novo-novas-metas-36dj</guid>
      <description>&lt;h2&gt;
  
  
  É 2020 e quais são seus objetivos? O meu é ser uma Dev melhor
&lt;/h2&gt;

&lt;p&gt;Durante 2019 teve um sentimento que não saiu de dentro de mim: Eu tenho que melhorar como dev. Melhorar em qualidade de código, design patterns e design de codigo e arquitetura. &lt;br&gt;
Esse tipo de sensação aparece quando eu me comparo com outros devs (algo que não se deve fazer com muita frequência) e tambem quando almejo vagas de nivel maior que o meu (hoje eu sou jr, almejo vagas de pleno).&lt;br&gt;
Quando se trata desse tipo de mudança, de Jr para Pleno, a maior diferença é em coisas que são ultilizadas em todas as linguagens:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dry code&lt;/li&gt;
&lt;li&gt;SOLID&lt;/li&gt;
&lt;li&gt;DDD&lt;/li&gt;
&lt;li&gt;TDD&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Alem desses existem habilidades que trazem um diferencial para o desenvolvedor no mercado de trabalho como a cultura DevOps.&lt;/p&gt;

&lt;p&gt;Para eu alcançar esse objetivo eu vou participar do desafio de 100 dias de codigo.&lt;/p&gt;

&lt;h2&gt;
  
  
  O desafio de 100 dias de código - como começar
&lt;/h2&gt;

&lt;p&gt;Esse desafio foi criado com base no estilo de desafio dos 100 dias de X. Voce pode olhar as regras completas no &lt;a href="https://www.100daysofcode.com/"&gt;site oficial do desafio&lt;/a&gt;, voce pode acessar as regras em português &lt;a href="https://github.com/kallaway/100-days-of-code/blob/master/intl/pt-br/LEIAME.md"&gt;aqui&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As regras são claras:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Codifique durante uma hora do seu dia durante 100 dias seguidos.&lt;/li&gt;
&lt;li&gt;Divulgue publicamente no twitter seu progresso diario usando a #100DaysOfCode&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Existem mais algumas regras, mas essas duas são as principais.&lt;/p&gt;

&lt;p&gt;No &lt;a href="https://github.com/kallaway/100-days-of-code"&gt;repositorio do github&lt;/a&gt; voce pode ver como usar os arquivos de log para manter um acompanhamento do seu desenvolvimento no desafio.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pra começar, de um fork no repositorio, leia as regras e então: publicamente&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;1. Codifique uma hora por dia&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;2. Publique seu progresso diario de forma pública&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;3.faça um commit no arquivo de log no repositorio. **&lt;br&gt;
**Repita uma vez por dia, durante 100 dias.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Obs: O desafio tem outras regras, eu estou aqui simplificando elas, mas eu vou seguir todas elas :)&lt;/p&gt;

&lt;p&gt;No que foi que eu me meti?&lt;/p&gt;

&lt;h2&gt;
  
  
  Mas por que esse desafio? Qual o problema de ler sobre os assuntos e pronto? Desenvolver mais codigo te torna um dev melhor
&lt;/h2&gt;

&lt;p&gt;Por mais que os assuntos que eu vou abordar nesse chalange não sejam puramente de códigio como fazer uma API, fazer uma Rede convolutiva, criar um aplicativo assim. Esses conceito so podem ser aplicados, treinados e absorvidos enquato se desenvolve. São conceitos que devem ser praticados e experimentados. &lt;/p&gt;

&lt;p&gt;Não adianta ler sobre TDD, voce precisa &lt;em&gt;fazer&lt;/em&gt; TDD.&lt;/p&gt;

&lt;p&gt;E o mesmo vale para todos esses conceitos, principalmente quando falamos de DevOps.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qual a diferença da minha jornada?
&lt;/h2&gt;

&lt;p&gt;Muitas vezes esses desafios são concentrados para pessoas iniciantes na programação, fazendo projetos para aprender tecnologias, mas focar em qualidade de codigo te tira da mediocridade e te eleva como desenvolvedor. Esse tipo de desafio pode ser usado por desenvolvedores em qualquer nivel e pode ser muito bom para quando voce quer simplemente melhorar seu codigo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Se voce é um(a) desenvolvedor(a) Jr e que hoje quer crescer na sua carreira, eu espero que minha visão e minha tragetória te ajude a crescer também. Você não está mais no zero ou no básico, chegou a hora de se desafiar com coisas mais complexas. O mesmo vale pra mim&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Finalizando, esse não vai ser o meu unico desafio, apenas o primeiro. Fique atento que vou postar mais
&lt;/h2&gt;

&lt;p&gt;Criar hábitos é uma habilidade. Com o ano novo, vida nova nos sempre ficamos com a mente cheia de novas possibilidades.&lt;br&gt;
Não tente muitos desafios por vez, se concentre em um e os proximos ficam mais faceis.&lt;br&gt;
Eu tenho varias metas esse ano:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Melhorar como Dev (esse desafio é apenas a primeira parte disso)&lt;/li&gt;
&lt;li&gt;Melhorar minha capacidade fisica para fazer varias trilhas (sim, a classica academia)&lt;/li&gt;
&lt;li&gt;Crescer a &lt;a href="https://www.meetup.com/pt-BR/FlutterNation/"&gt;comunidade de Flutter&lt;/a&gt; que eu sou community manager (um meetup por mês)&lt;/li&gt;
&lt;li&gt;Um projeto bem grande e de cunho social que eu vou falar mais depois (misteeeeeriooo)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Estou ansiosa para 2020, tambem estou concentrada em não deixar essa animação morrer.&lt;/p&gt;

&lt;p&gt;Esse artigo vai estar numa série de artigos, que será uma das minhas forma de manter o acompanhamento do meu progresso. Não bastando uma hora por dia de codigo, vai ter tambem um artigo por dia aqui.&lt;/p&gt;

&lt;p&gt;Aos que me acompanharem nessa jornada, me desejem sorte.&lt;/p&gt;

</description>
      <category>100daysofcode</category>
      <category>motivation</category>
      <category>coding</category>
    </item>
    <item>
      <title>Um estudo sobre Flutter SafeArea</title>
      <dc:creator>Beatriz Herculano</dc:creator>
      <pubDate>Mon, 09 Dec 2019 17:59:03 +0000</pubDate>
      <link>https://dev.to/flutterfans/um-estudo-sobre-a-safearea-do-flutter-5cg4</link>
      <guid>https://dev.to/flutterfans/um-estudo-sobre-a-safearea-do-flutter-5cg4</guid>
      <description>&lt;p&gt;Esse artigo faz parte de uma série chamada "Widgets da Semana", para saber mais sobre essa ela leia nossa &lt;a href="https://dev.to/flutter/flutter-um-estudo-semanal-sobre-widgets-56g3"&gt;introdução&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  SafeArea
&lt;/h2&gt;

&lt;p&gt;O &lt;a href="https://www.youtube.com/watch?v=lkF0TQJO0bA&amp;amp;list=PLjxrf2q8roU23XGwz3Km7sQZFTdB996iG&amp;amp;index=2"&gt;video&lt;/a&gt; do Widget da semana postado no dia 14 de agosto de 2018, fala sobre a SafeArea. Esse widget inspeciona o modelo da tela do celular e ajusta a conteúdo para que ele fique formatado dentro dos limites.&lt;/p&gt;

&lt;p&gt;Não so o modelo/formato da tela é importante, mas como hoje aparecem varias notificações e também existem os recortes de tela, seu aplicativo pode ficar assim:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RjG68uSo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/2e770q6ef66ukboqqf7i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RjG68uSo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/2e770q6ef66ukboqqf7i.png" alt="Imagem simulando aplicativo que não se ajusta a tela de um celular com um recorte de tela e com pontas arredondadas" width="498" height="905"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para resolver esse tipo de incompatibilidade nós podemos usar o SafeArea.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="n"&gt;SafeArea&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nl"&gt;child:&lt;/span&gt; &lt;span class="c1"&gt;//Seus Widgets&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para entender a diferença entre usar ou não usar o SafeArea veja o exemplo a baixo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--guXOgNZe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/czhy4ecm2hsnqmjns7or.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--guXOgNZe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/czhy4ecm2hsnqmjns7or.jpeg" alt="Captura de tela de um aplicativo onde o texto invade a barra de notificação" width="590" height="1280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esse aplicativo tem o seguinte código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="n"&gt;Container&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nl"&gt;color:&lt;/span&gt; &lt;span class="n"&gt;Colors&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;white&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nl"&gt;child:&lt;/span&gt; &lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="s"&gt;'Esse texto invade a barra de notificação'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nl"&gt;style:&lt;/span&gt; &lt;span class="n"&gt;TextStyle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;color:&lt;/span&gt; &lt;span class="n"&gt;Colors&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;black&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
      &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sem usar a SafeArea o texto invade a barra de notificação e, ao olhar no celular, o texto é cortado pelo formato das pontas da tela que é arredondado.&lt;/p&gt;

&lt;p&gt;Se você apenas adicionar a SafeArea:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="n"&gt;SafeArea&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nl"&gt;child:&lt;/span&gt; &lt;span class="n"&gt;Container&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nl"&gt;color:&lt;/span&gt; &lt;span class="n"&gt;Colors&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;white&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nl"&gt;child:&lt;/span&gt; &lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="s"&gt;'Esse texto nao invade a barra de notificação'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nl"&gt;style:&lt;/span&gt; &lt;span class="n"&gt;TextStyle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;color:&lt;/span&gt; &lt;span class="n"&gt;Colors&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;black&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
      &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O resultado é bem melhor:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6vd0-x1F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/m9dgj9lbd5fa2tv1zsd3.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6vd0-x1F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/m9dgj9lbd5fa2tv1zsd3.jpeg" alt="Captura de tela de um aplicativo onde o texto não invade a barra de notificação" width="590" height="1280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Sobre Nós
&lt;/h2&gt;

&lt;p&gt;Eu e o pessoal da Flutter Nation estamos em uma &lt;a href="https://www.facebook.com/FlutterNationBr/"&gt;página&lt;/a&gt; e um &lt;a href="https://www.facebook.com/groups/FlutterNation/"&gt;grupo&lt;/a&gt; no Facebook. &lt;br&gt;
Também estamos no &lt;a href="https://www.meetup.com/pt-BR/FlutterNation/"&gt;Meetup&lt;/a&gt; e no &lt;a href="https://github.com/Flutter-Nation"&gt;GitHub&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>widget</category>
      <category>google</category>
      <category>mobile</category>
    </item>
    <item>
      <title>Flutter - Um estudo semanal sobre Widgets</title>
      <dc:creator>Beatriz Herculano</dc:creator>
      <pubDate>Wed, 27 Nov 2019 16:36:22 +0000</pubDate>
      <link>https://dev.to/flutterfans/flutter-um-estudo-semanal-sobre-widgets-56g3</link>
      <guid>https://dev.to/flutterfans/flutter-um-estudo-semanal-sobre-widgets-56g3</guid>
      <description>&lt;h2&gt;
  
  
  Widget Of The Week - Videos legendados em português, mas a documentação esta em inglês
&lt;/h2&gt;

&lt;p&gt;O canal oficial do flutter no &lt;a href="https://www.youtube.com/channel/UCwXdFgeE9KYzlDdR7TG9cMw"&gt;youtube&lt;/a&gt; posta semanalmente um vídeo falando de diferentes Widgets e como eles são usados no desenvolvimento de apps com flutter.&lt;/p&gt;

&lt;p&gt;Os videos são curtos e super interessantes, porém no seu formato não passam tantas informações e referenciam a &lt;a href="https://flutter.dev/docs"&gt;documentação oficial do flutter&lt;/a&gt; como uma fonte mais aprofundada nos widgets e códigos.&lt;/p&gt;

&lt;p&gt;Com legendas em Português e varias outras línguas, esses videos são bem acessíveis, mas a documentação está apenas em inglês. Barrando varias pessoas a procurarem a fundo sobre esses widgets e sobre o Flutter.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que nos vamos fazer? Um Artigo por semana sobre um dos Widgets!
&lt;/h2&gt;

&lt;p&gt;Então nós, pessoas apaixonadas por flutter e com tempo sobrando, decidimos aumentar o alcance de informações sobre o flutter e seus Widgets da semana.&lt;/p&gt;

&lt;p&gt;Nós vamos criar um artigo para cada widget da semana lançado e pros que vão lançar. Sabemos que será um desafio, já que até o dia atual já foram lançados 60 videos nesse formato, mas nossa força de vontade nos cega e nos guia.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sobre quais Widgets nos vamos escrever?
&lt;/h2&gt;

&lt;p&gt;Segue a lista de Widgets da semana, essa lista será atualizada conforme mais videos e artigos forem lançados:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/flutterfans/um-estudo-sobre-a-safearea-do-flutter-5cg4"&gt;SafeArea&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/flutterfans/um-estudo-sobre-flutter-expanded-36jc"&gt;Expanded&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Wrap&lt;/li&gt;
&lt;li&gt;AnimatedContainer&lt;/li&gt;
&lt;li&gt;Opacity&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/flutterfans/um-estudo-sobre-o-flutter-futurebuilder-4g8n"&gt;FutureBuilder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;FadeTransition&lt;/li&gt;
&lt;li&gt;FloatingActionButton&lt;/li&gt;
&lt;li&gt;PageView&lt;/li&gt;
&lt;li&gt;Table&lt;/li&gt;
&lt;li&gt;SliverAppBar&lt;/li&gt;
&lt;li&gt;SliverList e SliverGrid&lt;/li&gt;
&lt;li&gt;FadeInImage&lt;/li&gt;
&lt;li&gt;StreamBuilder&lt;/li&gt;
&lt;li&gt;InheritedModel&lt;/li&gt;
&lt;li&gt;ClipRRect&lt;/li&gt;
&lt;li&gt;Hero&lt;/li&gt;
&lt;li&gt;CustomPaint&lt;/li&gt;
&lt;li&gt;Tooltip&lt;/li&gt;
&lt;li&gt;FittedBox &lt;/li&gt;
&lt;li&gt;LayoutBuilder &lt;/li&gt;
&lt;li&gt;AbsorbPointer &lt;/li&gt;
&lt;li&gt;Transform&lt;/li&gt;
&lt;li&gt;BackdropFilter&lt;/li&gt;
&lt;li&gt;Align&lt;/li&gt;
&lt;li&gt;Positioned&lt;/li&gt;
&lt;li&gt;AnimatedBuilder &lt;/li&gt;
&lt;li&gt;Dismissible&lt;/li&gt;
&lt;li&gt;SizedBox&lt;/li&gt;
&lt;li&gt;ValueListenableBuilder&lt;/li&gt;
&lt;li&gt;Draggable &lt;/li&gt;
&lt;li&gt;Flexible &lt;/li&gt;
&lt;li&gt;MediaQuery &lt;/li&gt;
&lt;li&gt;Spacer &lt;/li&gt;
&lt;li&gt;InheritedWidget &lt;/li&gt;
&lt;li&gt;AnimatedIcon&lt;/li&gt;
&lt;li&gt;AspectRatio &lt;/li&gt;
&lt;li&gt;LimitedBox &lt;/li&gt;
&lt;li&gt;Placeholder &lt;/li&gt;
&lt;li&gt;RichText &lt;/li&gt;
&lt;li&gt;ReorderableListView &lt;/li&gt;
&lt;li&gt;AnimatedSwitcher&lt;/li&gt;
&lt;li&gt;AnimatedPositioned &lt;/li&gt;
&lt;li&gt;AnimatedPadding&lt;/li&gt;
&lt;li&gt;IndexedStack &lt;/li&gt;
&lt;li&gt;Semantics&lt;/li&gt;
&lt;li&gt;ConstrainedBox&lt;/li&gt;
&lt;li&gt;Stack &lt;/li&gt;
&lt;li&gt;AnimatedOpacity&lt;/li&gt;
&lt;li&gt;FractionallySizedBox &lt;/li&gt;
&lt;li&gt;ListView &lt;/li&gt;
&lt;li&gt;ListTile &lt;/li&gt;
&lt;li&gt;Container &lt;/li&gt;
&lt;li&gt;SelectableText&lt;/li&gt;
&lt;li&gt;DataTable&lt;/li&gt;
&lt;li&gt;Slider, RangeSlider e CupertinoSlider&lt;/li&gt;
&lt;li&gt;AlertDialog&lt;/li&gt;
&lt;li&gt;AnimatedCrossFade&lt;/li&gt;
&lt;li&gt;DraggableScrollableSheet &lt;/li&gt;
&lt;li&gt;ColorFiltered&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Sobre Nós
&lt;/h2&gt;

&lt;p&gt;Eu e o pessoal da Flutter Nation estamos em uma &lt;a href="https://www.facebook.com/FlutterNationBr/"&gt;página&lt;/a&gt; e um &lt;a href="https://www.facebook.com/groups/FlutterNation/"&gt;grupo&lt;/a&gt; no Facebook. &lt;br&gt;
Também estamos no &lt;a href="https://www.meetup.com/pt-BR/FlutterNation/"&gt;Meetup&lt;/a&gt; e no &lt;a href="https://github.com/Flutter-Nation"&gt;GitHub&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>widgets</category>
      <category>google</category>
      <category>mobile</category>
    </item>
    <item>
      <title>Iniciando com Flutter: Widgets</title>
      <dc:creator>Beatriz Herculano</dc:creator>
      <pubDate>Thu, 12 Sep 2019 18:31:15 +0000</pubDate>
      <link>https://dev.to/flutterfans/iniciando-com-flutter-widgets-3o7m</link>
      <guid>https://dev.to/flutterfans/iniciando-com-flutter-widgets-3o7m</guid>
      <description>&lt;h2&gt;
  
  
  Introdução
&lt;/h2&gt;

&lt;h4&gt;
  
  
  O que é flutter?
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://dev.to/flutter/o-que-e-o-flutter-e-dart-e25"&gt;Flutter é um SDK para desenvolvimento de aplicativos multiplataforma e aplicações web criada pela Google.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Eu comecei estudando flutter sem nunca ter programado com componentes, então vários conceitos eram estranhos para mim, o principal foi o conceito e uso de Widgets.&lt;/p&gt;

&lt;p&gt;Ao ler a &lt;a href="https://flutter.dev/docs/development/ui/widgets-intro"&gt;documentação do flutter&lt;/a&gt;, me deparei com a seguinte definição de widget:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Widgets describe what their view should look like given their current configuration and state. When a widget’s state changes, the widget rebuilds its description, which the framework diffs against the previous description in order to determine the minimal changes needed in the underlying render tree to transition from one state to the next.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Em uma tradução livre: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Widgets são estruturas que descrevem como a sua visualização deve ser, conforme o sua configuração e estado atual. Quando o estado de um widget muda, o ele reconstrói sua descrição, a qual o framework compara com a diferença da descrição anterior, para determinar as mudanças mínimas na árvore de renderização ao transitar de um estado para outro.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;O trecho traz o conceito de widget, porém não traz a informação de como ele é usado para a construção do app em flutter.&lt;/p&gt;

&lt;p&gt;O objetivo desse artigo é trazer de forma clara o conceito de widgets, sejam eles imutáveis ou mutáveis. E passar uma visão do que é construir um aplicativo em flutter usando eles.&lt;/p&gt;

&lt;h1&gt;
  
  
  Árvore de Renderização
&lt;/h1&gt;

&lt;p&gt;A primeira coisa para se entender é que todo item visual em um app em flutter é um widget dentro do outro:&lt;br&gt;
Se eu quiser um texto centralizado eu coloco um widget Text dentro de um Center. Inclusive, seu app em si vai ser um Widget com outros dentro dele.&lt;/p&gt;

&lt;p&gt;Quando o Widget exterior tem seu estado modificado, ele reconstrói os Widgets interiores a ele, ou seja, sua árvore de renderização.&lt;/p&gt;
&lt;h1&gt;
  
  
  Imutáveis
&lt;/h1&gt;

&lt;p&gt;Chamados de “StatelessWidgets” é um objeto que se constrói uma vez e não tem informações de como se reconstruir. Então ele não vai afetar a sua árvore de renderização.&lt;/p&gt;

&lt;p&gt;Um exemplo de um widget imutável ou Stateless é o Text. Ele é um widget que recebe um parâmetro string/texto e monta um objeto visual onde esse valor é transformado em uma label e exibido na tela.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;'Esse é um texto imutável'&lt;/span&gt;&lt;span class="p"&gt;,);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ele, por si só nunca muda seu texto sozinho, se ele foi construído uma vez, ele não tem capacidade de se reconstruir com um valor de texto novo.&lt;/p&gt;

&lt;h1&gt;
  
  
  Mutáveis
&lt;/h1&gt;

&lt;p&gt;O chamado de “StatefulWidget” é um objeto que tem objeto de State. Esse objeto representa situação atual do widget, que pode ser modificada conforme o tempo ou conforme coisas acontecem no seu app. Esse estado sabe se reconstruir, afetando todos os Widgets dentro dele, ou seja, sua árvore de renderização.&lt;/p&gt;

&lt;p&gt;Se eu tenho um aplicativo onde um botão é clicado para mudar o valor do Widget, deve ser indicado que o estado dele mudou, usando o método setState. Assim nos forçamos o objeto a se reconstruir e, também, a todos os Widgets que tem dentro dele, inclusive os imutáveis. Se você quiser saber mais em como o setState afeta o desempenho do app veja a &lt;a href="https://flutter.dev/docs/testing/best-practices"&gt;documentação&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Você pode entender melhor com o exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Counter&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;StatefulWidget&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nd"&gt;@override&lt;/span&gt;
  &lt;span class="n"&gt;_CounterState&lt;/span&gt; &lt;span class="n"&gt;createState&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;_CounterState&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;_CounterState&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;State&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Counter&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;_counter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="n"&gt;_incrementCounter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="n"&gt;_counter&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nd"&gt;@override&lt;/span&gt;
  &lt;span class="n"&gt;Widget&lt;/span&gt; &lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BuildContext&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;Container&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nl"&gt;child:&lt;/span&gt; &lt;span class="n"&gt;Center&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nl"&gt;child:&lt;/span&gt; &lt;span class="n"&gt;Column&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
          &lt;span class="nl"&gt;mainAxisAlignment:&lt;/span&gt; &lt;span class="n"&gt;MainAxisAlignment&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;center&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="nl"&gt;children:&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Widget&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;[&lt;/span&gt;
            &lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
              &lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="si"&gt;$_counter&lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="nl"&gt;style:&lt;/span&gt; &lt;span class="n"&gt;Theme&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;textTheme&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;display1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="n"&gt;FloatingActionButton&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
              &lt;span class="nl"&gt;onPressed:&lt;/span&gt; &lt;span class="n"&gt;_incrementCounter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="nl"&gt;tooltip:&lt;/span&gt; &lt;span class="s"&gt;'Increment'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="nl"&gt;child:&lt;/span&gt; &lt;span class="n"&gt;Icon&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Icons&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="p"&gt;)&lt;/span&gt;
          &lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
      &lt;span class="p"&gt;),&lt;/span&gt;
      &lt;span class="nl"&gt;color:&lt;/span&gt; &lt;span class="n"&gt;Colors&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;white&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nos temos um StatefulWidget que tem tem uma variável int, um objeto Text e um botão. Quando eu clico no botão a eu somo 1 ao meu número, e sinalizo que o estado do meu widget foi modificado, usando o setState. Assim ele força e reconstrução do meu objeto Text dentro dele com o novo valor do meu número.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusão
&lt;/h1&gt;

&lt;p&gt;No final, construir um app em flutter é usar  StatefulWidgets que forçam a reconstrução de StatelessWidgets.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Meus agradecimento a Filipe Pereira, um grande amigo.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>google</category>
      <category>dart</category>
      <category>development</category>
    </item>
  </channel>
</rss>
