DEV Community

Markus Huggler
Markus Huggler

Posted on

My first Flutter project as an long time Angular developer

I am a full stack software engineer with 10 years of experience with .Net (Core) and Angular (I have started with AngularJS).

We, at Novaloop needed an MVP (or rather a working prototype) and we decided to implement it in Flutter. We chose Flutter mainly because we wanted to be quick and we wanted the MVP to potentially run on all different platforms.

The search for a new community

As a long time user of the .Net Framework and Angular, I am very familiar with influential people in the community that create good content. This is definitely not the case for Flutter.

Twitter Community

Hint: The Flutter community handles use the blue heart emoji extensively ;)

No particular order:

Twitter Handle Description
@RydMike All about theming
@vandadnp Flutter courses on YouTube
@FullmerS Flutterista
@RobertBrunhage Great Flutter courses
@felangelov Author of the Bloc library
@vgventures Maintainer of the Bloc library
@remi_rousselet Author of Provider and Riverpod
@biz84 Great Flutter courses
@ThomasBurkhartB Author of get_it dependency injection
@mhadaily Community leader and organizer
@verry_codes Flutterista and community leader Flutter DACH
@letsgetwckd Great Flutter courses (flutterly)
@resocoder Great flutter courses
@devangelslondon Community leader
@ASalvadorini Flutter speaker
@roaakdm Flutterista and Flutter Vikings speaker
@CFDevelop Flutter Dev

Learning Resources

Description URL
Flutter documentation https://docs.flutter.dev
Flutter widget of the week https://www.youtube.com/playlist?list=PLjxrf2q8roU23XGwz3Km7sQZFTdB996iG
The Boring Show https://www.youtube.com/playlist?list=PLjxrf2q8roU3ahJVrSgAnPjzkpGmL9Czl
Code with Andrea, very comprehensive Flutter courses https://codewithandrea.com/
Flutter Community @ Reddit https://www.reddit.com/r/FlutterDev/
Flutter Community @ Youtube ttps://www.youtube.com/c/FlutterCommunityVideos
Flutter @ Youtube https://www.youtube.com/c/flutterdev
Flutterfly @ Youtube https://www.youtube.com/c/Flutterly
Majid Hajian @ Youtube https://www.youtube.com/c/mhadaily
Reso Coder @ Youtube https://www.youtube.com/c/ResoCoder
Vandad Nahavandipoor @ Youtube https://www.youtube.com/c/VandadNP
Robert Brunhage @ Youtube https://www.youtube.com/c/RobertBrunhage
Robert Brunhage Courses https://robertbrunhage.com/

State Management

https://docs.flutter.dev/development/data-and-backend/state-mgmt/options

Periodically, Mike Rydstrom (https://twitter.com/RydMik) publishes an overview of the State Management Solutions with the most LIKEs. https://twitter.com/RydMike/status/1528827017172504579

This is the hottest topic in the community. Hardly anyone doesn't have an opinion on it. As far as I understand, there is no official recommendation from Google. There is a discussion about whether there was once an official endorsement for Flutter BLoC. At IO '18, it seems that the BLoC architecture was presented and the package was then developed according to this architecture design. At the moment there seems to be a big momentum for Provider and for the next generation of it: Riverpod. These are maintained by Remi Rousselet (https://twitter.com/remi_rousselet). Soon there will be a new major release (2.0) of Riverpod and there seems to be a lot of changes and simplifications in the next months, see also the talk of Remi at the Flutter Vikings conference https://youtu.be/C2Zp731g8Es?t=12762 The courses of Andrea Bizzotto are great when it comes to Riverpod and a possible architecture. Andrea proposes an architecture of her own and calls it Riverpod Architecture https://codewithandrea.com/articles/flutter-app-architecture-riverpod-introduction/

To get a feel for both architectures, we developed our project with both state management solutions. To be fair, the first version was implemented with Riverpod and the second version with BLoC, so we had already learned a lot during the implementation of the second version. I know NgRx very well from Angular and therefore felt very quickly at home with the BLoC pattern. We also want to store a part of the state in local memory and reload it on restart. We have implemented this with Riverpod itself in the BLoC package there is already a solution hydrated_bloc. Also the possibility of global observers has helped us a lot in the development and has helped a bit over the lack of Redux tools (in the browser).

GetX

This seems to be the red rag in the community. In the world of Harry Potter, it would be compared to Voldemort. In the popularity rankings it is high up, if not on the first place when it comes to state management and dependency injection. But as far as I understand it is considered by the community as its own framework and not as an extension for Flutter. It uses completely different approaches and thus hides much of the Flutter DNA.

Dependency Injection

As a .NET and Angular developer, I am very familiar with Dependency Injection and use it extensively. So I was rather surprised that there is no solution in the framework directly here either. Again, there are many options and packages. Some even do without Dependency Injection and use singletons or instantiate classes directly. But new is glue and it makes it difficult to write tests.

Riverpod already brings a lot with Provider. For the rest and for BLoC we relied on get_it from Thomas Burkhart (https://twitter.com/ThomasBurkhartB).

Configuration

Again, I'm used to the framework already bringing solutions and making it easy for a developer to ship different environments. Again, to my knowledge, there is no official solution. Andrea has again published a good article with a suggestion: https://codewithandrea.com/articles/flutter-api-keys-dart-define-env-files/

FLutter on the Web

What finally moved us to work with Flutter was the possibility to publish for the web as well. Unfortunately, the implementation is quite "unconventional". Unlike Angular or React, Flutter does not produce HTML and CSS, but uses the canvas. There are two different rendering options with their advantages and disadvantages.

Some background articles on this:

Testing

This is what I missed the most from Angular. I am a big one of integration testing in the frontend. For this I prefer to use Cypress. Cypress is unfortunately not usable with Flutter, resp. only via detours and by far not as comfortable as Angular.
With the integration_test package similar results can be achieved and hot reload seems to be possible. Unfortunately I failed there. For the current project we have also set the BLoC package and for a certain part of the state we need the hydrated_bloc package. Unfortunately at the moment it seems that no integration tests can be realized: https://github.com/flutter/flutter/issues/96939

Conclusion

The next comments are strictly my personal opinion and refer only to the web version and not to the mobile development part of Flutter.

I love Flutter's declarative widget system. The speed at which prototypes and executable MVPs can be developed, for all platforms, is impressive.

I would not, as of today, implement a complex and long-lived web application with Flutter. For an executable prototype or a small MVP to test the market, Flutter is great.

Top comments (0)