<?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: Daniele Bertella</title>
    <description>The latest articles on DEV Community by Daniele Bertella (@_denb).</description>
    <link>https://dev.to/_denb</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%2F135982%2F30ef1b7d-b658-4ff9-bc0f-4daa2cf669fa.jpg</url>
      <title>DEV Community: Daniele Bertella</title>
      <link>https://dev.to/_denb</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/_denb"/>
    <language>en</language>
    <item>
      <title>Gatsby or not Gatsby. What's Next 😍?</title>
      <dc:creator>Daniele Bertella</dc:creator>
      <pubDate>Fri, 20 Nov 2020 20:16:21 +0000</pubDate>
      <link>https://dev.to/_denb/gatsby-or-not-gatsby-what-s-next-24b</link>
      <guid>https://dev.to/_denb/gatsby-or-not-gatsby-what-s-next-24b</guid>
      <description>&lt;p&gt;Disclaimer: I'm a Big Gatsby fan and I built multiple website with it. I love its simplicity especially the rich plugin ecosystem. That is brilliant! I also love theme-ui that is the css-in-js library made by people from Gatsby, I'm using it literally every time I can.&lt;/p&gt;

&lt;p&gt;I wanted to start a new project. I knew that this time it would have been slightly bigger than my usual pet projects. I was going to build a full website with a possibility to turn it into an e-commerce lately. (And I did btw &lt;a href="https://cascinarampina.it"&gt;cascinarampina.it&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;I thought a lot about it, I felt quite confortable in starting it with Gatsby but I also wanted to use this opportunity to try something new. Since Next.js just came out with its beautiful version 10 I decided to give it a go. I have to say, that was 🤯&lt;/p&gt;

&lt;p&gt;Before talking about Next.js I have to spend a couple of words about the CMS choice. In the past I tried Netlify Cms, Dato, Sanity and I evaluated a few others... As a "Single Front End" engineer I'm always looking for something easy to configure and possibly free or at a very low cost. All those solutions are brilliant and let you build whatever you want at no cost. But for this project I thought I might have needed something more than the free tier especially with form submissions so I looked elsewhere. &lt;/p&gt;

&lt;p&gt;Wordpress! Right! Not long time ago I promised myself I would never touch Wordpress again. And here I was, finding myself 😉 to WP again. I don't regret the choice! With the help of a few plugins Wordpress it's a very valid choice as an headless CMS. Not to mention that I could delegate the data entry to the friends I was going to make the website for. Life is beautiful!&lt;/p&gt;

&lt;h2&gt;
  
  
  Next.js
&lt;/h2&gt;

&lt;p&gt;I have to say I'm impressed by how simple it turned out to set up to go from 0 to have a website up and running fetching data from my CMS. I don't have experience with previous versions but v 10 it's brilliant. All you need to know about the new release is that there are 3 possible functions you need/can export from your page components. No other configurations. Nothing else. It's a bit weird to have those "random" functions at the end of your component but once you understand them it just clicks!&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;getStaticProps&lt;/code&gt; (Static Generation) &lt;a href="https://nextjs.org/docs/basic-features/data-fetching#getstaticprops-static-generation"&gt;🔗&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;This is the function I used most and it's the function that lets you pass props to your page at build time, that means you are creating a Server Side Generated page (SSG)&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;getStaticPaths&lt;/code&gt; (Static Generation) &lt;a href="https://nextjs.org/docs/basic-features/data-fetching#getstaticpaths-static-generation"&gt;🔗&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;This is the function you use to generate pages dynamically. The file name should be something like &lt;code&gt;[slug].tsx&lt;/code&gt; and Next will be able to generate pages for every &lt;code&gt;slug&lt;/code&gt; the function returns. It works well with &lt;code&gt;getStatiProps&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;getServerSideProps&lt;/code&gt; (Server-side Rendering) &lt;a href="https://nextjs.org/docs/basic-features/data-fetching#getserversideprops-server-side-rendering"&gt;🔗&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;This is the function that turn your page in a Server Side Render page (SSR) &lt;/p&gt;

&lt;p&gt;The functions above are mutually exclusive, you can't have &lt;code&gt;getServerSideProps&lt;/code&gt; and &lt;code&gt;getStaticProps&lt;/code&gt; functions exported from the same page.&lt;/p&gt;

&lt;p&gt;But basically at any given point you are free to decide to have an SSR or SSG page and have a webiste that mixes the two approaches. To be fair my SSR pages are very slow to render, probably due to my CMS 😅 performances, so I opted for having all the pages generated at build time. &lt;/p&gt;

&lt;p&gt;Another killer feature is the ability to add NodeJS endpoints directly in the same app.  Well done to whoever thought of something like that, if I only think at the possibilities, it's incredible for me. Being able to generated a static site at build time and have node endpoints it's just WOW! For instance you'll be able to call resources protected by CORS and provide them to your ui being on same origin. 💣&lt;/p&gt;

&lt;p&gt;All of this with no setup at all! No custom servers nothing more than what is built-in in Next.js&lt;/p&gt;

&lt;h2&gt;
  
  
  Not everything is 💅
&lt;/h2&gt;

&lt;p&gt;Unfortunately, despite of all the above awesomeness I also found a few things that I didn't enjoy and here the comparison with Gatsby kicks in in their favour.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Showing Active Links in the menu bar. There is not a simple prop in next/link component. It's not complicated to build your own and listen to routes changes to adapt the style. But it's some more work to do to accomplish such a simple thing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To generate an xml sitemap ain't easy. There are a few examples out there, feel free to look at &lt;a href="https://github.com/dbertella/cascinarampina/blob/main/pages/sitemap.xml.tsx"&gt;my implementation&lt;/a&gt; if you wish or look at this &lt;a href="https://github.com/vercel/next.js/issues/9051"&gt;issue&lt;/a&gt; to have some ideas, anyway, thinking at &lt;a href="https://www.gatsbyjs.com/plugins/gatsby-plugin-sitemap/"&gt;the Gatsby way&lt;/a&gt; I 😭 a little loosing my nights handling SEO related tasks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To add Google analytics and send correct data you need some custom implementation, that's not that bad but again in Gatsby, with its official plugin comes (&lt;a href="https://github.com/gatsbyjs/gatsby/issues/28155"&gt;almost&lt;/a&gt;) for free.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To generate manifest and app icons I used an empty Gatsby instance, another &lt;a href="https://www.gatsbyjs.com/plugins/gatsby-plugin-manifest/"&gt;very useful plugin&lt;/a&gt; I can't live without. 🙀 So ok, this isn't something bad about Next, but something I missed here for sure.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;I really enjoyed this project and Wordpress + Next.js seems quite a solid choice for my next project(s). &lt;/p&gt;

&lt;p&gt;In the meanwhile, though, I made on my personal website &lt;a href="https://danielebertella.com"&gt;danielebertella.com&lt;/a&gt; and I decided that there was no point in using Next.js.&lt;br&gt;
To build a static website in a night Gatsby is still the best choice for me. &lt;/p&gt;

&lt;p&gt;Right now I can't decide what's better actually. I'm looking forward to what Gatsby team are going to release next, I heard quite nice stuff are coming. We shall see!&lt;/p&gt;

&lt;p&gt;And you? What would you choose for your next project? Let me know! I'm super interested in the topic!&lt;/p&gt;




&lt;p&gt;Cover image from &lt;a href="https://cascinarampina.it"&gt;cascinarampina.it&lt;/a&gt;&lt;br&gt;
Thanks Mike for the proof reading 😉&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>gatsby</category>
      <category>react</category>
    </item>
    <item>
      <title>Publishing my Flutter App on Google Play Store</title>
      <dc:creator>Daniele Bertella</dc:creator>
      <pubDate>Wed, 10 Jun 2020 13:00:46 +0000</pubDate>
      <link>https://dev.to/_denb/publishing-my-flutter-app-on-google-play-store-5en5</link>
      <guid>https://dev.to/_denb/publishing-my-flutter-app-on-google-play-store-5en5</guid>
      <description>&lt;p&gt;I finally published my first app in the &lt;em&gt;Google Play Store&lt;/em&gt;. &lt;a href="https://play.google.com/store/apps/details?id=hector.the.little.dinosaur" rel="noopener noreferrer"&gt;Hector the little dinosaur&lt;/a&gt; is live!&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fw78cjuph0l2cnuaavkne.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fw78cjuph0l2cnuaavkne.png" alt="App published on the store"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This was a great journey and the &lt;strong&gt;Flutter&lt;/strong&gt; code was the easiest part of the whole process. &lt;/p&gt;

&lt;p&gt;Publishing on the Play Store is not straightforward, and I didn't even face the App Store yet. Every time you publish a new release you will need to wait for Google to review and make it available even for an internal test. Normally it takes just a few hours. I was publishing new tests at night and they were visible the morning after. At times, especially at the beginning, it took days. &lt;br&gt;
The issue is the lack of control with no clear indication. You wait for a notification and after that you also wait some more in order to see the changes in the store.&lt;/p&gt;

&lt;p&gt;I left all the store listing optimisation to &lt;a href="https://hector.aureliemercier.com" rel="noopener noreferrer"&gt;Aurelie&lt;/a&gt; since she is the author and illustrator of the book, and accessorily an SEO/ASO expert! 🙀 That's why it looks very good! &lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F6csnlkjzwub49adwh2x3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F6csnlkjzwub49adwh2x3.png" alt="Hector finally on the store"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here are a few milestones I'd like to share.&lt;/p&gt;

&lt;h2&gt;
  
  
  May the 27th: App live for the first time!
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fjd85d8n8886ucq4sy4rd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fjd85d8n8886ucq4sy4rd.png" alt="App is live"&gt;&lt;/a&gt;&lt;br&gt;
This was the first time I've seen the word &lt;code&gt;published&lt;/code&gt; close to the app listing. I received a notification saying the app passed the review and it was live but in reality I had to wait a good half a day in order to be able to share a link to install it. It's an internal beta so just a predefined set of friends had access to it. People also needed to follow a particular process in order to install this test version. &lt;a href="https://support.google.com/googleplay/android-developer/answer/9303479?hl=en-GB" rel="noopener noreferrer"&gt;Here&lt;/a&gt; is the documentation about it. &lt;/p&gt;

&lt;h2&gt;
  
  
  Jun the 4th: Public Beta!
&lt;/h2&gt;

&lt;p&gt;Internal testing is great but not exactly easy to send to friends and family so I decided to move to a public Beta.&lt;br&gt;
The App was working fine and after some feedbacks we decided to change a little the ui. Now images are not cut and they fit into the page leaving black borders around and we also added next and previous button in order to make the navigation more explicit.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fxjbifu53yq098wkg7k82.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fxjbifu53yq098wkg7k82.jpeg" alt="New style"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Jun the 9th: Pushing the red button 🚨
&lt;/h2&gt;

&lt;p&gt;After a couple of public betas it's time to promote the last one to Production. I don't know how long it will take but it should be available soon.&lt;/p&gt;

&lt;h2&gt;
  
  
  Jun the 10th: The app is live
&lt;/h2&gt;

&lt;p&gt;Here is the link to the play store where you can finally find the app! &lt;a href="https://play.google.com/store/apps/details?id=hector.the.little.dinosaur" rel="noopener noreferrer"&gt;https://play.google.com/store/apps/details?id=hector.the.little.dinosaur&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  That was &lt;code&gt;definitely&lt;/code&gt; the beginning of a beautiful friendship!
&lt;/h2&gt;

&lt;p&gt;This is how the book finishes and how this series of post about my first app written in &lt;strong&gt;Flutter&lt;/strong&gt; ends. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fetfs4wfjtcvwo485ghp8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fetfs4wfjtcvwo485ghp8.png" alt="The end"&gt;&lt;/a&gt;&lt;br&gt;
I don't regret the choice. I found working with &lt;strong&gt;Flutter&lt;/strong&gt; quite interesting and fun. I had a small amount of issues during the development and I was able to find a way out from all of them. It has been a great experience, everything went very well.&lt;/p&gt;

&lt;p&gt;I can't say I'm an expert now, I would rather say I'm a junior &lt;strong&gt;Flutter&lt;/strong&gt; developer but I'm a proud publisher! I made different websites in the past but publishing an app has been a completely new experience and I'm really happy to have done it.&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>googlestore</category>
      <category>mobiledev</category>
    </item>
    <item>
      <title>Time to Publish my First Flutter App on the Play Store (a Week After)</title>
      <dc:creator>Daniele Bertella</dc:creator>
      <pubDate>Thu, 28 May 2020 11:28:21 +0000</pubDate>
      <link>https://dev.to/_denb/time-to-publish-my-first-flutter-app-on-the-play-store-a-week-after-5b44</link>
      <guid>https://dev.to/_denb/time-to-publish-my-first-flutter-app-on-the-play-store-a-week-after-5b44</guid>
      <description>&lt;p&gt;This is a follow up from &lt;a href="https://dev.to/_denb/time-to-publish-my-first-flutter-app-on-the-store-5-of-x-5amk"&gt;my previous article&lt;/a&gt; in which I was thinking I was very close to publish my first app on the store. It turned out that I needed to complete all the forms before being able to publish anything, even an internal test track.&lt;/p&gt;

&lt;p&gt;I spent last week waiting for something to happen and at the end I realized that I was missing informations. Now that everything is ready, my app has been finally submitted for review.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rQWBODw0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/mulptjkgzgp267lb3mcv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rQWBODw0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/mulptjkgzgp267lb3mcv.png" alt="Current status on the app store"&gt;&lt;/a&gt;&lt;/p&gt;
Current status, Pending publication 🥶



&lt;p&gt;Pro Tip: make sure all the ticks are green ✅ before to try to roll out a release next time!&lt;/p&gt;

&lt;p&gt;The process involve all the store listings, screenshots and feature graphic.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UCaxs0Vv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ij054563hqejy7besefs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UCaxs0Vv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ij054563hqejy7besefs.png" alt="Screenshots section in play store"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I would say try to speed up the process. So even if you don't have the final version of your graphic you will be able to amend them later. The app I'm submitting will be free so I didn't go through the setup of the merchant account. Maybe I'll keep this option for the next time 😅.&lt;/p&gt;

&lt;p&gt;Also something to keep in mind. Test the app locally! I was waiting for the it to be available in the store to start to test the release but actually it turned out it was a silly thought. You will need lot of iterations before your app will be ready. &lt;/p&gt;

&lt;p&gt;In this case building an &lt;code&gt;apk&lt;/code&gt; instead of an &lt;code&gt;appBundle&lt;/code&gt; it will make testing way easier.&lt;/p&gt;

&lt;p&gt;Just run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flutter build apk --split-per-abi
flutter install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;with your device connected and you will be able to test your released version of the app.&lt;/p&gt;

&lt;p&gt;This helped me to understand for example that google fonts aren't embedded by default (my bad I didn't read the documentation at first here a &lt;a href="https://stackoverflow.com/questions/59446354/the-google-fonts-package-in-flutter-app-is-not-working"&gt;SO&lt;/a&gt; on the topic).&lt;/p&gt;

