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

我是 Taha Tesser。我目前居住在爱沙尼亚,在 Wolt 担任设计系统工程师。之前,我在 Codemagic 担任 Flutter 贡献者。我是 Flutter 代码库的主要贡献者之一,也是 Flutter 中 Material Design 的核心贡献者。业余时间我喜欢喝咖啡和使用 SwiftUI 编写代码。

- https://x.com/TahaTesser - https://linkedin.com/in/tahatesser - https://bsky.app/profile/tahatesser.com

https://pub.dev/packages/shadcn_ui

<raw_text>0 嗨,感谢收听。这是“It's a Widgets Flutter”播客。我的名字是 Hillel Korn。每一期节目,你都有机会与 Flutter 社区的另一位优秀成员交谈。本期节目,我们非常幸运地邀请到了 Taha。欢迎。嗨,感谢你们的邀请。感谢你参与节目。首先,你能简单介绍一下自己吗?我叫 Taha Tesser。我在这个社区长大。我最初来自印度,但四年前搬到了爱沙尼亚。

我以前在 CodeMagic 工作,现在在 Vault 工作。我们稍后可以详细聊聊我的职业历程。太好了。你是如何最终在 CodeMagic 工作的?我们也谈到了 Vault。我想分享这段经历,因为它与“It's All Widgets”密切相关。我不敢相信我现在正在和你一起谈论“It's All Widgets”以及我的职业历程。所以我很幸运能做这件事。

早在 2018 年,我非常热衷于 Android 开发,因为我有一台 Windows 电脑和一台 Android 设备。对于我来说,开始从事 Android 开发是很自然的事情,尤其是在刚开始的时候。在 2018 年,如果你们还记得的话,Kotlin 变得非常流行。那时它已经很稳定了。Jetpack 组件也变得非常流行。

我告诉我的朋友,他住在美国。他的名字叫 Chris。他也很重要。

我告诉他我想认真对待 Android 开发。我想花几个月时间来提升我在 Kotlin 方面的技能,并了解所有 Jetpack 库。原因是,与 Java、传统的视图小部件以及 Android 开发的复杂性相比,Jetpack 库让生活轻松了很多。我与他分享了这段经历,我告诉他:

我打算花几个月时间来做这件事。他建议我,为什么不试试 Flutter 呢?你可以更快地完成所有想做的事情,甚至可以为 iOS 构建应用。我告诉他,我没有 MacBook,我没有办法做到这一点。他说,没关系。你可以将你的代码推送到一个代码库,将来你可以随时下载它,然后为 iOS 构建应用。你不需要以 iOS 为目标才能使用 Flutter。

我喜欢这个主意。他与我分享了一个待办事项应用 CodeSample。当我尝试它时,它与 Android 非常不同,因为它有很多文件夹,例如 iOS、Android、Windows。我说,好的,UI 在哪里?我需要找到一个像 XML 这样的 UI 文件。他说,不用,你只需要用 Dart 编写它。它都在 Dart 文件中声明。

我想,哦,这很有趣。这很好。我不必处理 find me by ID 以及所有这些事情。大约在这个时候,我正在收听 Android Fragmented 播客。在这个播客中讨论了很多有趣的话题,特别是 React Native 和 Flutter。他们更关注 Android。所以当我的朋友向我介绍 Flutter 时,

多亏了 Chris,我立即搜索了 Flutter 中类似的东西,然后我找到了“It's All Widgets”。我告诉他,你也应该听听这个播客,因为我过去常常收听 Android 播客来学习 Android。我认为我听了前两集。能听到有人谈论 Flutter 真是太好了。

我听到了你的声音,我想,好吧,如果我要学习 Android,我应该听每一集。我确实这么做了。

在这个播客中,唯一与众不同的是剧集非常短。与 Android 播客相比,Android 播客有时会有长达一小时的剧集。我想,哦,时间不够长。应该再长一点。所以这是我唯一缺少的东西。然而,几个月后,Flutter 进入稳定版。

Flutter 1.0 和“It's All Widgets”已经成为我日常生活的一部分,然后在 1.0 发布的阶段,他们还谈到了 CodeMagic 和 RIDE。RIDE 当时的名字不一样,我不记得是什么名字了,但它是一个不同的名字,整个活动让我迷上了 Flutter。

