We're sunsetting PodQuest on 2025-07-28. Thank you for your support!
Export Podcast Subscriptions
People
M
Mike Rydstrom
Topics
Mike Rydstrom: 我拥有丰富的编程经验,从早期的Commodore 64到大型国际公司的企业系统开发,再到如今专注于Flutter的Material Design主题定制。我开发了FlexColorScheme、FlexSeedScheme和FlexColorPicker等多个Flutter包,旨在简化Flutter应用的主题定制和颜色选择过程。FlexColorScheme提供了一个可视化的主题配置工具Themes Playground,方便开发者快速创建和调整应用主题。FlexSeedScheme则提供更精细的Material 3颜色方案生成控制,而FlexColorPicker则是一个功能强大的颜色选择器。在状态管理方面,我推荐轻量级的方案,如ValueNotifier、ChangeNotifier和ListenableBuilder,对于复杂场景,可以使用Signals。最后,我目前在HypeHype公司工作,这是一个基于Flutter的移动优先游戏平台,拥有35万行Flutter代码。 Philip Korn: 作为主持人,我引导Mike Rydstrom分享了他的职业经历、技术选择和开发经验,并对他的开源项目和Flutter社区贡献表示赞赏。

Deep Dive

Chapters
Mike Rydstrom, also known as MaterialMike, shares his extensive programming background, starting from the VIC-20 and Commodore 64 era through various languages and systems like Pascal, C, Visual Basic, and COBOL. His academic journey involved a master's degree in process engineering and computer science, leading to roles in management within multinational corporations.
  • Early programming experience with VIC-20, Commodore 64, and various languages.
  • Master's degree in process engineering and computer science.
  • Management roles in multinational corporations, including IT infrastructure and business systems development.

Shownotes Transcript

嗨,感谢收听。这是“全是小部件的Flutter播客”。我的名字是Philip Korn。每一期节目,你都有机会与Flutter社区的另一位优秀成员交谈。在本期节目中,我们非常幸运地能与Mike交谈。欢迎。谢谢,Joao。很高兴能来到“全是小部件”播客。我知道我们已经讨论了很久,我想,也许是几年了,我应该来聊聊。所以很高兴来到这里。

时间太久了。你完全正确。我一直想和你谈谈。你能分享一下你的背景吗?当然可以。我的背景可能与人们想象的有点不同,因为我开始编程是在VIC-20和Commodore 64流行的时候。

后来我转向CPM86计算机编程Pascal,然后变成了我在PC上使用的Turbo Pascal,之后又使用了C、Visual Basic、Delphi和一点点C++。所以那是很久以前的事了。我可能是Flutter社区里年纪比较大的人之一。

所以,在大学里,当我刚开始的时候,我实际上是在一家软件公司做过暑期实习生,做了很多关于数字Vax VMS系统的编程工作。在大学里,我们也用过它,但主要是Pascal和Fortran,还有一些Modular。但作为那家公司的实习生,我连续三个夏天都在用COBOL编程,难以置信吧。

所以那是很久以前的事了,但它仍然很强大。该系统被城市和市政当局用于电力和区域供暖的开票。所以它真的是古老的东西,也许典型的Flutter受众甚至都没有听说过。有点好笑。

我最终获得了过程工程和计算机科学的硕士学位。所以我的论文是关于发酵过程的在线监控和建模。我们在构建过程中使用了许多有趣的工具。首先,它就像一个用C和LabWindows编写的原始DOS应用程序,LabWindows是LabVIEW的前身,现在可能仍然存在。

但后来我用Visual Basic重写了它,并由用C编写的几个DLL和许多不同设备(实验室设备和监控设备)的串行接口应用程序支持,以获取在线数据。令人难以置信的是,这些也是用Visual Basic编写的,而且效果非常好。是的,这非常令人兴奋。该应用程序的UI在当时相当先进。我们还做了一些疯狂的事情,比如实验人工神经网络,这……

而这是很久以前的事了。我们只是使用简单的反向传播来训练一些非常简单的网络用于建模部分。是的,这在当时非常新颖。而且可能没有人想过它会有什么用。几十年来,它确实没有用。但现在它却很热门。所以看到你最终做了这件事很有趣。

我曾经尝试用Prolog重写人工神经网络(ANN)的简单反向传播,但这没有人能弄明白。甚至指导老师也不行。我记得我们设法让前向传播工作了,但是……

所以作为一个背景,这很有趣。一个有趣的小花絮是,我在美国为一家芬兰-美国合资公司完成了我的硕士论文。所以我花了三个月的时间在纽约州罗切斯特,三个月在旧金山。我在那里完成了发酵监控和建模系统实验部分的工作。