&lt;p&gt;Anyway in the meanwhile I was able to add a little animation in the homepage using &lt;a href="https://pub.dev/packages/lottie"&gt;lottie&lt;/a&gt; plugin. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mWw_sS0e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dt10bi7a9ll8s5ongio0.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mWw_sS0e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dt10bi7a9ll8s5ongio0.gif" alt="Flutter of a butterfly with lottie"&gt;&lt;/a&gt;&lt;/p&gt;
Flutter (😂) of a butterfly with lottie



&lt;p&gt;Super nice right? I spent some time to understand animations in flutter,  my issue was that I wanted to pause it for 10 seconds before to start it again. I had some fun, if you are interested I can share more details on the topic, eventually in a different post.&lt;/p&gt;

&lt;p&gt;I also played a lot with sounds, now we will have a soundtrack too thanks to &lt;a href="https://donaflormusic.com/"&gt;Cecilia Fumanelli&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;The goal to have my first Flutter app on the store is closer than ever. I'm still not quite sure how the private testing will work, I suppose I will have a link to share with my internal list of predefined people but I guess I will have to wait for the review before.&lt;/p&gt;

&lt;p&gt;I will keep you posted!&lt;/p&gt;




&lt;p&gt;&lt;a href="https://hector.aureliemercier.com"&gt;Hector the little dinosaur&lt;/a&gt; written and illustrated by &lt;a href="https://www.instagram.com/aurelie_mercier/"&gt;Aurelie Mercier&lt;/a&gt;. Cover image is also part of the book.&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>googlestore</category>
      <category>mobiledev</category>
    </item>
    <item>
      <title>Time to Publish my First Flutter App on the Store!</title>
      <dc:creator>Daniele Bertella</dc:creator>
      <pubDate>Wed, 20 May 2020 19:31:15 +0000</pubDate>
      <link>https://dev.to/_denb/time-to-publish-my-first-flutter-app-on-the-store-5-of-x-5amk</link>
      <guid>https://dev.to/_denb/time-to-publish-my-first-flutter-app-on-the-store-5-of-x-5amk</guid>
      <description>&lt;p&gt;If you didn't read my previous articles, I’m building a &lt;strong&gt;Flutter&lt;/strong&gt; app for a children's book&lt;sup id="fnref1"&gt;1&lt;/sup&gt;. If you want to check it out: &lt;a href="https://hector.aureliemercier.com" rel="noopener noreferrer"&gt;Hector the little dinosaur&lt;/a&gt;. The cover image is also part of the book and is not related to &lt;em&gt;Deno&lt;/em&gt; at all, I think must have copied from Hector 😂. Last time I did any mobile development before was more than 2 years ago with &lt;strong&gt;React Native&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The day to publish the app came 👊