我的朋友告诉我,我们为什么不来一个为期 10 天的挑战,你做一个项目,我做一个项目,然后在 10 天后分享结果?这甚至可能吗?来自 Android 开发,10 天,我做不了多少事情。他说,是的,是的,你可以做到。没那么难。挑战一下自己。我制作了一个卡牌查看器,这是一个 Valve 游戏,Steam 游戏。

他们有一个 API,所以我只是下载了 API 数据,然后从 JSON 本地加载它,我在 7 天而不是 10 天内制作了一个卡牌查看器。

我做的第一件事是,我不必将这个应用发布到 Play 商店。我可以将其上传到代码库,然后可以链接到“It's All Widgets”页面,在那里我可以上传屏幕截图、描述。我甚至可以链接我的 GitHub 代码库。当时有很多很酷的应用。SpaceX Go 应用。

我非常具体地记得,这是一个非常好的应用。还有其他一些,比如益智游戏,比如纸牌应用,比如应用游戏类型。

我上传到那里。我花了一分钟就完成了。它非常快速便捷。我与我的朋友分享了一个链接。我说,我上传到“It's All Widgets”了。我印象非常深刻。而他在这 10 天里什么也没做成。而我能够构建应用,将其上传到“It's All Widgets”,并与他分享。他甚至能够访问我的代码库并下载 APK。这就是我进入 Flutter 世界的方式。

从那以后,这是一段有趣的旅程。我认为在 12、13 个月后,我收到 CodeMagic 某人的消息。他们说,哦,你分享了所有这些 Flutter 提示。你有没有兴趣加入这个职位,也就是 Flutter triage 的职位?他们分享了一篇文章。我读了这篇文章。文章说,Flutter 有这么多问题,谷歌需要

一些资源来查看每周来自数百用户的这些日常问题。这对我来说非常有趣,因为 13 个月前,我刚开始学习 Flutter。现在,我正在考虑对 Flutter 代码库中的问题进行分类,在那里我将在不同的平台上重现 Flutter。我申请了,就像我说的那样,我同意了,然后我得到了这份工作。

我成为了 Flutter 成员。我可以访问代码库,在那里我可以关闭问题,在不同的平台上对问题进行分类。我做了这件事。我还引入了一些流程,我们在不同的渠道上测试错误。当时有四个渠道,稳定版、测试版、开发版和主版。

我得到了几台设备,iOS、Android、MacBook。我有一台 MacBook 来测试问题。Windows、Linux。我最终还有一台 iPad 和一台 Raspberry Pi。所以我正在所有这些设备上运行 Flutter 代码来谋生。我不敢相信我当时只是在考虑使用 Flutter 制作应用,而我现在却在 Flutter 本身工作。

这就是我进入 CodeMagic 的方式。我对这个职位非常满意。这是发生在我身上最好的事情。因为我不只是选择 Flutter 来构建应用或工作,我还在 Flutter 本身工作,并能够从幕后看到 Flutter,并测试那些

人们在几个月后出现时才能测试的功能。因为我在开发版和主版上运行,所以我能够立即测试新功能、新小部件和新功能。而且我为此获得了报酬,所以这很有趣。另一件让我感兴趣的事情是,还有一些人也贡献了代码,对代码库进行了更改,而他们不是谷歌团队的成员。

我看到一个问题,Android Studio 有一个新的 Android Studio 版本,JetBrains 更改了他们声明 Android Studio 元数据的方式。他们将其移动到另一个文件中,并使用略微不同的语法

因此,Flutter 无法检测设备上安装了哪个 Android 版本。有人报告了这个问题,我想,这有多难,数据在哪里。我可以自己去找到这个元数据并修复它。所以我花了大约 30 分钟或一个小时查看源代码。我找到了源代码。我修复了源代码。

然后我能够验证 Android Studio,它检测到了版本。这真的很令人满意。我想,哇,这太棒了。我实际上也可以贡献并修复一些东西,而不仅仅是重现它们。我提交了一个 PR。我添加了一个小测试。我只是复制了其中一个现有测试,我经常向许多贡献者提供建议。我说,每当你想贡献时,不要考虑

