<?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: Thais Aquino</title>
    <description>The latest articles on DEV Community by Thais Aquino (@tasaquino).</description>
    <link>https://dev.to/tasaquino</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%2F226777%2F49ef653b-26e0-406b-9a34-317b14d9b100.jpeg</url>
      <title>DEV Community: Thais Aquino</title>
      <link>https://dev.to/tasaquino</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tasaquino"/>
    <language>en</language>
    <item>
      <title>From Flutter 1.22.5 to Flutter 3</title>
      <dc:creator>Thais Aquino</dc:creator>
      <pubDate>Sat, 14 May 2022 13:39:02 +0000</pubDate>
      <link>https://dev.to/tasaquino/from-flutter-1225-to-flutter-3-16ak</link>
      <guid>https://dev.to/tasaquino/from-flutter-1225-to-flutter-3-16ak</guid>
      <description>&lt;p&gt;I have a pet project that I wrote some time ago in 2020, in order to put together some content and guidance (mainly for my own usage) about Flutter development architecture using BLOC and MVI. You can find the first article here:&lt;br&gt;
 &lt;br&gt;
&lt;a href="https://thasaquino.medium.com/flutter-reactive-architecture-with-bloc-and-mvi-part-1-94bec725f2eb"&gt;https://thasaquino.medium.com/flutter-reactive-architecture-with-bloc-and-mvi-part-1-94bec725f2eb&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So now Flutter 3 was released and was about time to update that project :D&lt;br&gt;
I will share in this article the steps that I faced in order to have my project updated, maybe may serve as someone that can have the same need. So let's go.&lt;/p&gt;

&lt;p&gt;First of all, I run "flutter doctor" to check how far I was from the latest version and to check my outdated setup. Then had to run "flutter upgrade" in order to, as the name says, upgrade :) Had to update also things regarding Android and Xcode setup, but was pretty straightforward following the suggestion from Flutter doctor command.&lt;br&gt;
So my setup was finally looking good to go:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9XNNs7fd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vnbbeeamddwp5k2jdf5u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9XNNs7fd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vnbbeeamddwp5k2jdf5u.png" alt="Image description" width="800" height="180"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next step was to run "dart migrate" and then of course I had issues because of some libraries I was using with old versions that were not supporting yet null safety functionality.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---PQd00h3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9d89yta9lntkbsidstov.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---PQd00h3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9d89yta9lntkbsidstov.png" alt="Image description" width="800" height="157"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To see what null safe package versions were available, I just had to run "dart pub outdated - mode=null-safety". So you can see in the figure that is pretty clear what needs to be upgraded.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6w0IkWfP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/py2qcnddnhlhtxteh2z8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6w0IkWfP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/py2qcnddnhlhtxteh2z8.png" alt="Image description" width="800" height="289"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then, to properly start using newer versions with null safety support, I had to run "dart pub upgrade - null-safety", and by using this command my pubspec.yaml got updated as following:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lO1njBlK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p1l8q73ebrr4tqkibfa1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lO1njBlK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p1l8q73ebrr4tqkibfa1.png" alt="Image description" width="614" height="182"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After that, I only got warnings regarding my own files and followed the suggestions on how to fix the issues:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FZkJlSZj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t12eovg2fr3kjo4xz76u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FZkJlSZj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t12eovg2fr3kjo4xz76u.png" alt="Image description" width="800" height="724"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One thing to mention is that I had to replace the use of: Scaffold.of(context).showSnackBar(snackBar) with ScaffoldMessenger.of(context).showSnackBar(snackBar).&lt;/p&gt;

&lt;p&gt;ScaffoldMessenger brings improvements on the snack bar usage and how it gets persisted between Scaffold transitions.&lt;/p&gt;

&lt;p&gt;Another thing I had to update was regarding Android embedding. On Flutter 2 it got some improvements in order to work better for cases where you need to use the Add-to-app feature. Provides better support when your FlutterActivity is not the first and only Android Activity in the application.&lt;/p&gt;

&lt;p&gt;Reference: &lt;a href="https://github.com/flutter/flutter/wiki/Upgrading-pre-1.12-Android-projects"&gt;https://github.com/flutter/flutter/wiki/Upgrading-pre-1.12-Android-projects&lt;/a&gt;&lt;br&gt;
And then voilà, my app was building again and now with Flutter 3 :)     &lt;/p&gt;