&lt;/h2&gt;

&lt;p&gt;Well at least that's what I thought 😭. Finally, my partner and I finished recording all the pages read by my 4 years old son. These are not perfect but for as first iteration they would suffice, and that was the hardest part of the whole process! So I decided to publish the app for an &lt;em&gt;Internal test track&lt;/em&gt; and... &lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fk0rf3xks9syfb8atyw77.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fk0rf3xks9syfb8atyw77.png" alt="Google play console telling me to wait"&gt;&lt;/a&gt;&lt;br&gt;
Look at that! I guess I will need to wait for someone to look into my app before I can try a released version from the store.&lt;/p&gt;

&lt;p&gt;Anyway I think it's worth sharing the journey.&lt;/p&gt;
&lt;h2&gt;
  
  
  Icons and Splash screen
&lt;/h2&gt;

&lt;p&gt;Even before you can submit to the store you want to have a nice launcher icon and a splash screen. &lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fkfbtpkojyralkc02seqh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fkfbtpkojyralkc02seqh.png" alt="Hector Icon"&gt;&lt;/a&gt;&lt;br&gt;
For the icon part &lt;strong&gt;Flutter&lt;/strong&gt; got your back, with this &lt;a href="https://pub.dev/packages/flutter_launcher_icons" rel="noopener noreferrer"&gt;plugin&lt;/a&gt; it's very easy to generate all the possible icons with the right formats, no need to waste your time. &lt;/p&gt;

