Build your apps by drag-and-drop interface

Image from

2021 Google I/O was just ended a month ago. Though COVID-19 pandemic affected it that Google can only host it online, It was still amazing. Lots of ideas were shared in the conferences and today, I’m gonna share with you one of them — FlutterFlow.

FlutterFlow is a tool that you can take advantage of it to build mobile apps, without writing any code.

FlutterFlow has a simple drag-and-drop interface that makes it super easy to build all kinds of apps that work on both iOS and Android. On top of that, letting users own their creation is very important…

Take a look at Dart null safety and learn how to migrate your Flutter project to it.

March 3, 2021: 2.12 release

This section lists notable changes made from October 2, 2020, through March 3, 2021. For details about the 2.12 release, see Announcing Dart 2.12.

Just few days ago, Dart 2.12 finally released. One of it’s cool features is null safety, which is a life saver for all Flutter developers.

Null safety is a very powerful feature that can prevent your app from NullPointException. You can clearly declare whether a variable can be null or not. Then handle the null case if it is nullable; otherwise, just use it directly.

Table of contents

  1. Overview: Sound null safety
  2. Migrating your…

RefreshIndicator comes to help!

It’s an useful behavior on the mobile app that when we scroll to the top of a vertical scroll view, and overscroll, a refresh indicator will drop down, then the new data updates after we release the control. Flutter provides a handy widget called RefreshIndicator for this purpose.

As the official documentation says, RefreshIndicator is a widget that supports the Material “swipe to refresh” idiom. Today, we’re going to learn how to implement it in our ScrollView.

Table of Contents

  1. Implement RefreshIndicator in ListView.
  2. Implement RefreshIndicator in CustomScrollView.
  3. Cupertino style of refresh indicator in iOS.
  4. Known issues with WebView.

Implement RefreshIndicator in ListView

Let’s try to display…

How to make a spread-out and shrink-in ripple page transition?

Hello guys, today I’m going to introduce another fantastic animation. When users tap the FAB(FloatingActionButton), we navigate them from page A to page B with an animation. Not like traditional fade-in/fade-out or slide-in/slide-out one. It provides a more interesting and intuitive behavior that lets users know there is a transition between two pages via tapping the FAB button. Okay, let’s get started~

Table of Contents

  1. Default page transition
  2. Replace the MaterialPageRoute with a custom fade-in/fade-out PageRouteBuilder
  3. Get the FAB button position/size to mock a ripple widget on it after tapping the FAB
  4. Create a spreading-out ripple effect when entering page B
  5. Create a…

How to implement a fantastic shimmer effect like Facebook?

When launching apps, we usually see a loading view while the app is fetching the data from the local database or the server. It is quite easy to implement a loading indicator with Flutter, just use ProgressIndicator.

How to achieve fast nested scrolling effects with Slivers?

Today we’re going to talk about how to Slivers. Let’s say we want to display a list view or grid view on the screen, we can easily take advantage of ListView or GridView. But what if we want to show them both on the same page and scroll the screen as one page? Slivers comes to save our lives!

Table of Contents

  1. What are Slivers?
  2. Know about CustomScrollView and Slivers
  3. Basic Slivers introduction

1. What are Slivers?

A sliver is a portion of a scrollable area. You can use slivers to achieve custom scrolling effects.

Like the official document says, a Sliver is one of the portions…

How to wait for your async tasks before building widgets?

image from

Today I’m going to have a quick sharing for FutureBuilder. Before we get started, I recommend you watch the video from Google.

We all know that Flutter provides Future, async, await keywords to let us handle the asynchronous tasks.

Basically, we’ll implement it like this:

The fetchData() will wait for 1 second and return the value. Step2() waits for it and then do the following tasks. The output will be like:

I/flutter (13420): Step 1, fetch data
I/flutter (13420): Step 2, hasData: true

This works because we add async, await to step2(). Let’s try another case:


How to choose which Flutter animation is right for you?

Adding some animations to the app makes it more smooth, and improves the user experience. However, it sometimes confuses us that which approach should we take to achieve the animation. Today, we’re going to figure out the right way for us. In this post, you’ll see a series of questions that will help you determine what kind of solution should be used.

Basically, this post refers to this video from the Flutter team. Before we get started, I strongly recommend you to watch this amazing video.

Table of contents

  1. Drawing-based animations or…

I am writing the Flutter app recently. Sometimes we need to provide values from parent widget to child widget, and the official solution is to use InheritedWidget. If we define the parent widget as an InheritedWidget, the child widgets under it could obtain the nearest instance of a particular type of inherited widget from a build context by using BuildContext.dependOnInheritedWidgetOfExactType.

Although the solution above sounds nearly perfect, it takes us lots of time to write boilerplate code. In order to make it better, the Provider, an incredible library, comes to save us.

How to test our coroutines in a correct way?

We all know unit tests are important and necessary, and we also know we don’t really like to write it 😝. There are plenty of reasons that prevent us from writing good unit tests. The most likely situation I refuse to write it is that it often costs me double to triple time than to develop the main feature. After developing Android apps for 5~6 years, I found the main reasons resulting in that could be classified into two reasons:

  1. There is a high coupling in my code.
  2. I don’t really know how to write unit tests of my production…

Evan Fang

An Android/Flutter engineer at Line Corporation.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store