复杂的测试,复杂的指令。尽量使其尽可能简单。你可以做到这一点的一种方法是关注问题,然后复制其中一个测试,因为 Flutter 有数千个测试。因此,如果您正在考虑进行测试以使您的贡献尽可能快,您可以找到类似的东西并复制它,然后

修改它以适应您的修复。所以我复制了一个测试,然后提交了 PR。它在 10-15 分钟内就被合并了。每个人都能够比稳定版更快地检测到 Android Studio 版本。通常人们在稳定版渠道上稳定后才会尝试新的 Android Studio。这需要几个月的时间。所以我甚至在该错误影响到人们之前就能够修复它。

当新版本发布时,人们会说:“哦,这已经可以用了。”这就是我所知道的,我知道这是一个非常长的答案,但这对我来说非常特别,因为 Soul Widget 也参与其中。多年来,我一直很想念常规剧集。

哇,这是一个令人惊叹的故事。我很感动你从一开始就一直在收听并支持该网站。非常感谢你。有时,你知道,你录制播客,你实际上并没有收听它。所以很高兴知道有人会收听。而且一直都很好。我很抱歉,我认为剧集的发布频率并不规律。我现在正尝试每季度发布一集新剧集。所以有一定的节奏和时间。录制和编辑需要一些时间。

这是一个令人惊叹的故事。听到你如何从考虑 Flutter 到直接在 Flutter 上工作并管理问题,这真是太酷了,我相信这对于学习 Flutter 和了解人们遇到的问题来说是一次很棒的经历。你最喜欢 Flutter 的哪些方面?我认为最大的方面,就像每个人都开始了解 Flutter 时一样,是热重载。

它有多快,多迅速。即使在 2018 年,它也感觉像魔法一样。当你编辑源代码时,立即在屏幕上看到你的代码,这绝对令人难以置信。我认为这仍然让我感到震惊,即使我们有更快的机器和更快的应用开发方法。

另一个我至今仍然喜欢的方面是能够在每个平台上运行相同的代码。当你长时间使用 Flutter 时,你会感觉它对你来说已经很正常了。它感觉不像什么疯狂的事情。

但我没有看到任何其他框架像 Flutter 那样简单。你可以有一个包含复杂应用的单个 main.dart 文件,你不需要修改一行代码,你就可以运行该应用,它在 iOS、Android、桌面、Windows 和 Web 上看起来都一样。我仍然认为这是 Flutter 最好的方面之一。

你几乎可以在任何地方获得相同的体验,而只需进行很少的更改。事实上,你甚至可以运行 flutter run --all,这是一个将在所有连接的设备上运行 Flutter 应用的命令。因此,如果你打开了 iOS 模拟器和 Android 模拟器,然后运行此命令,你的应用将在 Mac 移动设备上运行。它将同时运行所有设备。所以它仍然令人惊叹。

这真的很酷。我不知道这个命令。你是否看到过创建的问题中存在一些模式,你认为可以更改 Flutter 中的这些模式以改进它?显然,由于 Flutter 运行在所有平台上,因此它在每个平台上都不是完美的。我认为这是 Flutter 得到的一个污点,它在 Web 上速度很慢,或者在桌面上不太易于访问、易于使用。在移动设备上,它可能还有一些其他问题。

但它的优势也是它的劣势,因为它运行在所有平台上。并非所有东西都是完美的。在我看来,它不必完美。

有一些方法可以使其在这些平台上更好。如果你的应用只在桌面上运行,你可以有一个团队专注于该平台并填补这些空白。有一些很棒的第三方包。有一些团队正在构建自定义解决方案,以使其桌面应用尽可能好。我认为这是我们作为工程师可以解决的事情之一。但是

但这并不是框架中内置的东西,我完全理解。这是不可能的。不可能做到这一点。这是一个很好的观点。然后我知道从 X 上关注你,你在 Material Design 方面有很多经验。我只是想了解你对经常出现的一个问题的感觉,即人们希望它成为一个单独的包。你认为这是否合理?你喜欢这个主意吗?你认为应该考虑其他方法吗?

这是一个非常有趣的问题,也是一个与我非常接近的问题。自从我的 triage 角色之后,我成为了一名全职贡献者。事实上,我大部分时间都花在了 Material Design 上。所以我积极地为 Material Design 做出贡献,构建新功能,修复错误。有时你会构建一些东西或修复一些东西,但