后来我也为那家公司工作了很多年,他们把总部搬到了帕洛阿尔托,我最终去了很多次。我认为他们还在那里。它离斯坦福大学不远,离惠普也很近。它离谷歌总部也不远,但那是很久以前的事了,谷歌甚至还没有成立。你能相信吗?是的。

所以我有了这个相当书呆子的背景,我最终转向了大型国际公司中更多的管理职位,从事管理IT基础设施、公司业务系统、大量的ERP、CRM实施及其在全球范围内的部署等工作。所以我经常出差,我还管理内部定制业务系统的开发,主要涉及后端系统的Web前端和集成。

他们有订单履行系统、按订单制造流程和备件交付系统,这在当时是一个大家都在做和致力于供应链优化的热门新事物。

所以是的,那时我已经很多年甚至几十年没有编程了。当然,它是我的爱好,我有时间的时候会摆弄一些东西,但更像是控制器和嵌入式系统。所以我也有过编程工厂自动化系统的一点经验,至少在芬兰流行的一种叫做Valmet Dramatic XD。它……

编程非常有趣,因为你基本上是通过绘制AutoCAD图纸来编写代码的。非常独特。无论如何,我做了所有这些,你知道的,IT、ICT经理、副总裁、CIO职位多年。最终我所做的大部分事情都是PowerPoint和谈话,让大家朝着管理团队或董事会想要的方向前进。或者至少,你知道的,反正就是本季度的目标。

所以是的,这是一次有趣的经历,但它并不十分技术性,也不太有创造力。几年前,我加入了一家名为Eneron的小型初创公司。在那里,我们正在为物业经理或大型物业组合的所有者(通常是商业和公共建筑)构建能源管理系统。

这是一个基于LAMP堆栈的SaaS系统。人们可能更熟悉这种东西,因为它是Linux、Apache、MySQL、PHP。我们外包了合同开发人员来构建系统。所以在那个时候,我还负责托管、管理外包开发。但是,最终我们还是把这家公司卖给了一家更大的运营商。但在此之前,我一直都在寻找……

新的新兴技术堆栈来重写这个基于LAMP的解决方案。所以我查看了各种Web堆栈,但我从来都不是Web开发的粉丝。实际上,想想看,这是我决定转向更多管理角色并放弃编程多年原因之一。Web正在进入,在其中编程让我很痛苦。所以我不喜欢你为它编写代码的方式,而且……

在我看来,这不是一个非常令人愉快的开发体验。所以我很高兴把它留给那些喜欢它的人。然后我想我们正在进入Flutter,因为这就是我最终听到Flutter的原因。我认为这大约是在你开始研究Flutter的同时,Hillel,因为我记得在Flutter的早期,我在Twitter上看到你关于发票NEMEON的信息。

哇,这是一个非常有趣的背景。我也来自Web背景,并转向了Flutter。我喜欢一切的顺序。事情开始变得有意义了。这是一个经过深思熟虑、精心设计的系统。那么你是如何参与进来的呢?你听说过Flutter,然后你只是开始摆弄它,玩弄它吗?是的,我也是这样开始的。就像你说的那样,我来自非常有序和结构化的编程,在……

小型计算机和部分大型机以及这种环境中,而Web总是让我感到沮丧,这就是我放弃它的原因,但后来我作为这家公司的一部分,开始关注一些技术,我们可以最终将LAMP堆栈上的东西迁移到……所以我……我认为有很多东西,我发现了很多不同的Web框架,你知道的,它们承诺更令人愉快的开发体验等等,但没有一个真正让我满意,而且……

然后在2018年的某一天,我偶然发现了Flutter。我认为是在beta 0.4或0.5版本,这听起来非常早,但1.0版本实际上是在2018年12月发布的。所以它并不是Flutter列车上的早期乘客,但无论如何是在2018年。所以我正在寻找一些可以用来重写他们拥有的系统的东西,而且……

当然,到那时我已经很久没有编程了。所以我只是说,好吧,我只是尝试评估一下,开始用它构建一些东西,并学习如何使用它。我发现它……

非常令人愉快的工作。Dart语言非常好,Flutter框架也非常好。它确实给了我一种和你第一次使用Visual Basic构建Windows应用程序时一样的感受。就像,哦,这太棒了,它只是点击一下。没有UI工具来构建用户界面,但是声明式编码和样式用于用代码绘制UI的方式以类似的方式点击。

