Flutter Warsaw interview with Leo Farias

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.

Leo is a CEO/CTO of Concepta & Founder/CTO of FanHero. He is actively experimenting with Dart, Flutter, and other tools with the focus on dev tools, and frameworks to improve efficiency for development teams (do more with less).

Speakers

Matej Rešetár

@resocoder

Leo Farias

@LeoAFarias

Interview

[Reso] What is your background as a developer?

[Leo] Well, that's an interesting question. I am self-taught. I started at an early age, and by fourteen, I was already doing some gigs. I was very passionate about gaming, graphic design, and animation, but I quickly started learning to program to build my ideas.

Were making games any influence for you?

Oh yes! At the time, it was Counter-Strike and Half-Life. I got a little bit into modding, customizing, and building a custom IRC client. Back then, you had to configure and tweak a bit more to get what you wanted. You could see how things worked behind the scenes. Nowadays, things can feel very magical and seamless, so I think there is a lack of curiosity and appreciation that people can have about technology. I spent a lot of my time tinkering with games, other software. That's how I got started.

Why did you personally choose to develop in Flutter?

Just a little bit about me. I am CEO of a Concepta and CTO of FanHero, a sister company where we work on OTT space? We had started building the 2.0 version of our app using React Native because we were interested in sharing some of the stack and business domains across our platforms. Flutter was moving quickly and making much progress in being ready for "production." A few months in, we changed the product's direction and thought since we had to rethink some elements, it might be a good idea to validate Flutter. Everything on the website sounded amazing, but then again, it always does! However, since we had a strong market in Latin America and India, the promise of better android performance was fascinating. We started building an app during the validation process and were very happy with the performance and the "write once run everywhere" experience. There were definitely some things that were not ready; at the time, there was no proper support for webview, and the video player lacked a lot of the things we needed.

Video players is something dear to my heart because one project really got me in trouble exactly because of the unfinished video player things, so I feel your pain (laughs).

What do you like the most in Flutter Development?

The tooling. For me, Flutter provides the best tooling, especially if you compare ….. to React Native. When it comes to the development experience itself and debugging. I think there is nothing out there like Flutter when it comes to the development experience that provides a true multi-platform without much overhead. For me, that was huge. We are building many projects across clients, so we need something that provides the necessary flexibility, maturity, and stability.

So the flexibility of Flutter is really keen here and the performance too. So you actually kind of mentioned about what bothers you about Flutter. The lack of video support which was kind of poor and also the native views.

Do you have any other issues with Flutter? Or maybe you could expand on those issues that you've mentioned already?

I know the conversation about technology can sometimes become a team sport. Where devs pick their sides and have confirmation bias, I, for one, like writing React apps in Typescript. The tooling is lacking; the layout is not like Flutter. But an experience of coding in Typescript using React hooks is something I enjoy. That was the thing that I felt was missing from Flutter. Flutter has amazing technology and tooling. But I felt like the actual building experience lacked a little bit; things were a bit too verbose and repetitive. I like Dart, but the type system can be a bit too simplistic; they started to improve this with Null Safety and Type Aliases. Packages like Flutter Hooks and Riverpod are a must. These packages really enhance the development experience of building Flutter apps. In the beginning, it seems that you had to use streams for everything. I can't say that streams come naturally to a new developer. That increases the learning curve and can make things more difficult than they have to be. The community helps address this with many great contributions and some that I hope can make it to the core. I invite everyone to look, but there is a pull request for Flutter hooks on Flutter core (PR). I think it's worth reading. The topic goes beyond bringing hooks into Flutter or not. It's just fascinating. It probably took me an hour, two hours to read through the whole thread, but it's a great insight into some of the give and take and decisions that people have to make. Sometimes it's easy for you to criticize from the outside, but there are always pros and cons.

Exactly. Thanks. I think I'm gonna check it out.

Now let's get to the Topic of your talk, actually. What was the cause for you to build FVM? Because obviously we know that managing Flutter versions is kind of hard. In Flutter if not impossible basically without your contribution but what was your main driver behind that? That I'm gonna build this right now?

The main driver is pain (laughs). And I think it's the best driver when it comes to building these things. When we started developing in Flutter very quickly, we saw this need to switch between multiple channels. It was about 2018 - so it was before the 1.0 version. Flutter was changing very quickly. We needed the bleeding edge. Our Lead developer mentioned that it is a problem that we have- we had to validate issues on master while keeping a stable version. Switching channels took too long - we need to switch from the master to stable and so on. At the time I was CTO, I was looking to build sort of automation.
FanHero is a building platform - I don't want to say an app generator - but there are white label elements to the app itself. Architecture is nothing out of this world but is not the average use case for mobile apps. We need tools to customize and build these versions on-demand and theme them. Each app had a different configuration and had a different dependency on a Flutter SDK. It just felt painful to have to switch, and sometimes it was just one thing. Sometimes it was to see the regression. So it was complicated. And that is why I started to look into it. To build away if we could cache the version and switch without having to download it and set it up again. I actually wrote the first version of FVM in Go because it is the language that I was really familiar with. I did not have experience with Dart outside of Flutter. We were looking for something that would run natively. It has been rewritten in Dart. It just made much sense, especially due to the community support.

