How to build a Match-3 game, like Candy Crush, Bejeweled, FishDom… in Flutter.


I wondered how difficult it could be to write a board game in Flutter, involving Animations, Sequences of Animations, Triggered Animations, Sounds, Gesture Recognition…?

As I have been playing for years with Math-3 games such as Candy Crush, Bejeweled and lately FishDom, it sounded natural to me to give a try and mimic these games.

After only 1 week, I already had a working version of a game I called “Flutter Crush” and this article explains the steps I followed for this proof of concept.

Source code

The full source code of this article is to be found on GitHub.

Please note that my objective was not a release the game. Therefore, there are still things which are not fully implemented or tested. Also, the structure of the code could be very much improved but this was not part of my objectives. …

Introduction to the notions of Streams, Bloc and Reactive Programming. Theory and practical examples.

Difficulty: Intermediate


It took me quite a while to find a way to introduce the notions of Reactive Programming, BLoC and Streams.

As this is something that can make a drastic change to the way to architecture an application, I wanted a practical example that shows that:

  • it is very possible not to use them but could sometime be much harder to code and less performant,
  • the benefits of using them, but also
  • the impacts of using them (positive and/or negative).

The practical example I made is a pseudo application which, in short, allows a user to view a list of movies from an online catalog, filter them by genre and release dates, mark/unmark them as favourites. …

Image for post
Image for post

This article describes the notion of Shared Preferences that allows a Flutter application (Android or iOS) to save settings, properties, data in the form of key-value pairs that will persist even when the user closes the application.

Difficulty: Beginner

Shared Preferences are stored in XML format.

Shared Preferences is application specific, i.e. the data is lost on performing one of the following options:

  • on uninstalling the application
  • on clear the application data

Main use

The main use of Shared Preferences is to save user preferences, settings, maybe data (if not too large) so that next time the application is launched, these pieces of information could be retrieved and used. …

This article covers the important notions of Widget, State, BuildContext and InheritedWidget in Flutter Applications.

Special attention is paid on the InheritedWidget which is one of the most important and less documented widgets.

Difficulty: Beginner


The notions of Widget, State and BuildContext in Flutter are ones of the most important concepts that every Flutter developer needs to fully understand.

However, the documentation is huge and this concept is not always clearly explained.

I will explain these notions with my own words and shortcuts, knowing that this might risk to shock some purists, but the real objective of this article to try to clarify the following…


Didier Boelens

IT consultant - Software architect - Flutter enthusiast

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