所以是的,这是一种非常令人兴奋的感觉。但当然,我已经很多年没有编程了,所以我花了好长时间才熟悉所有这些年来我没有自己编程而错过的东西。所以这有点困难,但仍然很有趣。我更像是在做一些额外的事情来提高速度。

所以,是的,重新开始编程并再次感受到它的创造过程真的很有趣。我真的很享受。当然,为公司信息系统战略演示准备PowerPoint可能很有创造力。好吧,也许不是。有一个关于PowerPoint的Dilbert漫画,死于PowerPoint中毒是有原因的。所以,是的。

但是,你知道的,至少有机会环游世界,我想,大概有30到35个不同的国家,我为之工作了几年的那些不同的公司都在那里运营。所以这不是什么不好的经历,但重新开始通过编程来创造事物真是令人耳目一新。

酷。然后在Flutter社区中,你以对Material或Material Design的热爱和专业知识而闻名。是什么让这一切开始的?是什么让你如此感兴趣?是的,这可能也是一个有趣的故事。我在Flutter社区中几乎被称为Material Mike。我认为这是一个充满爱意的名字,而且是一个有趣的名字,它是在我最近的一次演示中开始的。

在Volt的一次本地聚会上,我认为是Shatai说,哦,它就像Material Mike一样,就是这样开始的。在那之后,我实际上在开始使用Flutter之前就已经熟悉了Material Design,所以我对它有点了解,而且我熟悉它,因为我在我查看的许多Web框架中都看到过它,而且……

它看起来不像当时许多Web设计那样炫目。所以当时,当我开始关注它时,是bootstrap及其后续产品正在兴起,而Material看起来有点笨拙。

所以当我开始使用Flutter时,当然,我想看看它是如何实现的,开始查看它周围的代码。我很快就对在Flutter中对应用程序进行主题设置的难度感到沮丧。所以我有点想看看我是否可以设置一些简化的方法来快速设置样式并获得Flutter应用程序的Material主题,使其看起来和感觉更像我想要的那样。

在早期的Material 2主题中,样式实际上比现在更受限制和更有限。但是人们,我想,抱怨较少,只是接受了它。Flutter中的Material 3实现实际上比Material 2实现更易于主题设置和设置样式。

然而,这其中有一点需要注意,因为Material 3带有许多人认为更武断的默认值。有些人甚至称之为令人讨厌的默认值。因此,将Material 3默认值定制得比Material 2更与平台无关需要付出更多努力。所以这也是人们可能还没有习惯的东西。

所以我知道在社区中你正在开发Flex Color Scheme包。你能解释一下它是如何使用的吗?是的。Flex Color Scheme就是从我的一点沮丧和我想让它更容易为自己使用,然后分享我创建的东西而产生的。所以……

Flex Color Scheme是一个用于制作Material主题数据的包。它一开始并没有真正专注于所有这些。我的第一个版本专注于正确设置所有颜色方案颜色并以正确的方式将它们应用于较旧的Flutter版本,以使浅色和深色主题看起来都很好。正如它在当时使用Material 2设计时实际上打算的那样,

那时,很少有人知道Material主题数据的默认浅色和深色构造函数实际上并没有按照颜色方案颜色在组件和表面颜色上的使用方式创建正确的Material 2设计主题。尤其是在暗模式下,默认构造函数非常糟糕。因此,Flex颜色方案的早期版本只是专注于……

使所有这些颜色映射更正确,并且默认情况下更好,就像它原本打算的那样。这就是该包也获得Flex Color Scheme这个名称的原因。从一开始,它就带有许多预定义的颜色方案,你可以选择、尝试和修改……

只是为了方便玩弄不同的样式。因此,如果你是一个独立开发者,你可以自己决定你想要什么,喜欢什么,以及你想要应用程序和颜色的外观,那么很容易选择几个并尝试Flex Color Scheme中的不同样式。所以我认为……

就是这样开始的。但在第一个版本后的几个版本中,我还开始提供许多方便的主题数据属性来实际制作组件主题的自定义样式。所以第一个例子之一是,例如,通过单个属性在所有形状上设置全局边框半径。所以……

所以这是使用普通主题数据时非常繁琐的事情。假设你想要在设计中的所有按钮类型和形状上设置边框半径。使用Flex Color Scheme的一个属性,你可以修改它。使用普通主题数据,你必须在存在的每个组件上设置该形状边框属性。这非常繁琐。当然,这实际上是Flex Color Scheme所做的。

所以今天,Flex Color Scheme更合适的名称应该是Flex主题数据,这更符合它的功能。我有一个简短而密集的定义来解释Flex Color Scheme是什么,那就是它是一个……

超级高级的主题数据便利工厂。所以最终,它会生成一个常规的Flutter主题数据对象,当然,它会使用组件主题为你的Material应用程序提供其默认颜色和样式以及所有Material组件。你可以使用普通主题数据完成Flex Color Scheme所做的一切,但这需要1000到3000行代码才能重现它所做的工作。

所以它消除了很多繁琐的工作。多年来,Flex颜色方案……

发展出了一个名为主题游乐场的配套应用程序。对于许多刚开始使用Flutter的开发者以及不想自己处理定义Flutter主题数据混乱的独立开发者来说,游乐场才是真正的杀手锏。

所以一开始没有,但它从示例5发展成为现在的样子。然后,当然,我们可以问,什么是主题游乐场?好吧,那就是你所见即所得的Material应用程序主题配置器。

它的作用是输出一个Dart文件,其中包含与你在游乐场中为Flex Color Scheme主题数据工厂API视觉上创建的主题配置相匹配的主题配置。你可以将此文件作为文件复制粘贴到你的应用程序和Dart文件中,并将它定义的主题数据用作你的……

应用程序的主题,以及你在这个游乐场中设计和定义的所有内容。这就是你的Flutter应用程序(Flutter Material应用程序)中的应用程序和所有组件的外观。所以游乐场本身非常互动。所以任何主题切换、使用更改和修改也会更改游乐场的……

主题本身,我的意思是,当你这样做时,应用程序本身会进行主题设置,你切换并尝试游乐场中的主题,所以应用程序本身会将此主题应用于自身,但它还包含许多小型模型,展示了你可以显示在不同设备模型框架中的UI,以便你可以看到当你使用此主题时,它在移动应用程序中的感觉……

所以这也是,它还会交互地生成你正在设计和制作的主题的API配置代码。你也可以将代码视图放在一边,看看它在切换开关等操作时生成的API是什么,以便稍微了解一下它的作用。但关键是……

主题数据具有非常庞大和复杂的API,即使没有游乐场的帮助,Flex Color Scheme可能也难以使用。但是有了游乐场,你就不需要了解它了。你只需要切换和更改周围的东西,当它看起来像你想要的样子时,你只需复制代码即可。你有了应用程序的主题。

我喜欢使主题相当与平台无关,你也可以做我们做过的事情,例如制作平台自适应主题,以便你可以为……

Android应用程序设计一个设计,如果你想在你的Android应用程序中获得更像原生Android外观的Material 3外观,你可以在游乐场中做到这一点。但让它适应,以便当你将应用程序运行在任何其他平台上时,它看起来更与平台无关。你可以让它……

看起来更像iOS的Cupertino风格,有点受到它的启发。或者你可以让它看起来像ShardCN,这在Web社区设计中非常流行。但当然,它仍然是Material,但是大多数人可能在以这种方式设置样式时甚至不会认出它是Material。所以是的,所以它是一个……当然,该包的一大助力是它也……

几年前成为Flutter最受欢迎的包。所以获得这个标签是一个非常惊喜的事情。所以这当然是一些让它更知名和更受认可的事情。

我自己也用过它。我发现它对于可视化事物以获得更好的理解非常有帮助。我认为就像你来自CSS背景一样,一些全局更改的难度很有趣,而听起来你正试图让它更简单一些。是的,我经常听到这个。我没有很强的CSS背景。我的意思是,我知道它的基础知识,但我认为对于那些真正来自该背景的人来说,对Flutter应用程序进行主题设置非常令人沮丧。每个使用它的人都告诉我。所以当然,

很高兴你有一个可以帮助他们的工具,但我认为它也帮助了很多独立开发者,你知道的,他们想要发布他们的应用程序,他们想要……你知道的,让它看起来不错,他们没有时间去学习如何调整Material主题中的所有细节以使其看起来像他们想要的样子,所以你可以只使用游乐场进行实验和调整,直到你得到它,而且我有一些……

预先制作的设计,你可以点击它们并快速从中获得一些不同的样式。当然,它带有,我不知道,是60种不同的预构建颜色方案,你可以修改所有这些方案或使用任何这些方案作为你自己的颜色的基础,只需复制它并修改其中的几种颜色即可。如果你发现一些接近你喜欢的颜色,你也可以使用它作为你自己的颜色方案的基础。

所以是的,它非常方便。我甚至不再尝试在没有它的情况下对应用程序进行主题设置。最终,它只是生成主题数据。它确实有局限性。但是如果你遇到这些问题,你仍然可以将其作为基础并进行一些修改,使用主题数据复制并修改它不会为你做的事情,因为它无法完成主题数据API可以完成的所有事情。

