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.
[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)
If you want to take part in Flutter Warsaw as a speaker just fill the form below: