We're sunsetting PodQuest on 2025-07-28. Thank you for your support!
Export Podcast Subscriptions
People
T
Taha Tesser
Topics
Taha Tesser: 我从Android开发转到Flutter开发,起初是因为朋友推荐,Flutter的效率更高,并且可以跨平台开发。Flutter的UI开发方式与Android不同,它使用Dart语言声明式地编写UI,无需处理繁琐的findViewById等操作。我通过收听《It's All Widgets》播客学习Flutter,并在10天挑战赛中用Flutter构建了一个卡片查看器应用,这让我对Flutter的快速开发能力印象深刻。将应用上传到It's All Widgets网站非常便捷快速。在CodeMagic担任Flutter triage角色期间,我负责处理Flutter仓库中的问题,并直接修改Flutter源码并提交PR修复了一个Android Studio版本检测问题。Flutter最吸引我的地方是其热重载功能和跨平台一致性,可以在所有平台上运行相同的代码。Flutter跨平台的特性既是优势也是劣势,因为在所有平台上都做到完美很困难。将Material Design作为独立包的方案复杂且没有直接答案,因为Flutter框架高度依赖Material Design。一些第三方包,例如shadcn_ui,在一定程度上解决了Material Design作为框架一部分带来的问题。学习Flutter的建议是:多实践,专注于构建有价值的应用,而非追求成为框架专家。Flutter社区非常友好和乐于助人。 Hillel Korn: (作为主持人,Hillel Korn主要负责引导话题,没有提出核心论点,因此此处不进行核心论点总结)

Deep Dive

Shownotes Transcript

Translations:
中文

Hi, thanks for listening. This is the It's a Widgets Flutter podcast. My name is Hillel Korn. Each episode, you get a chance to speak with another amazing member of the Flutter community. This episode, we're extremely lucky to be speaking with Taha. Welcome. Hi, thanks for having me. Thanks for being on. So to start, can you share a bit about yourself? I am Taha Tesser. I grew up in the community. I'm originally from India, but I have moved to Estonia over four years ago.

I used to work at CodeMagic, now I'm working at Vault. We can go into my journey a little bit later. That'd be great. How did you end up working at CodeMagic? And we talked about Vault also. I want to share this journey because it's very connected to It's All Widgets. And I can't believe that I'm here talking about It's All Widgets and my journey with you. So I'm really fortunate that I got to do this.

Back in 2018, I was really into Android development because I had a Windows machine, I had an Android device. It was a natural progression for me to get into Android development, especially starting out. And in 2018, if you guys remember, Kotlin was getting very popular. It was stable at that point. And Jetpack components were getting very popular.

And I told my friend, he lives in the U.S. His name is Chris. He's also really important.

I told him that I want to take Android development seriously. I want to dedicate a few months building my skills in Kotlin and understand all the Jetpack libraries. And the reason why, because the Jetpack libraries made life a lot easier coming from Java, coming from the fine view widgets and the complexities of Android development. And I shared this experience with him. I told him like,

I'm going to take a couple of months and do this. And he suggested, why don't you try Flutter? You can do all the things you want to do much faster, and you can even build for iOS. I told him, I don't have a MacBook. I don't have a way to do that. He said, it's okay. You can just push your code to a repository, and in future, you can just take it down and then build for iOS. You don't have to target iOS to use Flutter.

And I like the idea. And he shared a to-do app, CodeSample, with me. When I tried it, it was very different compared to Android because there were lots of folders like iOS, Android, Windows. And I said, okay, where is the UI? I need to find a UI file like XML. He said, no, you just write it in Dart. It's all declared in the Dart file.

I was like, oh, that's very interesting. That's nice. I don't have to deal with find me by ID and all of that. And around this time, I was listening to Android Fragmented Podcast. And there were a lot of interesting topics discussed in that podcast, especially React Native and Flutter. They were more focused on Android. So when my friend introduced me to Flutter,

thanks to Chris, I immediately searched for something similar in Flutter and I found It's All Widgets. And I told him, oh, you should listen to this podcast as well because I used to listen to Android for Android learning. I listened to, I think, first two episodes. It was really nice to have something where I can listen to people talking about Flutter.