在框架内部非常重要。用户需要几个月才能获得该功能,因为 Material Design 是框架的一部分。框架有一个季度发布周期。你每年大约有四个主要版本。假设我,

现在合并了一个新功能或修复了一些东西,并且在接下来的两个月内有一个主要版本,那么用户需要两个月才能获得该功能或错误修复,如果你依赖框架中的 Natalya 设计来构建你的应用,这可不是什么好事。

在某些情况下,我们可以将该问题升级为热修复,但热修复也有权衡之处。有时,修复的更改太多,如果直接进行热修复,会产生很多回归。

所以这就是为什么这个话题非常非常复杂。这个问题没有直接的解决方案或直接的答案。从理论上讲,将其作为一个包听起来非常好。对于外部用户来说,就像我想要这个,它会无限地提高我的工作流程的质量。

但是 Flutter 的构建方式是它严重依赖 Material Design。例如,当你创建一个新应用时,它是一个启动模板。它内置于不同的组件中。文件是链接的,源代码是链接的。核心组件,至少在几年前,

没有 Material Design 提供的所有功能。其中一个主要功能是 Material state,它为属性提供状态,你可以在其中定义禁用、启用、悬停。

以及任何这些属性在 Material Design 中的选择按下状态。这是主库的一部分,即使它不必是。但它已从 Material Design 移动到核心组件。所以我认为我们正在看到这方面的进展,我们不必保留这些基本的东西,例如

哪个状态颜色状态作为 Material Design 的一部分,但我们仍然需要很长时间才能将 Material 变成外部包,我们不能直接移动代码,这并非那么简单明了,但我认为

由于这一挑战,出现了一整套第三方包,它们正在解决其中的一些问题,尤其是 ShadCN。

UI,这是一个非常流行的包。我甚至看到 Flutter 团队的工程师以某种方式使用这个包。这个包不仅允许你在 Material 之外构建 UI,而且在许多方面也使事情变得更容易,这在框架中是不可能的,除非破坏大量代码。所以正如你从我的回答中看到的,没有直接的框架。

一个步骤或一个过程,你可以神奇地将 Material Design 包变成 Material Design 库变成一个包。在我看来,从长远来看,这可能是可能的,也许在几年后,当我们移动一些这些核心内容时。但就目前而言,我觉得有一些方法可以减少对 Material 的依赖,并使用 ShadCN。甚至 Cupertino

并自己构建自定义解决方案。特别是由于 Material 3 在框架内部发生了很大的变化,我也作为 Material 3 贡献者工作过,我看到人们依赖不同的设计风格,不同的设计系统而不是 Material 3,因为它看起来不同。

与其他应用非常相似。这是他们抱怨的事情之一。所以我感觉由于 ShadCN 和其他包,人们至少在短期内会更好。这是一个很好的答案。你对刚入门的人有什么建议吗?我会说,不要花太多时间学习框架的每个方面。这适用于任何框架。

例如 iOS 开发、Android、Flutter。我做过。我花了太多时间试图学习一切。边做边学。构建。当你构建时,你的技能就会提高。Flutter 可能是最容易上手的框架之一。你花在那些对你的工作流程没有太大价值的事情上的时间越少,

你就越好。所以当你开始时,只关注构建,并关注它带来的价值,而不是成为专家。绝对同意。你还想补充或推广什么吗?我想分享一下,我有一个巨大的、巨大的,我想感谢 Flutter 社区中所有人的支持和

对 Flutter 的贡献。我因在 Flutter 代码库中作为贡献者所做的工作而获得了许多认可。我无法充分感谢大家。Flutter 社区的人们非常友善。每当我前往任何有 Flutter 开发人员的城市时,他们都会见面,我们会一起聊聊 Flutter。Flutter 有我所认识的最友善的人。我所有的朋友,我的大多数朋友都是 Flutter 朋友,而且

我感到非常感激能够在这个科技领域中,人们不仅仅是在做他们的工作。他们超越了工作来互相支持,互相帮助。你可以与社区中的任何人进行长时间的交谈,并感觉你已经认识他们很久了。这对你是正确的。对社区中的任何人都适用。

当你不仅仅是在考虑工作,而是在考虑技术和你的工作如何影响你的生活时,我认为 Flutter 是最好的地方之一,在那里你可以不仅仅是