&lt;p&gt;The splash screen however was a little bit more complex and required some manual processes. For the iOS version you must use XCode for this. All you need to do is modify the &lt;code&gt;LaunchScreen.storyboard&lt;/code&gt; file that you find in the iOS folder inside the project. &lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fouzshdvh07lav713lksm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fouzshdvh07lav713lksm.png" alt="iOS splash screen in Xcode"&gt;&lt;/a&gt;&lt;br&gt;
I didn't get how to scale the picture but it'll be fine. You need to play a little with settings, but it's quite intuitive even if you don't have much experience with it. I didn't want to mess around too much I just added a picture in the middle and that's it. &lt;/p&gt;

&lt;p&gt;For Android I had to modify &lt;code&gt;launch_background.xml&lt;/code&gt; and I needed to play a little with it to have something ready.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;item&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;shape&lt;/span&gt; &lt;span class="na"&gt;android:shape=&lt;/span&gt;&lt;span class="s"&gt;"rectangle"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;solid&lt;/span&gt; &lt;span class="na"&gt;android:color=&lt;/span&gt;&lt;span class="s"&gt;"@android:color/white"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/shape&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;item&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;bitmap&lt;/span&gt;
        &lt;span class="na"&gt;android:gravity=&lt;/span&gt;&lt;span class="s"&gt;"center"&lt;/span&gt;
        &lt;span class="na"&gt;android:src=&lt;/span&gt;&lt;span class="s"&gt;"@mipmap/launch_image"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The code above is how you can have a centered image with a white background, default colour would have been black otherwise.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Frvjr1twsxn1r96btmryq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Frvjr1twsxn1r96btmryq.png" alt="Android drawable folder structure"&gt;&lt;/a&gt;&lt;br&gt;
This is my folder structure so basically I have icons in all sorts of resolutions (generated by the plugin) and splash screen images in various resolutions randomly scaled by me, since I didn't know exactly which resolution goes to which folder, once again, the images are probably too big but it will be ok until I will dig more into the possible settings.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build the app for release 💣
&lt;/h2&gt;

&lt;p&gt;Flutter documentation covers this section very well so I won't go into too much details. I just got confused at some point when Goole required me to enroll into &lt;code&gt;app signing by Google Play&lt;/code&gt; and following the steps it looked like they just made me sign the app again with Android Studio instead of the command line. I probably accepted some terms and condition in the process but anyway, somehow I managed to have my bundle ready to upload!&lt;/p&gt;

&lt;h2&gt;
  
  
  Sign up for a developer account 💸
&lt;/h2&gt;

&lt;p&gt;Google charges you "just" $25 to let you publish the app on their store, while Apple charges you £79 for the same thing!&lt;/p&gt;

&lt;p&gt;I subscribed and the journey began!&lt;br&gt;
Lost in the Google Play Console! Loads of options and way too many forms to fill, I tried to publish this internal test version but I had to give up since the final button is just disabled and I believe it's because someone need to check the content of my app.&lt;/p&gt;

&lt;p&gt;Also, since my app is targeting kids I needed to add a mandatory privacy policy that I generated on a random &lt;a href="https://app-privacy-policy-generator.firebaseapp.com/" rel="noopener noreferrer"&gt;website&lt;/a&gt; 😂 and uploaded on the &lt;a href="https://aureliemercier.com/" rel="noopener noreferrer"&gt;Hector&lt;/a&gt; site&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion 🍕
&lt;/h2&gt;

&lt;p&gt;Nothing is lost, the app is good looking I will need to deal with some bureaucracy but soon I will be able to publish my first ever app on the store! And I'm super excited by this.&lt;/p&gt;

&lt;p&gt;Also, I don't want to spoil too much, but my previous articles created a snow ball effect! Someone is building Hector in &lt;strong&gt;React Native&lt;/strong&gt;! Stay tuned but soon we might be able to make a very good comparison!&lt;sup id="fnref2"&gt;2&lt;/sup&gt;&lt;/p&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;&lt;a href="https://aureliemercier.com/" rel="noopener noreferrer"&gt;Hector the little dinosaur&lt;/a&gt; written and illustrated by &lt;a href="https://www.instagram.com/aurelie_mercier/" rel="noopener noreferrer"&gt;Aurelie Mercier&lt;/a&gt;. Cover image is also part of the book. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn2"&gt;
&lt;p&gt;As usual thanks to &lt;a href="https://petervaro.com" rel="noopener noreferrer"&gt;Peter&lt;/a&gt; for the english corrections here and there ❤️. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>flutter</category>
      <category>googleplaystore</category>
      <category>mobiledev</category>
    </item>
    <item>
      <title>What I Really Like About Flutter so Far</title>
      <dc:creator>Daniele Bertella</dc:creator>
      <pubDate>Mon, 18 May 2020 07:44:50 +0000</pubDate>
      <link>https://dev.to/_denb/what-i-really-like-about-flutter-so-far-4-of-x-3j5l</link>
      <guid>https://dev.to/_denb/what-i-really-like-about-flutter-so-far-4-of-x-3j5l</guid>
      <description>&lt;p&gt;If you didn't read my previous articles, I’m building a &lt;strong&gt;Flutter&lt;/strong&gt; app for a children's book&lt;sup id="fnref1"&gt;1&lt;/sup&gt;. If you want to check out: &lt;a href="https://hector.aureliemercier.com"&gt;Hector the little dinosaur&lt;/a&gt;. The cover image is also part of the book and is not related to &lt;em&gt;Deno&lt;/em&gt; at all, I think they copied Hector 😂. Last time I did any mobile development before was more than 2 years ago with &lt;strong&gt;React Native&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;My expertise right now is &lt;strong&gt;React&lt;/strong&gt; and &lt;strong&gt;TypeScript&lt;/strong&gt; and when I started with &lt;strong&gt;Flutter&lt;/strong&gt; I was skeptical at first. The syntax may scare you at, it looks quite similar to Java (so I've been&lt;br&gt;
told) and the way you build the UI feels to me how &lt;strong&gt;React&lt;/strong&gt; did it a year or so ago before the introduction of hooks 🙀. &lt;/p&gt;

&lt;p&gt;In this article however I'd like to highlight what I really like about Flutter and Dart.&lt;/p&gt;
&lt;h2&gt;
  
  
  Everything just works! 🤘
&lt;/h2&gt;

&lt;p&gt;The thing that I like the most, is that it seems that everything just works! It's amazing, I don't have much experience in mobile development but the few times I approached it, it hasn’t been easy. This time, I have to say I'm pleasantly surprised!&lt;/p&gt;
&lt;h2&gt;
  
  
  A Super Cli 🔥
&lt;/h2&gt;

&lt;p&gt;As I mentioned already in a previous article, tools are quite nice and probably superior than the ones available for JS/TS.&lt;/p&gt;

&lt;p&gt;Once everything is set up, you can run &lt;code&gt;flutter run&lt;/code&gt; with a device connected (or a simulator open) and the app is up and running. No need to run it with Xcode or Android studio. Basically no need for an &lt;em&gt;IDE&lt;/em&gt; at all. You still need to have them installed along with the native SDK but at least while writing code you don't need to open them that often and that's a big 👍for me!&lt;/p&gt;

&lt;p&gt;Hot reload is available while running the application in the command line. It felt weird the need to press &lt;code&gt;R&lt;/code&gt; in the terminal in order to hot reload the app but I got used to it pretty quickly.&lt;/p&gt;

&lt;p&gt;Also pressing &lt;code&gt;P&lt;/code&gt; while running gives a very useful overview of all widgets and how they are positioned on the screen.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kWjuPuEx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4tvyijoq9kbhjqc6sp8t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kWjuPuEx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4tvyijoq9kbhjqc6sp8t.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
My current homepage running in the simulator after pressing P in the cli



&lt;p&gt;Debugging is straightforward too.&lt;br&gt;
This is the whole setup needed to run the app in the vscode debugger.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.2.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"configurations"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Flutter"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"request"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"launch"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"dart"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There are other useful command, such as &lt;code&gt;flutter create&lt;/code&gt; to start a new project, &lt;code&gt;flutter doctor&lt;/code&gt; to help you with the setup and to check that everything is fine for the development. If you want to know more, here is a complete list of useful commands: &lt;a href="https://github.com/flutter/flutter/wiki/The-flutter-tool"&gt;https://github.com/flutter/flutter/wiki/The-flutter-tool&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  VS Code integration 👀
&lt;/h2&gt;

&lt;p&gt;The integration with vscode is amazing. After installing the &lt;strong&gt;Flutter&lt;/strong&gt; plugin you will have: error handling, autocomplete and documentation on definitions available in the editor.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--C1mv5jVM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/n4v7fs73tu3kg9ltfd4u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--C1mv5jVM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/n4v7fs73tu3kg9ltfd4u.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
Example of code hovering over RoundedRectangleBorder



&lt;p&gt;I would say that you have the same experience that you expect working with TypeScript and probably a little more! The compiler feels faster and more accurate.&lt;/p&gt;

&lt;p&gt;I can’t entirely compare due to the different scale of projects I'm working on, but &lt;strong&gt;Flutter&lt;/strong&gt; (and probably Dart) left me with a very good impression overall.&lt;/p&gt;

&lt;h2&gt;
  
  
  Native feeling 🤞
&lt;/h2&gt;

&lt;p&gt;I still need to see how the app behave once I publish it but so far even in debug mode it seems like a Native app. I’m interested to see how it looks, but so far I can't complain.&lt;/p&gt;

&lt;p&gt;Also I needed to integrate with the native side 😼 for the audio. I wanted to load audio files from assets and I installed this &lt;a href="https://pub.dev/packages/assets_audio_player"&gt;plugin&lt;/a&gt; along with some native libraries. I had some issues with &lt;em&gt;cocoapods&lt;/em&gt; installation (iOS dependencies) but after fixing that, everything just worked fine.&lt;/p&gt;

&lt;p&gt;Also installing new dependencies can be done from CLI manually or adding a line to the equivalent of the &lt;code&gt;package.json&lt;/code&gt;, &lt;code&gt;pubspec.yaml&lt;/code&gt;, which triggers the installation command &lt;code&gt;flutter pub get&lt;/code&gt; for you in vscode.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping it up 💣
&lt;/h2&gt;

&lt;p&gt;I'm very happy with what I've seen so far and I would recommend to just install &lt;strong&gt;Flutter&lt;/strong&gt; download the repo &lt;a href="https://github.com/dbertella/hector-app"&gt;https://github.com/dbertella/hector-app&lt;/a&gt; and try it out. The syntax might be challenging at first coming from &lt;strong&gt;React&lt;/strong&gt; but as soon as you realise that it's actually very similar and you might find out that the &lt;em&gt;DX&lt;/em&gt; will be even better.&lt;/p&gt;

&lt;p&gt;Don't forget to let me know if you try it and end up liking it!!&lt;sup id="fnref2"&gt;2&lt;/sup&gt;&lt;/p&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;&lt;a href="https://aureliemercier.com/"&gt;Hector the little dinosaur&lt;/a&gt; written and illustrated by &lt;a href="https://www.instagram.com/aurelie_mercier/"&gt;Aurelie Mercier&lt;/a&gt;. Cover image is also part of the book. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn2"&gt;
&lt;p&gt;As usual thanks to &lt;a href="https://petervaro.com"&gt;Peter&lt;/a&gt; for the english corrections here and there ❤️. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>flutter</category>
      <category>dart</category>
      <category>react</category>
      <category>mobiledev</category>
    </item>
    <item>
      <title>Add a Navigator to a Flutter App</title>
      <dc:creator>Daniele Bertella</dc:creator>
      <pubDate>Thu, 14 May 2020 17:14:26 +0000</pubDate>
      <link>https://dev.to/_denb/add-a-navigator-to-a-flutter-app-3-of-x-3ff</link>
      <guid>https://dev.to/_denb/add-a-navigator-to-a-flutter-app-3-of-x-3ff</guid>
      <description>&lt;p&gt;Navigators have always been a pain while making a React Native app. With many third party options and not a clear way to go. They probably got better lately, but adding one in my Flutter app has been a breeze.&lt;/p&gt;