So with such a big undertaking as FVM - have you been following or trying to mimic some other version manager implementations like for example Node Version manager?

I am a big fan of API design. Even if you build a CLI, I think the API needs to be easy to understand and easy to use and clean. I am a big fan of not reinventing the wheel, so I did look for some version managers. One of them was the Node Version Manager - to look at some of the challenges they try to solve for and some APIs. Initially, I looked a lot into the Flutter itself - how was it actually setting it up and doing things like that, to make sure that it was compatible - that I am not trying to reinvent anything out of this world. But yes - node version manager was one of the tools that looked most from the API perspective. For me, Flutter - it's a similar problem to XCode. When you have XCode when you develop iOS, you have one XCode version, and you can have multiple XCode versions but essentially have to download it and use CLI to select a different version but only have one active at a time. So I was trying to see what was out there to see if Flutter had solved that problem already/if the Flutter team would solve the problem.

We are also going to be talking about your experience of Flutter desktop so maybe just briefly - would you recommend it for commercial projects?

When initially I finished a Mac version, Chris Sells said to check out Windows because it was approaching alpha. There is a disclaimer when you go to the Flutter website - "Do not build this for production," so when the creators say that "Do not build this for production or production apps," I am always cautious about making a different suggestion that goes counter to what they're saying (laughs). I can tell that based on my experience, I think it speaks highly of the Flutter team; they've built this technology on the top with a rock-solid foundation, which makes things much easier - adding new features even. So I didn't see anything very challenging or, let's say, unexpected behavior like it was unstable. Myself, I think we're building a lot of tools - internal tools. Then you should definitely consider a mix of Dart and Flutter for internal tools and products.
If you're trying to do something a little bit different, for example, if you're trying to build an app that requires a video, I think it's not there yet. They still need to bring support for the video player for Mac. I'm not sure what the plan is for Windows just yet. If it depends heavily on Firebase - the Mac versions can get along very well. I am not aware of the plans for Windows. I don't know if they're gonna be wrapping the C++ for firebase. So I think you need to assess it based on your needs. I think you should create a proof of concept and do some validation to ensure that you're on the right track and are not missing any blind spots. But the experience was excellent.

You're building FVM for the open source projects. Are there currently any other things that you're doing when it comes to the Flutter Community as an open source project?

The plan initially in doing the GUI experiments and explore cross-platform. We are really interested as a company Concepta to explore development tools. For us, we have a project that we've already started. It's not open source yet, but we already started internally. The focus is on video. So that's something that we're going to be open-sourcing eventually, and I think it's an inspiring and interesting project and very different from FVM.

Who inspires you the most in the Flutter Community?

I jumped in a little bit in a parachute. I had good conversations with Simon Lightfoot and what they're doing with the Flutter Community. I really like what they're doing. Everyone in the Flutter community seems to be very open-minded and welcoming, let's say "on the same page." There are many opportunities out there; I see a lot of growth and different scenarios. I think there is a huge opportunity, especially in developing countries. We got into it because of Android. We start seeing a huge segment there. I'm sorry if it's not specific, but there are many great people out there. It would be tough to call the specific one.

Definitely. Thank you very much for your time, Leo!

The talk

FVM- Building a cross-platform dev tool with Dart & Flutter

Discussing the experience of building an app & CLI to manage Flutter SDK versions. Experiences with Flutter Desktop, and why Dart & Flutter is the future of dev tools.

Read more

Implementing live whiteboard with Flutter and Firestore database

In this blog post, we will explore a possible implementation of such a whiteboard using Flutter to create a mobile application and Firestore database as backend.

Using Flutter in the Enterprise environment

Building one of the biggest Fintech applications in Flutter was very challenging. Jakub Biliński is responsible for the architecture, approach and development of a new version of the mobile application for strategic and corporate clients of the bank. In his, he shows how his team had to adjust to FinTech security compliance,  write a custom HTTP client, maintain application scalability and more.

The Powers 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, immutable state comes with a handful of hidden superpowers! Come along for the journey to find out how to use them.

Why Firestore, Part I: reasons to love it

Firestore & Firebase suite are great technologies. They allow us to build some features really fast. However, Firestore has also many pain points that outweigh the pros in most of the more advanced cases.
logo

Case studies

Techologies

Flutter

.NET Core

logo

We build communities

No match for you?

No problem, send us your resume, we constantly look for new talents. Write on office@leancode.pl