And I heard your voice and I was like, okay, now if I'm getting into Android, I should listen to every episode. And I did that.

During that podcast, the only thing that was different for me was the episodes were very short. Compared to Android guys, it was like hour-long episodes sometimes. I was like, oh, it's not long enough. It should be a little bit longer. So that's the only thing I was missing. However, after a couple of months, Platter went into stable.

Flutter 1.0 and it's all widgets like was already part of my routine and then I also like at the stage at the 1.0 launch they also talked about CodeMagic and RIDE. RIDE was a different name back then I don't remember what it was but it was a different name and that hooked me that entire event hooked me to Flutter.

And my friend told me, why don't we take a 10-day challenge where you build something and I build something and we share results in 10 days? Is that even possible? Coming from Android development, 10 days, I can't get much done. He said, yeah, yeah, you can do it. It's not that difficult. Just challenge yourself. And I built a card viewer artifact, which is a Valve game, the Steam game.

They had an API, so I just downloaded the API data and then loaded it locally from a JSON, and I built a card viewer in seven days instead of 10 days.

And the first thing I did is I don't have to go and publish this app to Play Store. I can just upload it to repository and then I can link to the It's All Widgets page where I can upload a screenshot, a description. I can even link my GitHub repository. There were lots of cool apps back then. The SpaceX Go app.

I remember very specifically, it was a really good app. There were quite a few other ones, like Puzzle Game, like a card app, like app game types.

And I uploaded there. It took me like a minute to do it. And it was so fast and quick. And I shared a link to my friend. I said, I uploaded to It's All Widgets. And I was really impressed. And he couldn't even get anything done in those 10 days. And I was able to build the app, upload it to It's All Widgets, and share with him. And he was able to even go to my repository and download APK. So that's how I got into the world of Flutter.

And it's been an interesting journey since then. After, I think, 12, 13 months, I got a message from somebody at CodeMagic. They say, like, oh, you're sharing all of these Flutter tips. Do you have any interest in joining this role, which was the Flutter triage role? And they shared an article. I read the article. The article says, like, Flutter has this many issues and Google needs a

some resources to look at those daily issues that are coming from hundreds of users every week. And that was really interesting for me because like 13 months ago, I was just starting to learn Flutter. Now, I was thinking to triage issues in the Flutter repository where I would reproduce Flutter on different platforms. And I applied, like I said yes, and then I got the job.

And I got into Flutter membership. I got access to the repository where I can close issues, triage issues on different platforms. And I did that. I also introduced a couple of processes where we test bugs on different channels. There were four channels back then, a stable beta dev master.

And I got several devices, iOS, Android, MacBook. I had a MacBook to test issues as well. Windows, Linux. I had an iPad and a Raspberry Pi eventually. So I was running Flutter code on all of these devices for a living. And I couldn't believe that I was just thinking of making apps in Flutter than I was working in Flutter itself.

That's how I got into CodeMagic. And I was really happy in that role. It was the best thing that could have ever happened to me. Because instead of just choosing Flutter to build an app or work in a job, I was working on Flutter itself and getting to see Flutter from behind the scenes and testing features that

People get to test after several months when they emerge. Because I run on Dev and Masters, I was able to test new features, new widgets, new capabilities right away. And I was getting paid to do that, so it was kind of fun. One other thing that was interesting to me was there were some people who also contribute, make contribution changes to the repository that are not part of the Google team.

And I saw one issue where Android Studio, there was a new Android Studio version, and JetBrains changed the way they declare metadata for Android Studio. They move it to another file with a little bit of different syntax

Because of that, Flutter couldn't detect what Android version is installed on a device. And somebody reported this issue, and I was like, how hard it could be where this data exists. I could just go and find this metadata somewhere and fix it myself. So I just spent maybe 30 minutes or an hour looking into the source. I found the source. I fixed the source.