&lt;p&gt;As always, there's an existing, specific widget to handle that and it's called &lt;a href="https://api.flutter.dev/flutter/widgets/Navigator-class.html"&gt;Navigator&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It took me just a couple of hours to have my home page up and running. One single button with an image coming from the assets that let you navigate to the Story. Very nice!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lCdrkD0s--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/77j5ccdfln00to7261qc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lCdrkD0s--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/77j5ccdfln00to7261qc.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All you need to do is to create a list of routes, in my case a list of one for now 😂, and make a &lt;code&gt;Map&lt;/code&gt; out of them.&lt;br&gt;
&lt;/p&gt;

&lt;div class="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;Page&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="n"&gt;route&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;WidgetBuilder&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;Page&lt;/span&gt;&lt;span class="o"&gt;({&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;route&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;builder&lt;/span&gt;&lt;span class="o"&gt;});&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;routing&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;
  &lt;span class="n"&gt;Page&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;route:&lt;/span&gt; &lt;span class="s"&gt;'/story'&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nl"&gt;builder:&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Story&lt;/span&gt;&lt;span class="o"&gt;()),&lt;/span&gt;
&lt;span class="o"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;WidgetBuilder&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;routes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
    &lt;span class="n"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;fromEntries&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;routing&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;map&lt;/span&gt;&lt;span class="o"&gt;((&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;MapEntry&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;route&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;builder&lt;/span&gt;&lt;span class="o"&gt;)));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;MaterialApp&lt;/code&gt;, the root of the application, accepts a &lt;code&gt;Map&lt;/code&gt; of routes as parameter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="n"&gt;MaterialApp&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;
   &lt;span class="nl"&gt;title:&lt;/span&gt; &lt;span class="s"&gt;'Hector the little dinosaur'&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
   &lt;span class="nl"&gt;routes:&lt;/span&gt; &lt;span class="n"&gt;routes&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
   &lt;span class="nl"&gt;home:&lt;/span&gt; &lt;span class="n"&gt;HomePage&lt;/span&gt;&lt;span class="o"&gt;(),&lt;/span&gt;
&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;And basically that's it!&lt;/p&gt;

&lt;p&gt;After this setup you'll be able to interact with Navigator API. In this case a &lt;code&gt;FlatButton&lt;/code&gt; that invokes &lt;code&gt;Navigator.pushNamed('context', '/story')&lt;/code&gt; API with current &lt;code&gt;context&lt;/code&gt; and the name of the route I want to load: &lt;code&gt;/story&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Inside the Story class I have a button that perform the pop action: &lt;code&gt;Navigator.pop(context);&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;I looked at this &lt;a href="https://github.com/flutter/samples/blob/master/animations/lib/main.dart"&gt;example&lt;/a&gt; from the official documentation in order to get some inspiration but I had some issues with the spread operator with the SDK version I installed so I just simplified it to the bare minimum.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Story Widget
&lt;/h2&gt;

&lt;p&gt;To control the story flow, I found a very useful Widget called &lt;a href="https://api.flutter.dev/flutter/widgets/PageController-class.html"&gt;PageController&lt;/a&gt; that gives me exactly what I needed: a slide to next / prev page in a very efficient way. So I didn't have to reinvent the wheel.&lt;/p&gt;

&lt;p&gt;Important thing to notice is that since this Widget doesn't add new views on top of each other, as the Navigator does, I'm able to get back to the home page from any slide.&lt;/p&gt;

&lt;p&gt;The implementation is very simple, I just have a list of slides defined in a static mapping and in this way I can build them programmatically.&lt;/p&gt;

&lt;p&gt;This is my mapping:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;List&amp;lt;List&amp;lt;String&amp;gt;&amp;gt; pages = [
  ['assets/images/Cover.png', 'Hector the little dinosaur', ''],
  [
    'assets/images/page1.png',
    """Hector is a little dinosaur who lives in the forest.
He spends all his days eating flowers and having a rest.""",
    'assets/audios/page1.mp3',
  ],
  ...
]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Well done &lt;strong&gt;Flutter&lt;/strong&gt; having this implemented is a big step forward towards the goal of publishing my children's book&lt;sup id="fnref1"&gt;1&lt;/sup&gt; app!&lt;sup id="fnref2"&gt;2&lt;/sup&gt;&lt;/p&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;&lt;a href="https://hector.aureliemercier.com"&gt;Hector the little dinosaur&lt;/a&gt; written and illustrated by &lt;a href="https://www.instagram.com/aurelie_mercier/"&gt;Aurelie Mercier&lt;/a&gt;. Cover image is also part of the book. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn2"&gt;
&lt;p&gt;As usual thanks to &lt;a href="https://petervaro.com"&gt;Peter&lt;/a&gt; for the few english corrections here and there, apparently I'm even getting better with my english 💪. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>flutter</category>
      <category>mobiledev</category>
      <category>navigator</category>
      <category>react</category>
    </item>
    <item>
      <title>Typescript or Dart? And More Important, React or Flutter?</title>
      <dc:creator>Daniele Bertella</dc:creator>
      <pubDate>Wed, 13 May 2020 08:10:48 +0000</pubDate>
      <link>https://dev.to/_denb/typescript-or-dart-and-more-important-react-or-flutter-2-of-x-452b</link>
      <guid>https://dev.to/_denb/typescript-or-dart-and-more-important-react-or-flutter-2-of-x-452b</guid>
      <description>&lt;p&gt;This is the second part of a series of articles I want to write about my first attempt to build a children's book&lt;sup id="fnref1"&gt;1&lt;/sup&gt; adapted as mobile app in &lt;strong&gt;Flutter&lt;/strong&gt; . If you didn't read the first part you can find it &lt;a href="https://dev.to/_denb/wrapping-my-head-around-flutter-1-of-x-4l7b"&gt;here&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;My intention is not to dive deep into technical details but to give a fair comparison of the developer experience of these two worlds: React + TypeScript vs Flutter + Dart.&lt;/p&gt;

&lt;p&gt;I'm sure many people wrote about it already but I think it's still worth iteration. If you are like me, a web developer, and you are planning to write your next app in &lt;strong&gt;Flutter&lt;/strong&gt; at least you know what you're up against.&lt;/p&gt;

&lt;h2&gt;
  
  
  Components vs Widgets
&lt;/h2&gt;