&lt;p&gt;Here is the branch that has the changes: &lt;a href="https://github.com/tasaquino/mvi_flutter_example/tree/updating-to-flutter3"&gt;https://github.com/tasaquino/mvi_flutter_example/tree/updating-to-flutter3&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tJpsM4OC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/arwktcjbp5ccbj8a6ymk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tJpsM4OC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/arwktcjbp5ccbj8a6ymk.png" alt="Image description" width="750" height="1334"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>mobile</category>
      <category>android</category>
      <category>ios</category>
    </item>
    <item>
      <title>Flutter: First steps and tips</title>
      <dc:creator>Thais Aquino</dc:creator>
      <pubDate>Sat, 19 Oct 2019 13:14:55 +0000</pubDate>
      <link>https://dev.to/tasaquino/flutter-first-steps-and-tips-enf</link>
      <guid>https://dev.to/tasaquino/flutter-first-steps-and-tips-enf</guid>
      <description>&lt;p&gt;In short Flutter is a Framework to write to iOS and Android from a single codebase.&lt;br&gt;
While my little Olivia sleeps 👧 , decided to share a little bit more about Flutter and my experiences.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why use Flutter?
&lt;/h2&gt;

&lt;p&gt;Giving the options to write mobile apps using a multi-platform approach, Flutter has some attractive characteristics. You can easily create beautiful UI designs and smooth animations. With the use of Hot Reload and Hot Restart you get a fast development cycle. One single codebase, assuring quality and performance, is compiled to native machine code for each platform.&lt;/p&gt;

&lt;p&gt;At this moment, Google Play Instant is not possible with Flutter. But Android App Bundle (AAB) and Dynamic Delivery works since Flutter 1.2. If you do need some specific feature for your app is important to research about it.&lt;/p&gt;
&lt;h2&gt;
  
  
  Widgets, Reactive Framework and App Structure
&lt;/h2&gt;

&lt;p&gt;Each view is built as an immutable tree of widgets. Almost everything in Flutter is a Widget (you will hear this a lot!). As you may know, Flutter uses declarative UI, so you don’t have a separate file (like xml for Android world) to create your UI, widgets, alignment, paddings… everything you create using Dart.&lt;/p&gt;

&lt;p&gt;When a widget state changes because of user inputs (actions), for example, the widget rebuilds itself to handle the new state (reaction). You don’t have to write extra code to update the UI once the state changes.&lt;/p&gt;

&lt;p&gt;The rendering engine is part of your app, you don’t need to bridge the UI rendering code to the native platform. It is built in Skia, a 2D graphics rendering library. It display widgets for both iOS and Android devices. The iOS and Android platforms just have to provide a canvas to place the widgets on and rendering engine inside.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iFcOWVgK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/2732/1%2AoCP7O90JBYcai55eO3oaCQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iFcOWVgK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/2732/1%2AoCP7O90JBYcai55eO3oaCQ.png" alt="Flutter layers and Engine" width="800" height="502"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h6&gt;
  
  
  Flutter layers and Engine
&lt;/h6&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--c4xczb9k--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/2932/1%2ACA-KeUq_ZgmmHNXcQpoJ7g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--c4xczb9k--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/2932/1%2ACA-KeUq_ZgmmHNXcQpoJ7g.png" alt="Flutter app (single codebase), rendering happens in the platform canvas and device services are accessed using Platform Channels&amp;lt;br&amp;gt;
" width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h6&gt;
  
  
  Flutter app (single codebase), rendering happens in the platform canvas and device services are accessed using Platform Channels
&lt;/h6&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--44PNEoQJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/2204/1%2APDPHIhEYXOzUDOgElqrjNw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--44PNEoQJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/2204/1%2APDPHIhEYXOzUDOgElqrjNw.png" alt="Without Flutter… Common Native development app structures (separate codebase)" width="800" height="825"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h6&gt;
  
  
  Without Flutter… Common Native development app structures (separate codebase)
&lt;/h6&gt;
&lt;h2&gt;
  
  
  Why Dart?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DJ8qIgU0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/640/1%2AnDfBUkIpv1lUybTa4R-iRw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DJ8qIgU0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/640/1%2AnDfBUkIpv1lUybTa4R-iRw.png" alt="" width="320" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the concerns about adopting a different approach to write apps is to maybe have to learn another language.&lt;/p&gt;

