Flutter CTO Report 2024
Get insights about Flutter directly from CTOs, CIOs, Tech Leads, and Engineering Managers!

Flutter Warsaw Interview With Felix Angelov

Feb 16th, 2021 • 3 min

Intro

Before Flutter Warsaw #14, we interviewed our speakers and asked them about their development path in Flutter, what was the most challenging for them while using this technology, and who is their biggest Flutter inspiration.

Felix Angelov is a Senior Software Engineer at Very Good Ventures. He previously worked at BMW where he pioneered the transition to Flutter and is also a dedicated open-source creator and maintainer. When he's not coding, he's searching for new coffee shops and practicing his latte art.

Speakers

Mateusz Wojtczak
LeanCode
Head of Mobile at LeanCode; Flutter and Dart GDE; Tech Leader for the Credit Agricole Mobile Banking application in Flutter; Tech Owner for Patrol, UI Automation tool for Flutter
Felix Angelov
@felangelov

Interview

[Mateusz Wojtczak] What's your background as a developer?

[Felix Angelov] I started my career in mobile development and worked primarily on iOS (Swift) but also had some Android (Java) experience. Later I transitioned into web development and worked for several years with Angular and React using Typescript. I also had the opportunity to work on backend systems using Node.js and Express as well as microservices with Nest.js (all in TypeScript). Eventually when I heard of Flutter and realized how many problems it could solve I quickly switched gears and have been developing using Dart and Flutter full-time ever since.

What have you been using before creating the Bloc package?

Before the bloc package, my team and I tried using scoped_model, redux, and the manual BLoC design pattern using RxDart.

What inspired you to create Bloc? Have you seen similar solutions in some other languages or frameworks?

I really liked the principles of the BLoC design pattern because it allowed my team to decouple business logic from the UI making it easy to test and reuse code. At the same time, I felt the pattern enabled us to scale effectively as each feature was able to manage its own state as opposed to having a global store.
After experimenting, my team and I decided we liked the pattern but didn't like the boilerplate and the complexity of manually creating Blocks. We also really wanted to limit the exposure of Rx because in the past we had experienced deterioration of code quality due to the misuse of Rx. I decided to try to create an abstraction that would allow developers to still think in terms of events and states and create reactive applications but without having to interact with Rx. At its core, the library was intended to facilitate testability, traceability, and predictability which could scale from a few developers to hundreds of developers.

In your day-to-day work, do you create more blocs or cubits?

In my day-to-day, I tend to create more blocs because for most production applications I've found it's important to have the ability to trace all state changes (including events) in the application for debugging, logging, and analytics. I still use cubits a lot in my side projects since they are simple, quick, and lightweight and I can choose to refactor to blocs as needed without much overhead.

What are other state management options you found and liked? What about e.g. mobx_dart?

I like Provider and ValueNotifier as a simple state management solution. RiverPod and StateNotifier is another great combination that I've experimented with.

Do you have any big plans, e.g. creating some new package?

I do have some exciting plans around new tooling which will hopefully help speed up development and improve consistency & code quality so stay tuned for more details.

What's your opinion about form_bloc?

Forms are something that people feel needs to be optimized with some library but there's always a lot of edge cases and exceptions that eventually become an obstacle. I think form_bloc is a great package that was developed by one of the members of the community. In general, I have found that forms are very tricky because many abstractions fall apart when it comes to edge cases and custom behaviors. We created a tiny Dart package called formz as part of the Chicago Flutter organization which attempts to standardize how form inputs are represented and validated but there's definitely a lot of room for improvement especially when it comes to integration with Flutter.

The best package you have discovered lately is…?

I've really been enjoying the 'integration_test' package and am hoping to integrate it into more of my projects (no pun intended).

One feature you crave the most in Flutter or Dart is…?

I would really love it if Dart had Data classes and if there was better support for generic type inference in Dart
(https://github.com/dart-lang/language/issues/620)

The talk

Cubit: Advanced Topics

Cubit is a subset of a very known Bloc Pattern with a simplified, lighter combination of the Bloc and Provider. It brings a fresh friendly look to the Bloc state management. Watch the video to find out what is Cubit, how to test your code with BlockTest and much more.
Flutter Warsaw #14- Felix Angelov

Read more

Implementing Live Whiteboard With Flutter and Firestore Database

Whiteboards make it easier to collaborate on designs, teach people new concepts, and express ideas. In this blog post, we explore a possible implementation of a whiteboard using Flutter to create a mobile application and Firestore database as backend.
Image tile

Using Flutter in the Enterprise Environment

Jakub Biliński was responsible for the architecture, approach, and development of a new version of the mobile application for strategic and corporate clients of the bank. Watch the video to see how his team adjusted to FinTech security compliance, wrote a custom HTTP client, maintained application scalability, and more.
flutter-warsaw-jakub-bilinski

The Power of Immutable State

Managing a state can be a stressful ordeal if you dive into it without any thought. This kind of monstrous code can be tamed with the principles of immutability. And as if cleaning your code wasn't enough in itself, an immutable state comes with a handful of hidden superpowers! Come along for the journey to find out how to use them.
Image tile

Why Firestore, Part I: Reasons to Love It

Firestore and Firebase suite are great technologies. They allow developers to build some features in Flutter and other mobile frameworks really fast. However, Firestore has also many pain points that outweigh the pros in most of the more advanced cases. Is Firestore appropriate for you? Read on to find out why!
Image tile
logo

We build communities

A photo from Flutter Warsaw event
Flutter Warsaw is an IT community focused on modern Flutter technology. It is one of the largest so-called meetups dedicated to Flutter in Europe, initiated by LeanCode in 2018 in Warsaw, Poland with over 1.8k members worldwide. It gathers Flutter enthusiasts and other IT professionals interested in getting to know its possibilities.
A photo from Flutter Europe conference
Flutter Europe is an initiative driven by European Flutter Communities to gather people passionate about Flutter and those who want to learn how to create beautiful applications. Its last edition, one of the biggest Flutter conferences, took place in 2020 in Warsaw, Poland. It was organized to share Flutter's knowledge further.