&lt;p&gt;This is going to be the first battle: in &lt;strong&gt;Flutter&lt;/strong&gt; we have Widgets which are very similar to old school &lt;strong&gt;React&lt;/strong&gt; components. It's good that at least they made the &lt;code&gt;new&lt;/code&gt; keyword optional in Dart, thus instantiating a &lt;code&gt;class&lt;/code&gt; would feel like calling a function 🥶 (You could find many examples online written in the &lt;em&gt;old&lt;/em&gt; style though.) Either way, this syntax still looks quite ugly in my opinion.&lt;/p&gt;

&lt;p&gt;Parenthesis, commas, and semicolons are all over the place.&lt;/p&gt;

&lt;p&gt;A simple widget can end up this way very easily in my very little experience:&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;Align&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;
  &lt;span class="nl"&gt;alignment:&lt;/span&gt; &lt;span class="n"&gt;Alignment&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;topCenter&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
  &lt;span class="nl"&gt;child:&lt;/span&gt; &lt;span class="n"&gt;Padding&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;
    &lt;span class="nl"&gt;padding:&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;EdgeInsets&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;all&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;8.0&lt;/span&gt;&lt;span class="o"&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="o"&gt;(&lt;/span&gt;
      &lt;span class="nl"&gt;decoration:&lt;/span&gt; &lt;span class="n"&gt;BoxDecoration&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;
        &lt;span class="nl"&gt;borderRadius:&lt;/span&gt; &lt;span class="n"&gt;BorderRadius&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;circular&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&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="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;withOpacity&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.9&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;
      &lt;span class="o"&gt;),&lt;/span&gt;
      &lt;span class="nl"&gt;child:&lt;/span&gt; &lt;span class="n"&gt;Padding&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;
        &lt;span class="nl"&gt;padding:&lt;/span&gt; &lt;span class="n"&gt;EdgeInsets&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;all&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;12.0&lt;/span&gt;&lt;span class="o"&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="o"&gt;(&lt;/span&gt;
          &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
          &lt;span class="nl"&gt;textAlign:&lt;/span&gt; &lt;span class="n"&gt;TextAlign&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;center&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
          &lt;span class="nl"&gt;style:&lt;/span&gt; &lt;span class="n"&gt;GoogleFonts&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;walterTurncoat&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;
            &lt;span class="nl"&gt;fontSize:&lt;/span&gt; &lt;span class="mf"&gt;16.0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
            &lt;span class="nl"&gt;fontWeight:&lt;/span&gt; &lt;span class="n"&gt;FontWeight&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;bold&lt;/span&gt;&lt;span class="o"&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;blueGrey&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Color(0xff185122),&lt;/span&gt;
          &lt;span class="o"&gt;),&lt;/span&gt;
        &lt;span class="o"&gt;),&lt;/span&gt; &lt;span class="c1"&gt;// Text&lt;/span&gt;
      &lt;span class="o"&gt;),&lt;/span&gt; &lt;span class="c1"&gt;// Padding&lt;/span&gt;
    &lt;span class="o"&gt;),&lt;/span&gt; &lt;span class="c1"&gt;// Container&lt;/span&gt;
  &lt;span class="o"&gt;),&lt;/span&gt; &lt;span class="c1"&gt;// Padding&lt;/span&gt;
&lt;span class="o"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Align&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is not a complete widget you need to declare a class around it. It's just its content, what we return. Basically this is what one would write in JSX if this was written using &lt;strong&gt;React&lt;/strong&gt;. When JSX was introduced people where skeptical.  I believe having an HTML-like syntax with opening and closing tags is easier to read and understand and it's quite difficult to come up with something better than that.&lt;/p&gt;

&lt;p&gt;In this case vscode is nice enough to add those smart comments after every closing parenthesis indicating what it's matching. Yet it's not the same.&lt;br&gt;
Don't even get me started on the commas and semicolons!&lt;/p&gt;

&lt;p&gt;Fragments in &lt;strong&gt;React&lt;/strong&gt; are a very good feature that helps you write less and keep your code more maintainable. &lt;strong&gt;JSX FTW!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;On the plus I like the way in &lt;strong&gt;Flutter&lt;/strong&gt; widgets are super specialized. Some accept a single child, some a list of children for example. &lt;/p&gt;

&lt;p&gt;There is a &lt;a href="https://api.flutter.dev/flutter/widgets/Padding-class.html"&gt;Padding&lt;/a&gt; widget and its only purpose is to wrap an element and add a padding around or inside it. Another example is the &lt;a href="https://api.flutter.dev/flutter/widgets/Opacity-class.html"&gt;Opacity&lt;/a&gt; one but really all of them have a single responsibility. Leveraging this concept I believe it will help you write better &lt;strong&gt;React&lt;/strong&gt; apps after all. &lt;/p&gt;

&lt;p&gt;There is a lot of documentation about the different widgets and it's very easy to find the right one to use. StackOverflow is your friend here, as always, but the autocompletion in vscode is amazing so you might be able to find what you need without leaving your text editor.&lt;/p&gt;

&lt;p&gt;I spent more or less two days &lt;em&gt;googoling&lt;/em&gt; how to do bits and pieces and I was able to find what I needed quite easily.&lt;/p&gt;
&lt;h2&gt;
  
  
  Stateful or Stateless
&lt;/h2&gt;

