The Navigator 2.0 API has been one of the most controversial APIs I have seen in my software development career. In this series of articles, I aim to convince the readers to use this API in their projects, because it is more Flutterish, it helps to separate concerns and improves the user experience of Flutter Web applications.

The keywords of this series would be declarative API, navigation stack (history stack), Router widget, Navigator widget, app state, and system events. Considering these keywords, I believe the Navigator 2.0 API is summarized best by Micheal Goderbauer:

“Introduce a declarative API to set…

Wizard Dashatar

In the previous parts of this series, we focused on building a navigation stack using the Navigator 2.0 API for the following cases:

  • Application state changes caused by user interactions, authentication state update, and bootstrapping.
  • Popping the current route requests from the operating system (OS).


In the third part of this series, we explored the Navigator 2.0 API with the authentication use case. In this article, we handle the bootstrapping process and build the navigation stack accordingly.

In the second part of this series, we explored the Navigator 2.0 API, particularly the Router widget, the Page class, and the RouterDelegate class. The first sample app handles the navigation between HomePage , ColorPage , and the ShapePage . In this second sample, we add the authentication use case and build the navigation stack according to the authentication state changes. In addition to the _selectedColorCode and the _selectedShape properties, we add _loggedIn property which holds the authentication state in the RouterDelegate .

In the first part of this series, we had a short introduction to the Navigator 2.0 API and explained the sample apps that we will be building incrementally. In this article, we will introduce the Router widget and the Pages API. Then we will explain how to build a navigation stack according to the app state changes. We will focus on the following user interactions causing the app state changes:

  • Selecting a color and shape border type by pressing the buttons in the lists

This is the second part of the series on implementing a design system for a Flutter app so that we can easily switch between three themes made for three different companies. In the first part, I talk about theming from a design aspect. If you haven’t read the first part yet, I would strongly suggest starting with it. In this second part, I explain implementing multiple themes in a Flutter project from the development aspect.

After years of Android development experience, I can easily say that building a Material theme in Flutter is much simpler compared to XML wilderness of…

In this series, I talk about implementing a design system for a Flutter app so that we can easily switch between three themes made for three different companies. I will approach theming from the design and development aspects in two articles. This first part starts with an introduction section and then explains theming from a design point. In the second part, I talk about implementing multiple themes in a Flutter app.


Imagine you have a B2B app to be used by the customers or employers of different companies. You can choose to implement only one app theme for all companies…

Today is the anniversary of my 120 km Cappadocia Ultra Trail race victory. One year ago, before the race, I wrote this post but didn’t share it since I was not sure whether it is too much information about my personal life. I read it again and had the courage of sharing it after one year.

One year ago I wrote this: “I don’t even know if the disease will allow me running next year. People may not be aware but it is the same for everyone. Life is full of good and bad surprises.”

I was planning to run…

I would like to talk about the use cases, alternative flows, and exception flows with the service designer who designed a self-checkout system for a market chain in Finland. I wish this post finds related people and helps them to improve their services.

A Use Case for a Self Checkout Service

A use case represents a list of steps or actions between actors and the system to describe a goal in the system. Let’s talk about the most common use case for a self-checkout system “Paying for the shopping”.

Summary: A customer finishes shopping and approaches to kiosks for self-checkout. The customer shows product barcodes to the kiosk…

In this article, I will share my experience with Huawei App Multiplier feature.

“The App Multiplier is a system-side solution that splits the screen on an Activity base.”

The purpose of this blog post is to demonstrate what you can achieve with Huawei App Multiplier feature for different scenarios. I would strongly suggest the blog post by Hayri Aral for an awesome introduction to the concept.

App Muliplier in action

Before starting…

  • App multiplier feature is for Huawei tablets and Huawei foldable phones
  • In Huawei tablets, the app multiplier is enabled by default, and used when the tablet is in landscape mode.
  • In Huawei foldable phones…

Cagatay Ulusoy

Flutter and Android Mobile App Developer

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