Then I was able to verify Android Studio and it detected that version. And that was really satisfying. I was like, wow, this is amazing. I can actually also contribute and fix something instead of just reproducing them. I filed a PR. I included a small test. I just duplicated one of the existing tests, which I give advice to a lot of contributors. I say, whenever you want to contribute, don't think of

complex test, complex instruction. Just try to make it as easy as possible. And one of the ways you can do that is focus on the problem and then duplicate one of the tests because Flutter has thousands of tests. So if you are thinking about a test to make your contribution as quickly as possible, you can just find something similar and duplicate that and then

modify it to your fix. So I duplicate one of the tests and then I file the PR. It was merged within 10-15 minutes. And everybody would be able to detect Android Studio version much, much sooner than stable. Usually people try new Android Studio when it is stable on a stable channel. It takes a couple of months. So I was able to fix that even before that bug reached people.

And when the new release came, people were like, "Oh, this is already working." So that's how, I know it's a very long answer, but this is very special to me because Soul Widget also has been part of that. And over the years, I really missed regular episodes.

Wow, that's an amazing story. And I'm really touched that you've been listening from the beginning and supporting the website. Thank you very much. Sometimes, you know, you record the podcast, you don't actually ever listen to it. So it's nice to know there are people that do it. And it's been great. And I apologize, I guess it's not a regular cadence of episodes. I'm trying now to do about a quarterly pattern. So once a quarter, a new episode. So there's some sort of set rhythm and time to it. It takes a bit of time to record and to edit.

That's an amazing story. And it's so cool just to hear how you kind of went from thinking about Flutter to working basically on Flutter directly and managing issues, which I'm sure was a great experience just learning about Flutter and learning the kind of problems people are running into. Are there aspects you like most about Flutter? I think the biggest aspect, like when everybody was getting to know about Flutter was the heart rate load.

Like how fast it was, how quick it was. Even back then in 2018, it felt like magic. It was absolutely crazy to see your code instantly on the screen when you're editing your source code. I think that still blows me away, even though we have faster machines and faster things to do in the app development.

And another aspect I still love to this day is the ability to run the same code on every platform. And when you work in this clutter for so long, you kind of feel like it becomes normal to you. It doesn't feel like something crazy.

But I don't see that any other framework making it as easy as Flutter. You can have a single main.dart file having a complex app, and you don't have to modify a single line, and you will be able to run that app, and it looks same on iOS, Android, desktop, Windows, web. I still think that's one of the best things about Flutter.

where you can have pretty much same experience everywhere with very little change. In fact, you can even run flutter run --all, which is a command that will run a Flutter app on all the connected devices. So if you have iOS simulator, Android simulator open, and then you run this command, your app will run on Mac mobile. It will run all the devices at once. So it's still amazing.

That's really cool. I didn't know about the command. Are there patterns you've seen with issues created that you think could be changed in Flutter to improve it? Obviously, since Flutter runs on everything, it's not perfect on every platform. I think that's one of the stigma that Flutter gets is it's either slow on web or it's not very accessible, easy to use on desktop. On mobile, it might have some other issues.

But the strength is also its weakness because it's running on everything. Everything is not perfect. And it doesn't have to be, in my opinion.

There are ways where you could make it better for those platforms. If your app is running just on desktop, you could have a team focusing on that platform and filling those gaps. There are amazing third-party packages. There are teams building custom solutions to make their desktop app as good as possible. And I think that's one of the things that we as engineers can solve. But

But it's not something that's built in within the framework, which I totally understand. It cannot be. It's not possible to do that. That's a good point. And then I know from following on X, you have a lot of experience with material design. I just wanted to get your sense on something that comes up a lot is people wanting it to be a separate package. Is that something you see being reasonable? Do you like that idea? Do you have other approaches you think should be considered?

This is a very interesting question and one that's really close to me. Since after my triage role, I became a full-time contributor. And one of the areas, in fact, most of my time was spent on material design. So I was actively contributing to the material design, building new features, fixing bugs. And there are times where you build something or you fix something, but

very important inside the framework. And it takes several months for the users to get that feature because material design is part of the framework. The framework has a quarterly release cycle. You get like four major releases per year. And let's say I,