&lt;p&gt;As far as I know you have two types of Widgets: Stateful and Sateless:&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;MyPageView&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;StatefulWidget&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;MyPageView&lt;/span&gt;&lt;span class="o"&gt;({&lt;/span&gt;&lt;span class="n"&gt;Key&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;})&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;key:&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

  &lt;span class="n"&gt;_MyPageViewState&lt;/span&gt; &lt;span class="n"&gt;createState&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;_MyPageViewState&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the example above we are missing the whole implementation that is in &lt;code&gt;_MyPageViewState&lt;/code&gt; class. If you want to see what happens next have a look at the &lt;a href="https://github.com/dbertella/hector-app"&gt;repository&lt;/a&gt; where this snippets are taken from.&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;PageSlide&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;StatelessWidget&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="n"&gt;PageSlide&lt;/span&gt;&lt;span class="o"&gt;({&lt;/span&gt;
    &lt;span class="nd"&gt;@required&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
    &lt;span class="nd"&gt;@required&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
  &lt;span class="o"&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="o"&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="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And this is a stateless one. Pretty straight forward, right? Also you will have a lot of help from your editor of choice in building the constructor with the required parameters for example or if you forget to add @override, etc.&lt;br&gt;
The fact that Dart is a real statically typed language brings a lot of powerful tooling opportunity to the table and the compiler is there to help you along the way.&lt;/p&gt;

&lt;p&gt;Does this ring any bells? To me it looks very similar to what &lt;strong&gt;React&lt;/strong&gt; was a year ago: class components with lifecycle and state vs plain functional components, doesn't it?&lt;/p&gt;

&lt;h2&gt;
  
  
  Classes why classes?
&lt;/h2&gt;

&lt;p&gt;This brings me to the thing I miss most from &lt;strong&gt;React&lt;/strong&gt;. The hooks! They made such a wonderful job there and wiped out the needs to use classes. In &lt;strong&gt;Flutter&lt;/strong&gt; classes are the way to go, everything seems to be a class. I really don't like this, but there's no other way around it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;I'll wrap it up because I also want to write some code tonight and I don't want this post to be too long anyway. &lt;/p&gt;

&lt;p&gt;I don't think anything could move me away from &lt;strong&gt;React&lt;/strong&gt; (and Typescript and JSX) anytime soon. I'm totally into it and I'm enjoying writing it on a daily basis. &lt;/p&gt;

&lt;p&gt;But hey, something else is out there, it's nice to discover a new world and figure out why people liked it. I'm interested in seeing if there is something worth to learn from it, in order to make myself a better dev. &lt;/p&gt;

&lt;p&gt;I'm really enjoying working with &lt;strong&gt;Flutter&lt;/strong&gt; so far. I want to publish my first app soon. Let's see if I can accomplish this!&lt;sup id="fnref2"&gt;2&lt;/sup&gt;&lt;/p&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;&lt;a href="https://hector.aureliemercier.com"&gt;Hector the little dinosaur&lt;/a&gt; written and illustrated by &lt;a href="https://www.instagram.com/aurelie_mercier/"&gt;Aurelie Mercier&lt;/a&gt;. Cover image is also part of the book. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn2"&gt;
&lt;p&gt;Once again thanks &lt;a href="https://petervaro.com/"&gt;Peter&lt;/a&gt; for being patient with me and proof reading all my posts! 😘 ↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>react</category>
      <category>flutter</category>
      <category>typescript</category>
      <category>dart</category>
    </item>
    <item>
      <title>Wrapping my Head Around Flutter</title>
      <dc:creator>Daniele Bertella</dc:creator>
      <pubDate>Tue, 12 May 2020 10:43:27 +0000</pubDate>
      <link>https://dev.to/_denb/wrapping-my-head-around-flutter-1-of-x-4l7b</link>
      <guid>https://dev.to/_denb/wrapping-my-head-around-flutter-1-of-x-4l7b</guid>
      <description>&lt;p&gt;Disclaimer: I'm a frontend (web) developer, with no experience in native mobile applications and I'm using mainly React from the last 5 years at least. I have a little experience with React Native but that was a long time ago and I have mixed feelings about it.&lt;/p&gt;

&lt;p&gt;Also this is my first real experience outside the JavaScript world apart from a little excursus on Rust&lt;sup id="fnref1"&gt;1&lt;/sup&gt; and a very, very little one in C# and Unity.&lt;/p&gt;

&lt;p&gt;Writing React all day has been a breeze for me. Although, it made me lazy and I wasn't so keen to change my usual developer experience.&lt;/p&gt;

&lt;p&gt;That was up to two days ago when I started writing this simple application.&lt;br&gt;
&lt;a href="https://hector.aureliemercier.com"&gt;&lt;strong&gt;Hector the little dinosaur&lt;/strong&gt;&lt;/a&gt; (the website is built in Gatsby btw) a book written and illustrated by &lt;a href="https://www.instagram.com/aurelie_mercier/"&gt;&lt;strong&gt;Aurelie Mercier&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8oqCKfvX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/fi2wrtnd4xy4zk3vt2uk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8oqCKfvX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/fi2wrtnd4xy4zk3vt2uk.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So what I want to build is basically a slideshow of the illustrations of the book with the text on top of them (I wanted to put it at the bottom but unfortunately the drawings don't always play well with that layout).&lt;/p&gt;

&lt;p&gt;Then came the idea: why not recording my 4yo "reading" the book? I could turn the app into an audiobook with a cute, little kid's voice reading the story for you. Awesome, I'm totally sold. Let's start!&lt;/p&gt;

&lt;p&gt;Candidates &lt;strong&gt;Flutter&lt;/strong&gt; vs &lt;strong&gt;React Native&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;As I mentioned before React Native would have probably been in my comfort zone but, hey, I tried it and I didn't fall in love with it that time.&lt;/p&gt;

&lt;p&gt;Flutter, yeah, let's try something new! There was a lot of hype around it coming from real mobile devs, so why not? Let's do it properly!&lt;/p&gt;

&lt;p&gt;I decided not to take any tutorials, I just ran through the installation process, and started my first project. It felt a bit frustrating at first, I needed to install Xcode and a lot of other stuff (and I didn't even set up android yet!) but I was up and running in a couple of hours, maybe even less.&lt;/p&gt;

&lt;p&gt;I opened the project and... I didn't like what I was looking at!&lt;br&gt;
Classes, classes everywhere 🙀! The parentheses, commas and semicolons didn't help either!&lt;/p&gt;

&lt;p&gt;I'm so used to React and its nice hooks-API that I forgot what's a class is actually useful for.&lt;br&gt;
I honestly turn it off straight away.&lt;/p&gt;

&lt;p&gt;Until next day and the next post!&lt;/p&gt;

&lt;p&gt;If you are curious about what will happen next here is what I want to write about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Comparison between React/Ts and Flutter/Dart&lt;/li&gt;
&lt;li&gt;Pain points on this ongoing development&lt;/li&gt;
&lt;li&gt;Publishing the app (I hope I will get there at some point)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are curious to follow the ongoing process have a look at the repository &lt;a href="https://github.com/dbertella/hector-app"&gt;github.com/dbertella/hector-app&lt;/a&gt; and feel free to drop a comment if you notice something wrong 😘&lt;/p&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;A huge thanks to my friend &lt;a href="https://petervaro.com/"&gt;Peter&lt;/a&gt; for trying to teach me this fabulous language. And thanks for correcting my english too!  ↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>react</category>
      <category>flutter</category>
      <category>mobiledevelopment</category>
    </item>
  </channel>
</rss>