它的重点是做很多事情,这些事情要么非常繁琐,需要时间,而且人们经常想要修改。然后你创建的另一个有用的包是FlexSeedScheme。它与Flutter的内置选项相比如何?是的,这是一个关于FlexSeedScheme的好问题。它实际上是源于FlexColorScheme的。

所以flex seed scheme实际上就是它的意思。它只制作颜色方案。它用于解决种子生成的色彩方案中的一些限制。

所以在Flutter中,你有一个来自种子的颜色方案构造函数来制作Material 3颜色方案。Flutter中的当前颜色方案包含46种颜色。使用深色主题,你会得到92种颜色,你必须定义这些颜色才能获得完全定义的颜色方案。手动执行此操作非常繁琐。所以当我开发Flutter时,

Flex Color Scheme,我还致力于开发算法以进一步开发和采用这种种子生成的色彩方案。在Material 3中存在之前,我就在为颜色方案制作种子生成的色彩方案,但使用的是其他算法。这些算法仍然存在于Flex Color Scheme中,但是Material 3附带的基于种子生成的算法……

被提取到名为FlexSeed Scheme的单独包中。与普通版本相比,这个版本最大的区别在于,你可以更好地控制你想要种子生成的色彩方案最终的样子。使用内置的来自种子的颜色方案,你只能从一种颜色方案中生成种子颜色方案。

其余的将有点像算法所说的那样。过去甚至只有一个变体,但现在有更多变体了。所以你过去只能得到柔和色等等。而且没有办法解决这个问题。但现在至少有一些对象更明亮一些,但它们仍然相当奇怪。所以,但是使用FlexSeed Scheme,你有一个名为SeedColorScheme from Seeds的API,你可以在其中为……

每个在颜色方案中使用的色调调色板提供单独的种子颜色。你可以为你的主要、次要、三级、气球、表面和表面变体调色板生成提供单独的种子颜色。它们都可以使用自己的种子颜色。但这不仅仅是这些。你还可以改变……

在生成调色板时应使用多少来自种子颜色的色度。你可以提供最小-最大色度,或者你可以告诉它实际使用来自种子的色度。而且……

为了使其更高级,如果你愿意,你可以覆盖生成的色调调色板的默认颜色映射。这意味着在它进行这些生成的色彩方案的映射时,调色板中的哪个色调应该与哪个颜色方案颜色匹配。这听起来可能非常复杂,但实际上非常简单易懂。

在仍然能够控制算法及其最终外观的同时,可以使用种子生成的便利性。使用普通版本,你没有这种自由。该包仍然使用Google的HCT色相色度色调颜色空间,这是一个他们实际上为Material 3设计发明的新颜色空间。

它还使用Flutter SDK也直接依赖的原始Material颜色实用程序包的稍微修改过的版本。但我必须修改它才能使其摆脱一些约束。修改它的另一个原因也是Flutter固定了它使用的Material颜色实用程序的版本,这使得我很难……

制作一个可以在所有Flutter通道上使用的Flex Color Scheme或FlexSeed Scheme包,因为Flutter经常在其稳定版、测试版和主版本中固定不同的依赖版本,因此如果没有依赖错误权限,你就无法依赖该包本身,即MCU颜色实用程序。

所以这是我修改它的第一个原因。仅仅是因为我无法一直处理来自它的固定依赖项的混乱。但后来我还添加了一些功能。其中一项功能是Flutter颜色方案现在也附带了这些方案变体。我也提供这些,但它也可以使用多个种子颜色提供这些。你无法使用MCU插件做到这一点。

它的原生包。所以是的,但这最终做得很好。当你使用Flex Color Scheme时,你会获得内置于Flex Color Scheme中的FlexSeed Scheme的所有好处以及游乐场的便利性。你可以在那里使用它。你不需要理解你在做什么。你可以只使用预先制作的枚举来选择一些不同的东西,然后看看它是什么样子。并且有一些你可以尝试的切换开关,以使颜色方案看起来像你想要的样子。

但是如果你正在制作你自己的主题数据,并且你正在自己进行所有主题设置,并且你拥有所有设计师来完成这项工作,但是你仍然需要一个颜色方案并想要定义它,那么当然,这是一个只生成种子生成的色彩方案的包。你总是可以说我可以用手工编写这个颜色方案……

是的,你可以,但是你必须非常深入地了解这46种颜色方案中的所有颜色角色以及它们的内部关系应该是什么。否则,你最终会得到……你知道的,颜色上的阴影和色调是错误的,因为它们与它们的设计意图不符。

