Flutter Learning Path

I wrote a flutter starter kit to demo how to use flutter with useful plugins to build an App Store app. But, some developers ask me how to start with Flutter.

Why choose Flutter?

I finished my own Android App in 2018 early. After release, some users ask me when the iOS version will be released. So, I am thinking about whether I should learn how to write an iOS app. But, I just one-man band to build a product. It will take time to maintain two code-based projects. You will ask, ‘Why not React Native?’ I did not go into React Native as I did not like the architecture because of the bridge of javascript. I think React Native has just suited some apps that just require displaying information only. One day, my friends sent me an article — What’s Revolutionary about Flutter. I am interested in Flutter as it can do a real ‘one code base for many platforms’. So, I went to Flutter.


How to read this article?

You can go through A) to L) one by one because I go through this path when I learned Flutter. For advanced topic, after I started to write the Flutter app, I researched these topics and think it is useful. If you have interest, you can read them.

A) Read Flutter Overview

First of all, what is the difference between Flutter and other platforms like iOS, Android, React Native, and so on? As I came from Android, I read Flutter for Android developers which talks about the difference between Android & Flutter, let you have a quick idea of Flutter.

If you came from others, you can read other documents

  • Flutter for iOS developers
  • Flutter for React Native developers
  • Flutter for web developers
  • Flutter for Xamarin.Forms developers

B) What is Declarative UI If you come from React Native or ReactJS, you will know it. But, coming from other platforms. You may not know it. Then you should take a look at Introduction to declarative UI.

C) Learn Dart You may know C#, Java, Koltin, Objective-C, Swift, Javascript, or Typescript to write your app or web. But, Flutter, uses Dart. Take a look at A Tour of the Dart language to learn Dart. I think Dart is very similar to Java.

D) Lean Flutter UI Framework For Flutter, it rebuilds the UI framework, which means that the native SDK or UI libraries may not support it. So, What UI widget can I use? Take a look at the Widget catalog. You will know more about what widget I can use. As I am a visual learner, so I find videos to talk about it. Flutter provides an official youtube channel — Flutter Widget of the Week. You can understand this widget more easily.

Advanced topic: Why does Flutter have high performance on UI? If you have time, please take a look at it as I always write in the wrong way on UI logic which conflicts with the Flutter widget tree. Then always throw errors. Know it more, you can avoid these mistakes.

  • Flutter Widget 101
  • The Mahogany Staircase — Flutter’s Layered Design
  • Flutter’s Rendering Pipeline

E) Start Hello World Go through Flutter gets started. How to install? How to set editor/ IDE? Create a first Hello Word app. The official doc will teach you how to do these.

F) State management approach — BLoC Previously, I wrote in MVVM with Rx pattern on the Android app. Also, I wrote Redux structure on React.js. For State management, following one pattern is better to transfer knowledge to others and maintain code easily. I like the MVVM pattern, but I find that Flutter cannot do the same MVVM pattern as Android. It is because Android is not built with Declarative UI. After research, I found that some google guys use the BloC pattern to build apps. Then I read Architect your Flutter project using BLOC pattern to know Bloc pattern more. Or, you can take a look at Technical Debt and Streams/BLoC, which is provided by the Flutter team’s boring show. There exist different state management approaches. You can take a look at others.

Advanced Topic: Write a BLoC pattern. You should know basic Reactive Programming. Please take a look at RxDart. If you are a beginner in Reactive programming, you can play with RxJS Marbles, which can visualize how Rx operators work.

G) Page Routing How to switch different pages? For Flutter, it provides Navigator functions to switch pages. But, for complex apps, I would like to find a mechanism to switch pages by Page ID/Name with metadata. A plugin Fluro helps with this.

H) Localization You can take a look at A new approach of localization in Flutter written by me. Previously, I found that the official document is hard to understand. Also, the official way for localization is too inconvenient.

I) Http Client To communicate with Backend, I prefer to write a clean code on it. So, Dio is an HTTP client to help on solving it. Currently, I found a new approach — Chopper. I love it as it is similar to Retrofit which is a popular HTTP client in the Android community.

J) Json serialization To build POJOs, I need ways to handle JSON serialization/deserialization. Take a look at JSON and serialization.

K) Local Storage Currently, SQLite is the most popular library to handle SQLite on Android & iOS. For key-value storage, you can use shared_preferences. But, I am looking for an ORM library. moor is still in an early stage and is not popular. Realm still develops Flutter in progress — Dart / Flutter Support.

L) Project Flavour Config I want to set up a three build config including Development, Staging, and Production. For example, API endpoints are different. Take a look at Creating flavors for Flutter.

M) Resources

  • awesome-flutter
  • pub.dev
  • Reddit FlutterDev
  • Flutter Documentation
  • The Boring Flutter Development Show
  • Open Source: flutter_starter_kit

Enjoy your Flutter learning trip ♥

Ahmed Samir. Mobile App Developer.