&lt;p&gt;Dart is similar to any languages you may have experienced in your life (Java, Kotlin, Swift, C#…).&lt;/p&gt;

&lt;p&gt;Concise, strongly typed, object-oriented language. For mobile development concerns, Dart is performant in development and in production, supports JIT (just-in-time) and AOT (ahead-of-time) compilation.&lt;/p&gt;

&lt;p&gt;JIT give powers to Flutter to recompile directly on the device while the app is running (Hot Reload). AOT enables the compilation to native ARM code, so the resulting native code starts quickly and performant.&lt;/p&gt;

&lt;p&gt;From Flutter FAQ: &lt;a href="https://flutter.dev/docs/resources/faq#why-did-flutter-choose-to-use-dart"&gt;https://flutter.dev/docs/resources/faq#why-did-flutter-choose-to-use-dart&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Flutter cool tools
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Hot Reload&lt;/em&gt; as mentioned before, helps you make changes in your code and easily get them deployed into your device without waiting (less coffee time for you 😅).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Hot Restart&lt;/em&gt; after the first time you deploy to your device or emulator, the subsequent will be faster.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Widget inspector&lt;/em&gt; is a tool for visualizing and exploring Flutter widget trees. This helps you understand existing layouts and find layout issues.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2Owj40nM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/2872/1%2A6cpdhllw_ilLt11aF-KxpQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2Owj40nM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/2872/1%2A6cpdhllw_ilLt11aF-KxpQ.png" alt="" width="800" height="473"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  State Management
&lt;/h2&gt;

&lt;p&gt;This is a hot subject in Flutter development. Since the UI depends on states, you need to be aware of how it works and to not mess with rebuilding all widgets every time. And also how to share data and state between the screens in your app.&lt;/p&gt;
&lt;h6&gt;
  
  
  From official Flutter doc &lt;a href="https://flutter.dev/docs/development/data-and-backend/state-mgmt/intro"&gt;https://flutter.dev/docs/development/data-and-backend/state-mgmt/intro&lt;/a&gt;
&lt;/h6&gt;

&lt;p&gt;There are some approaches you can study to chose the best that suits your app needs.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scoped Model&lt;/li&gt;
&lt;li&gt;Redux&lt;/li&gt;
&lt;li&gt;BLOC&lt;/li&gt;
&lt;li&gt;InheritedWidgets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Will let references for great content that helped me:&lt;br&gt;
&lt;a href="https://flutter.dev/docs/development/data-and-backend/state-mgmt/intro?source=post_page-----df0c895a92ca----------------------"&gt;Official doc about state mgmt&lt;/a&gt;&lt;br&gt;
&lt;a href="https://flutter.dev/docs/development/data-and-backend/state-mgmt/options?source=post_page-----df0c895a92ca----------------------"&gt;Official doc about state mgmt approaches&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.didierboelens.com/2018/12/reactive-programming---streams---bloc---practical-use-cases/?source=post_page-----df0c895a92ca----------------------"&gt;Streams BLOC&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.didierboelens.com/2019/04/bloc---scopedmodel---redux---comparison/?source=post_page-----df0c895a92ca----------------------"&gt;BLOC, Scoped Model and Redux comparison&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Add Flutter modules to Android/iOS apps
&lt;/h2&gt;

&lt;p&gt;Maybe you already have an Android or iOS app and is considering to add Flutter to a particular feature, just a piece of your app to test how it works and have a POC running in production. This is possible and will let the reference for the guide here:&lt;/p&gt;

&lt;p&gt;Please be aware that this is a work in progress as the document tells itself.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps?source=post_page-----df0c895a92ca----------------------"&gt;Add Flutter modules to existing apps&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Flutter Flavors
&lt;/h2&gt;

&lt;p&gt;Is possible to setup Flavors for whatever the reasons you have (different distribution/environments…). In my case I needed to setup different environments each one with its own Firebase/Firestore project.&lt;/p&gt;

&lt;p&gt;You need to configure Android Flavors and iOS Schemes separately. These are the references I used, but had to find my own way since the iOS configuration was not in all of the references.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@salvatoregiordanoo/flavoring-flutter-392aaa875f36?source=post_page-----df0c895a92ca----------------------"&gt;Flavoring Flutter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/flutter-community/flutter-ready-to-go-e59873f9d7de?source=post_page-----df0c895a92ca----------------------"&gt;Flutter ready to go&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@animeshjain/build-flavors-in-flutter-android-and-ios-with-different-firebase-projects-per-flavor-27c5c5dac10b?source=post_page-----df0c895a92ca----------------------"&gt;Build flavors in flutter with different firebase projects&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This last one ☝️really helped me with iOS part… As an Android developer I struggle a little bit to setup all the configuration for the schemes. But in the end was just the matter of understanding how it works.&lt;/p&gt;
&lt;h2&gt;
  
  
  Continuous Integrations and Continuous delivery (CI/CD)
&lt;/h2&gt;

&lt;p&gt;I’ve seen some tools that are more Flutter friendly, like CodeMagic and BitRise. I didn’t use any of these, but their documentation seems to be strait forward.&lt;/p&gt;

&lt;p&gt;What I do have experience is configuring the environment for Flutter CI/CD in CircleCI. I was able to setup flavors/schemes in the project, for example to have a development, beta and production environment.&lt;/p&gt;

&lt;p&gt;Configured a workflow with jobs to run Flutter Unit Tests, generate iOS beta/prod and Android beta/prod.&lt;/p&gt;

&lt;p&gt;For iOS used a mac instance, installed flutter, Fastlane, Firebase CLI and added the necessary configuration to build and archive to submit the ipa with the specific flavor to Firebase App Distribution.&lt;/p&gt;

&lt;p&gt;For Android used a docker image that already have flutter installed cirrusci/flutter. Installed Fastlane, Firebase CLI and added the necessary steps to generate an apk for the flavors needed.&lt;/p&gt;

&lt;p&gt;Here is my gist to help with all these configurations:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h2&gt;
  
  
  Dart Obfuscation
&lt;/h2&gt;

&lt;p&gt;Is really simple to configure, but be aware of some issues that some people in the community already shared. Some references about it:&lt;br&gt;
&lt;a href="https://github.com/flutter/flutter/wiki/Obfuscating-Dart-Code?source=post_page-----df0c895a92ca----------------------"&gt;Obfuscating Dart Code&lt;/a&gt;&lt;br&gt;
&lt;a href="https://stackoverflow.com/questions/50542764/how-to-obfuscate-flutter-apps?source=post_page-----df0c895a92ca----------------------"&gt;How to Obfuscate Flutter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now I need to sleep 😴 If something is missing or I find anything else that can helps will post another time.&lt;/p&gt;

&lt;p&gt;Thank you for reading! 😉&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>dart</category>
      <category>ci</category>
      <category>firebase</category>
    </item>
    <item>
      <title>Impressions about Flutter</title>
      <dc:creator>Thais Aquino</dc:creator>
      <pubDate>Wed, 11 Sep 2019 14:08:42 +0000</pubDate>
      <link>https://dev.to/tasaquino/impressions-about-flutter-3ofe</link>
      <guid>https://dev.to/tasaquino/impressions-about-flutter-3ofe</guid>
      <description>&lt;p&gt;I’ve been studying Flutter since June this year, the same time I moved to Australia. My team needed to get speed on the new app development, even with the team incomplete because the iOS developer joined us few months later. Using the same business logic implemented once, have same look and few, all the developers working on the same code base was a pretty good solution for us to think about (and I believe this happens with many other companies that need to grow their business fast). So we started developing with just two formerly Android developers and one backend guy.&lt;/p&gt;

&lt;p&gt;Before starting with Flutter, we made researches to understand if we were making the right decision and start developing more confident.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Make a code with quality, thinking about architecture, unit testing and UI testing&lt;/li&gt;
&lt;li&gt;Possibility to have different components depending on SO that is running if needed&lt;/li&gt;
&lt;li&gt;Reuse code&lt;/li&gt;
&lt;li&gt;Productivity&lt;/li&gt;
&lt;li&gt;Learning curve&lt;/li&gt;
&lt;li&gt;Use a native library, if needed&lt;/li&gt;
&lt;li&gt;CI/CD and deployment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All checks were good and we were excited about Flutter (and good thing is we still are 😊).&lt;/p&gt;

&lt;p&gt;As a small team we could get benefit on having the same knowledge about the language, framework, business logic and reviewing the same code. The learning curve is not so hard given the similarities of the concepts and Dart language characteristics that are familiar to Java/Kotlin/Swift developers.&lt;/p&gt;

&lt;p&gt;In the beginning I was kind of missing writing XML for UI as was used when developing for Android, UI code in Dart can look weird and messy, but now I see that using a declarative UI programming speedup development.&lt;/p&gt;

&lt;p&gt;Hot Reload and faster builds are big wins! Let’s see if this will keep with a big code base in the future.&lt;/p&gt;

&lt;p&gt;Understanding state management with Flutter takes a time and is a good subject for next posts. For now I am working with Redux, is doing pretty good, is quite similar to MVI that was using in Android development.&lt;/p&gt;

&lt;p&gt;Dart is OK, but I do miss Kotlin! In the language matter seems I gave few steps behind, thinking how much features Kotlin offers.&lt;/p&gt;

&lt;p&gt;I got impressed on how the Flutter community is big, given the freshness as it became out of beta. The official documentation is well organised and there are a lot of resources from the community as well.&lt;/p&gt;

&lt;p&gt;For sure was a little bit concerned about starting with Flutter, having about 7 years of experience developing for Android. But is good to change mindset and thinking out of the box! I am using an iPhone in order to remember that I need to care about user experience in both platforms.&lt;/p&gt;

&lt;p&gt;With huge companies adopting Flutter like Nubank, Alibaba and Google itself for a long time give us more courage to take a shot on this :)&lt;br&gt;
Even if you already have a project running in production, is possible to have modules in Flutter and you don’t need to rewrite your app from scratch.&lt;/p&gt;

&lt;p&gt;Excited about Flutter and more technical posts will come for sure!&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>mobile</category>
    </item>
  </channel>
</rss>