merge a new future or I fix something right now and there is a major release in next two months, it will take two months for the users to get to that future or that bug fix, which is not good if you're relying on Natalya design in the framework to build your app.

There are cases where we could escalate that issue to a hotfix, but there is also trade-off of how much you can hotfix. There are times where the fix has too many changes that would create a lot of regressions if you directly hotfix.

So this is why this topic is very, very complicated. There is no direct solution or direct answer to this problem. Making it as a package theoretically sounds really nice. From an outside user, like I want this and it adds infinite quality of life improvement to my workflow.

But the way Flutter is built is it is relied heavily on material design. It is a starter template, for example, when you create a new app. It is built into different components. The files are linked, sources are linked. And the core components, at least a few years ago,

didn't have all of the functionality that were provided by material design. Like one of the major things was material state, which provide state to the properties where you can define disable, enable, hovered.

and selected press states to any of those properties in material design. And that was part of the main library, even though it didn't have to be. But it was moved from material design to the core components. So I think we are seeing progress there where we don't have to keep those fundamental things like

which state color states as part of the material design but we still have a long way to go from turning material into it and outside package and we can't just directly move the code where it's not that straightforward and simple but i do think that

There's a whole suite of third-party packages that have emerged because of this challenge, where they are solving some of those problems, especially short CN.

UI, this is a very popular package. I have been seeing even the Flutter team engineers using this package in some way. This package not only allows you to build a UI outside material, but also it makes things a lot easier in many ways, which is not possible in the framework without breaking a ton of code. So as you can see from my answer, there is no straight framework.

one step or one process where you can magically make material design package into material design library into a package. It is possible, in my opinion, in a long term, maybe in a few years when we move some of these core things. But for the time being, I feel like there are ways where you can rely less on material and use the shots again. And even Cupertino

and build custom solutions yourself. And especially because Material 3 has been a very big change inside the framework, and I worked as a Material 3 contributor as well, I have seen that people rely on a different style of design, different design system instead of Material 3 because it looks different.

Pretty similar to other apps. That's one of their complaints. So I feel like because of Shardsia and other packages, people are better off, at least in the short term. It's a great answer. Is there any advice you give someone just starting out? I would say that don't spend a lot of time learning every aspect of the framework. And this goes with any framework.

like iOS development, Android, Flutter. I did that. I spent too much time trying to learn everything. Just learn by doing. Build. And as you're building, you will grow your skills. And Flutter is probably one of the easiest frameworks to get started. And the less time you spend on things that are not adding a lot of value to your workflow,

the better you are. So when you're starting, just focus on building and focus on what value it adds rather than becoming an expert. Definitely agreed. Is there anything else you'd like to add or promote? I wanted to just share that I have a huge, huge, I want to thank everyone in the Flutter community for their support and

contributing to Flutter. I have got a lot of recognition for my work in the Flutter repository as a contributor. I can't thank everyone enough. People are so nice in the Flutter community. Whenever I travel to any city where there are Flutter developers, they all meet and we get to chat about Flutter. Flutter has one of the nicest people I have ever known. All of my friends, most of my friends are Flutter friends and

I feel incredibly grateful that I can be in this tech space where people are just beyond what they're doing at job. They're beyond to support each other, help each other. You can have a long conversation with anyone in the community and feel like you know them for a very long time. And that's true for you. That's true for anyone in the community.

And when you are not just thinking about work and thinking about how technology and your work affects your life, I think Platter is one of the best places to be where you can be more than just

You can make an impact on other people's lives, help people who are new, help new contributors, help new ideas, build something together, contribute to open source packages, open source libraries, and make the ecosystem better.

And because Flutter has this very vast and diverse community, people all over from India, from Africa, from Europe, they all have a shared goal to learn Flutter, use Flutter, build something with Flutter, share in Flutter. And that's one of the best things about Flutter. So I just want to see this going forever.

100%. Don, really nice to get a chance to speak with you and have you as a guest on the podcast. Thank you. Thank you for having me.