如果你想在配色方案上大胆尝试,你可以这样做。我的意思是,你可以按照任何你想要的方式进行映射,但是你必须对所有组件主题进行大量的重新映射,并以一种从你的角度来看有意义的方式使用你放入配色方案中的所有颜色。这样做最终可能会造成很大的混乱。所以我并不推荐这样做,但如果有人想这样做,完全是可以做到的。

但总的来说,我建议使用种子生成配色方案。如果你对默认算法生成的方案不满意,可以看看FlexSeed方案,尝试一下它的算法。当然,为了获得你实际的品牌颜色(如果你有那些重要的品牌颜色),对于种子生成的配色方案,你必须固定你的主要品牌颜色。因此,通常情况下,如果你将你的主要品牌颜色固定为主色,

在浅色方案中。这通常是预期的颜色。也许你有一些次要颜色和第三颜色。你也可以使用它们。但在暗模式下,大多数公司和品牌都没有正确的暗模式主色。

因为主色通常需要饱和度低得多,这样它才不会与暗色冲突太多。品牌颜色通常设计成在白纸上打印时看起来很好,而不是在黑纸上。

但你仍然可以将主色放入你的暗色方案中。你只需要把它放在主容器上。它在那里非常合适。通常情况下,你在浅色方案中使用的颜色也可以放在暗色方案的主容器中。然后你需要一个更浅的阴影作为主色。你也可以使用它的种子生成版本。

然后,如何使这些颜色看起来漂亮,有很多不同的方法,使用FlexSeed方案可以避免过多的柔和色调,这样你仍然可以得到,你知道,明亮和饱和的颜色,甚至其中一些提供更像糖果般的光泽颜色等等。所以你可以用它做很多事情,并且

人们不喜欢或不同意Material配色方案的另一个原因是,默认情况下,它会创建所有这些带色调的表面以及所有这些新的表面。你知道,我们有表面容器,低、高、低西颜色。

明亮、暗淡、高、最高等等,它们往往会从你用来播种的主色中获得一点色调,这是设计使然,但使用Flex Seed Scheme,你不必这样做,你可以使这些表面颜色完全灰度,或者你可以大大降低色调

通常在浅色方案中,你不需要在表面颜色上添加很多色调。在暗模式下,你可以多加一些,它仍然看起来很酷。但在浅色模式下,如果你在表面的颜色色调上调高,它很快就会看起来很糟糕。在我看来,Material 3配色方案的生成在这方面有点过头了。

但这只是我们想要的一种差异。但我希望让人们自由地设计他们想要的东西,而不是将他们锁定在某种程度上,比如说,这就是它是什么。Material 3仍然允许你做所有这些,但你必须付出比大多数人可能准备付出的更多努力。这就是我最终制作这些工具的原因,以便……

人们可以用更少的努力做到这一点,并且不会受到内置配色方案再生中的限制。所以,看看受欢迎程度,FlexSeed方案并没有很多赞,但是FlexColor方案有……

在pump上获得了2800多个赞,所以从这个意义上说,它是一个相当受欢迎的包,但flex seed scheme却鲜为人知,但它在下载量上有所更新,所以flex seed scheme每月仍然有超过30万的下载量,所以显然有人在使用它,太棒了,然后你也很忙,很多包,最后一个我想介绍的包是你还创建了flex color picker,它是如何设计的?

这实际上是我在Flutter中编写和发布的第一批东西之一,即effects color picker。那时我只需要一个颜色选择器,它可以让我选择所有内置的Material颜色,并创建自定义调色板,以便我可以在应用程序中选择主题等等。我还添加了……

一种HSV色轮,你可以在其中选择自由颜色等等。为此有很多颜色选择器,但我对它也有另一个要求,那就是我希望能够非常灵活地决定它提供的各种元素的哪些部分想要在不同的用例场景中使用。另一件事是我想要一个良好的复制粘贴体验,从颜色选择器。

这样我就可以有一个网络颜色代码,通常是一个十六进制RGB颜色代码,甚至是只有三个字母的简短代码,你可以在web2上使用,只需复制粘贴到其中。不仅仅是为了将它复制粘贴到一个字段中,而是你可以在那里复制粘贴它,而是当它聚焦时,它实际上可以将它复制粘贴到选择器中。它也能做到这一点,

使用键盘快捷键,这样你就可以使用ctrl c和ctrl v以及ctrl和命令command c和command v在windows上使用,这些是我在尝试过的许多颜色选择器中缺少的一些新东西,所以我只是自己制作了一个,它也相当受欢迎,它每月也有近30万的下载量,但是

所以它并没有所有操纵不同颜色空间中颜色的不同方法。这就是它今天有点不足的地方。我可能会回来添加它,并可能使它更受欢迎。但是

我主要可能会添加它,因为它也是我想在颜色选择器中拥有的东西。也许还有一个吸管,可以实际吸取应用程序中的颜色。当然,你不能将光标移到Flutter窗口之外,所以你会非常受限于此。所以我不知道它到底有多有用,但无论如何,如果不进行一些本地课程,你都可以做到这一点。

但是,是的,它确实有一个独特的特性,那就是它还会生成你选择和选择的颜色的Material树色调调色板。所以你实际上可以看到这些调色板是什么样的,但你不能真正调整这个调色板。这可能也是我想添加的另一件事。

但是,是的,我自己在我的大多数应用程序和工具中都使用它,当我想要选择和修改一些颜色时。当然,它在Teams Playground和许多我制作的其他东西中都有大量使用。我也看到它被用于已发布的应用程序中。当你认出“哦,有人在使用我的选择器”时,这总是很高兴看到的。太酷了。绝对的。作为一名开发者,这是最好的事情,对吧?人们实际上使用了我们构建的东西。

是的,我看到我在一些YouTube直播中,周三的视频直播或类似的东西的聊天中。人们在那里看到我,他们说,“嘿,我们看到我使用你的,我使用你的Flex Color Scheme包等等。我们为此有大约5万次下载。它被用在其中。并且

所以,我知道它也被用于许多流行的应用程序中。我至少在文档中提到了一些,我将其作为用例提到这些应用程序使用了Flex Color Scheme。看到它得到了一些有益的用途,你为此付出的努力,这总是很高兴的。最终,我只是创建它,因为,你知道,这是我想解决的事情,你知道,而不是反复地自己做。但是,你知道,为什么不分享呢?至少对我来说,这就是重点。

改变话题,在Flutter社区中经常出现的一个问题是状态管理。你对如何构建你的应用程序有什么特别的看法吗?每次在驼峰中,都有周三的播客,YouTube直播也是如此。

是的,我个人是从Provider开始的,我仍然认为它对大多数用例来说足够好,尽管它据说是没有维护的,并被Riverboard取代,我也大量使用了Riverboard。我……

我曾经用过它。我几乎用它来做所有事情。但现在,我倾向于尽可能地轻量化。我的意思是,你只需要使用value notifier、change notifier、value listenable builder和listenable builder就可以做很多事情。所以这些当然是理解和掌握的好工具。我还使用过……

继承的小部件,从你在媒体查询上看到的各个属性特性来看,就像你拥有这个媒体查询大小一样,你实际上拥有每个属性作为你可以监听上下文的东西,如果你正在制作一个包,并且你不想依赖于任何第三方包,那么这些非常方便使用。

所以,但它们设置起来非常繁琐。所以我不会在应用程序中推荐它们,因为在设置它们时很容易出错,而且这样做非常繁琐。但是对于包内的一次性操作,你需要提供这个功能,让它感觉非常类似于Flutter的原生功能,这是一个非常好的工具。但是……

我最近比较喜欢的用于非常复杂的反应式计算状态的工具是Roddy Davis制作的signals

你并不需要它来做所有事情,但当你拥有非常复杂的计算反应式依赖项并想要为此使用它时,它是一个很好的工具。当然,你也可以用它来做所有事情。对于来自JavaScript、TypeScript世界的人来说,它可能也是一个受欢迎的工具,在许多框架中,信号非常常见。所以他们可能会觉得很熟悉。

但是如果你想保持轻量级,我会说一个经过实战考验的有力竞争者是ContextWatch。它非常方便。所以有点类似于Provider的功能,但没有整个树的麻烦。

当然,当涉及到信号和上下文时,你仍然必须以某种方式提供访问权限并访问它提供的数据。如果你愿意,你可以使用服务定位器,例如GetIt或Debold,并将它们全部添加到静态服务类中。许多大型应用程序就是这样做的。他们不在乎,你知道,我们把这个添加到一个大型的服务类中,它们只是静态的。

我曾在超过40万行代码的代码库中看到过这种情况,他们的应用程序运行良好。所以也许不要总是过度思考。我很高兴我们现在有了一个很好的指导,也许每个人都不同意它在文档中关于架构的编写方式,但至少现在有一个了,这至少是好的,你可以从中学习一些东西,并且

该指南看起来受到了Android架构的很大启发,Android架构指南用于开发Android应用程序。

所以,是的,看到所有这些争论,这是一段有趣的旅程。我曾经做过,我不知道,Hillel,你还记得我在Twitter上关于状态管理包统计的帖子吗?当然,当然。

是的。所以我过去常常做这前30个包等等。我已经很久没有更新了,但我一直在想,是的,也许我应该更新一下,看看我们现在所有包的情况。我过去也这样做过

对于路由包。所以我可能应该,你知道,刷新一下,看看它是如何演变的。自从我最后一次更新这些内容以来,可能已经超过一年了,只是为了检查一下我们的现状。看看它们做了什么会很有趣。但我认为顶级,你知道,最受欢迎的,它们并没有真正改变。它们相当静态。Flutter中状态管理的前10个外部包几乎相同。你有block和

我对block没有任何异议。我只是认为对于小型团队来说,它有点过度设计和僵化。也许有些人喜欢它,因为Liverpool更适合这个原因。但另一方面,对于大型团队来说,它提供了一个每个人都必须遵守的良好结构。所以,你知道,这总是上下浮动的。有什么建议给刚入门的人吗?

所以,对于刚入门的人有什么建议吗?是的,我今天可能会说,至少先尝试学习一点,不要太依赖AI。尽管,你知道,看看我们现在在AI方面的发展方向,我不知道这种建议在一两年后是否还有意义。

年底的预测是最好的程序员将是AI,我不知道这是否会成真,但仍然需要了解我们的编码工具并能够指导AI并以有意义的方式使用它们的人,所以我认为仍然非常有必要在更深的层次上理解框架,所以我仍然会从一些课程开始,就像其他人说的那样,只是构建东西

我的意思是,当我重新开始编码和学习并使用Dart和Flutter来学习它时,是的,我看了很多课程等等,只是为了完成它们并完成其中的一些。当然,这有助于克服最初的障碍。但最终,真正有帮助的是构建东西。所以,如果你想精通任何框架,这才是你真正想做的。你需要用它来构建东西。

开始编写更多代码是一个好建议。最后,你还想宣传什么吗?哦,你知道,我今天在HypeHype工作,这是一个非常酷的游戏平台。它是用户在平台上制作并发布的游戏。

所以人们可能熟悉Roblox。它有点类似,但它更注重移动端。我们还将使其成为AI优先。所以你会在其中看到很多很酷的AI功能。但实际上,它已经非常大了。它也有35万行Flutter代码。这些在平台上发布的游戏之上的用户界面是用Flutter编写的。

这真的很酷。也许在技术上更酷的是,游戏引擎也是我们自己的游戏引擎。这也是你用来编写游戏的工具。你使用游戏引擎或平台上的工具以可视化的方式制作它们,并在平台上发布游戏。因此,用户可以在平台上即时玩无限数量的不同游戏。

我们称之为无限馈送,就像TikTok或Instagram馈送一样,你可以在其中看到照片和视频,但在这里你只需向上滑动即可进入下一个游戏,你就可以玩另一个游戏。当然,有顶级游戏以及哪些游戏最受欢迎等等。你还有很多其他的东西,比如元游戏,用东西装备你的游戏角色等等……

还有聊天和与人交谈以及在多人游戏中一起玩。你可以录制游戏并查看它们的回放。所有这些非常酷的事情以及分享这些。所以,是的,作为游戏创建者,当你用它制作游戏时,你可以将其货币化。所以我们已经有很多人通过在平台上发布游戏赚到了一笔可观的钱,就像人们在Roblox上做的那样。

哇。听起来真的很酷。我会确保在剧集说明中包含链接。所以如果你想自己尝试一下。是的,

它还没有完全在应用商店中,它还没有在每个市场都可用,但很快就会有了,你也可以使用它的网络版本并在网络上玩游戏并下载桌面版本,所以我们支持所有平台,所以有Windows、Mac和网络版本,当然还有在Play商店中发布的移动版本,包括Play和App Store,以及

作为iPad版本。事实上,iPad在制作游戏的创作者中非常受欢迎。他们喜欢在iPad上坐下来制作游戏。有趣。好吧,迈克,再次感谢你参加播客。真的,让我们有机会谈谈并更多地了解你的故事。是的,我很高兴来到这里。我真的记得当

当我们见面时,可能是在2019年,我发现我们聊天并交换了一些话的所有这些推文和评论可能是在2019年在Twitter上关于Invoice Ninja以及你用来制作它的某些技术。很久以前了。时间飞逝。谢谢。感谢你邀请我参加播客。再见。