We're sunsetting PodQuest on 2025-07-28. Thank you for your support!
Export Podcast Subscriptions
People
A
Ariel Ben Horesh
Topics
Ariel Ben Horesh: 我非常享受使用Flutter进行开发,因为它具有开发模型的一致性,可以快速开发跨平台应用,并且不受任何限制,可以实现任何想要的功能。Flutter的优势在于其开发模型的一致性和灵活性,可以快速开发跨平台应用,并且不受任何限制。Flutter中Widget的拆分和组合是重要的技能,可以提高代码的可维护性和易理解性。我更喜欢BLoC模式进行状态管理,因为它与Flutter的运作方式完美匹配,易于将它集成到Widget树中并响应变化。RiverPod在过去一年中取得了巨大的进步,特别是围绕生成的代码,使用起来非常简单和强大。我通常使用Bloc库,并结合Cubit进行状态管理,我会在创建与UI相关的UI逻辑时使用Bloc模式,而将Cubit用于API或服务等需要流或可观察对象的场景。在测试方面,我通常对Bloc和服务或逻辑类进行测试,并结合Flutter Driver进行UI回归测试,以确保代码的全面覆盖。 我希望Flutter能更多地关注移动端开发,提供更多针对特定平台功能的工具和能力。对于Flutter初学者来说,建议专注于基础知识,从简单的项目开始,并寻求社区的帮助。Prism库的灵感来自于.NET中的Prism库,旨在帮助开发者构建模块化的Flutter应用,以应对复杂应用的需求。Prism库适用于构建复杂且需要快速迭代的Flutter应用,它允许创建模块化、可维护的应用,并支持模块间的灵活组合和交互。Prism库是一个可扩展的工具集,开发者可以根据自己的需求选择性地使用其功能。我推荐参加特拉维夫Flutter聚会,并鼓励更多人参与其中,特别是女性开发者。

Deep Dive

Shownotes Transcript

嗨,感谢收听。这是“全是小部件的Flutter播客”。我的名字是Holo Korn。每一期节目,你都有机会与Flutter社区的另一位优秀成员交谈。在本期节目中,我们非常幸运地能与Ariel交谈。欢迎。嗨,感谢你的邀请。感谢你参与。那么,首先,你想分享一下你的背景吗?是的,当然。我在开发行业有很多经验。自从我记事起,我就一直在做这件事。

我第一次接触到我的第一台电脑。我知道这就是我的目标。从那时起,我就把所有的精力都放在成为一名软件开发人员上,

我作为一名开发人员加入了军队,并在军队服役了将近七年,担任开发人员和团队领导。最后,担任研发部门领导。

之后,我离开了军队,加入SELA担任顾问。我在那里工作了三年,主要从事.NET、WPF、UI方面的工作。我和我的几个朋友一起创办了CodeValue。

我们一起创建了一家很棒的公司。我认为它在鼎盛时期拥有250名员工。我在那里工作了10年,做了很多我们很快就会谈到的移动方面的工作。然后我在10年后离开了,

并继续做不同的事情。我加入了Lumen,这是一家位于医疗保健行业的酷炫创业公司。我们正在尝试追踪新陈代谢,并且正在做大量的Flutter工作。这是一个面向消费者的设备,有很多机会,也有很多挑战,无论是产品方面还是开发方面,

我可以说我很幸运能处于我现在的位置。你是怎么第一次听说Flutter的?是通过Lumen还是之前?是的,实际上是在之前。正如我在CodeValue时所说,我已经做了相当多的移动开发工作。

我做过原生开发。我也做过跨平台开发。顺便说一句,我当时参与开发了许多以色列的Windows Phone应用程序。Way正在Walla的WINE上做一个演讲。所以我当时非常参与移动社区。

Team Snit实际上联系了我们,并与我们进行了会面,询问我们如何帮助推动Flutter在以色列的发展。那是一个非常早期的阶段。我认为那可能是alpha版本。他们当时还没有地图小部件。希伯来语支持也不存在。因此,实际上很难用它来做一个项目。但是

这是我第一次真正关注它,并开始关注和跟踪它。之后我记得我做过一个比较不同跨平台技术的会议,Xamarin React Native和Flutter,我记得那是我第一次真正尝试用Flutter做一些事情,

结论以及来自观众本身的一些东西是,Flutter是最,怎么说呢

所有这些技术中最有前途的技术。酷。你特别喜欢Flutter的哪些方面?首先,我必须说,由于我在许多平台上都有丰富的开发经验,我可以真正地说,而且我是从心底里说的,你可以说,我真的很享受在Flutter中进行开发。

这样做的原因主要是开发模型的一致性。因此,您可以使用相同的范例、相同的模式真正快速地开发跨平台应用程序,并且它可以真正缩小规模。事实上,你没有任何限制,你知道你可以做任何你想做的事情。你可以进行像素级项目,你可以做任何事情。

这在紧急情况下解决了任何复杂性方面的妥协。正如我所说,我多年来一直是WPF开发人员,并且了解XAML,

以及你可以用它做的每一件小事。我可以说,使用XAML,你也可以做任何你想做的事情,但是每当你需要它的时候,复杂性都会超过屋顶。而使用Flutter,就像魔法一样,这真的是一项令人着迷的技术。

是的,我完全同意。我认为有时人们对Dart代码的一个抱怨是它可能会嵌套得很深。我认为同样,Flutter的一大优点是你可以随时进一步分解小部件。你可以不断地细分。从本质上讲,你构建自己的小部件树并使其极易重用。这样,你最终得到的小部件深度就会少得多。是的,我同意。我认为初学者很容易陷入这种情况,

而且分离和组合小部件是你随着经验增长而掌握和磨练的一项技能。组合和分离也使你的代码更易于维护,也使代码更容易理解和维护。虽然我也可以说……

在我工作期间,我一直将它与XAML进行比较,因为看到在XAML中你也有很多组件和嵌套对象在XML图中非常有趣。所以这不是我容易被冒犯或害怕的事情。

但是当然,有了你的服务,有一些方法可以减轻这种情况。说到你如何构建应用程序,你是否对大多数应用程序使用特定的状态管理库?是的。另外,我之前没有说,但我正在运营特拉维夫Flutter聚会,我们每两三个月就会聚会一次。

在其中一次会议上,我还做了一个关于比较我们Flutter开发人员可用的不同状态管理库的会议。因此,如果您是这个领域的新手,并且想了解一下各种选择,我建议您尝试在YouTube上搜索它。或者也许我们可以在本期节目的笔记中添加它。

那么,关于我的意见……

我非常像一位老卫士,我喜欢BLoC模式。对我来说,它完全说得通,并且与Flutter的工作方式的集成对我来说是完美的匹配,因为建模和查看状态机的代码,BLoC在这方面做得很好

它允许你围绕这个概念构建你的逻辑。以及你如何将其插入到你的小部件树中并响应更改的便捷性。对我来说,使用它的便捷性,因为我现在认为这是你可以……

描述UI和UI逻辑之间关系的最明显的方式。但是,我也在贡献和帮助构建使用RiverPod的应用程序。RiverPod在去年取得了巨大的飞跃

尤其是在他们用于提供程序的生成的代码方面。因此,你只需在“方法”之上、在“类”之上添加“riverpod”的注释,它就会像重新创建提供程序一样。看到它实际上非常神奇。

而且它非常强大和健壮。对于开发人员来说,它实际上非常易于使用。但正如我之前所说,我仍然喜欢BLoC模式的可靠性和明确性。酷。你发现自己使用的是模式本身,还是使用Flutter BLoC包来实现它?

我通常使用Flutter_bloc库。我发现它足以满足我的需求。此外,它还包括Cubit。你可以说这是一个你可以使用的基类。也许我可以,如果我们愿意,我也可以分享一下我对它的看法,因为它实际上……

没有以库指示你的方式定义,看,这是理念,这是宗教,你应该始终执行步骤一、二、三。它实际上就像,这是我们的工具,随你使用。没有好坏之分。但对我来说,有意义的是我使用BLoC

模式在任何我创建与小部件相关联、与UI相关联的UI逻辑的地方。我将Cubit用于诸如API或服务之类的功能,我希望它们成为流,拥有流,拥有可观察对象。我可以相当多地即插即用并同时使用两者。另外,当

如果我愿意,我可以将它们连接到UI。但是,在这种情况下,Cubit或服务并非专门……它的职责不是管理UI本身,而是可能获取一些数据以使其可访问,并让小部件……

根据它或配置更改状态,例如,这是一个很好的例子。另一件事是补充Flutter BLoC的测试库。对我来说,当我为我的应用程序进行测试时,我也会这样做,我试图找到最划算的,你可以说,投资回报率。所以我通常会测试我的BLoC。

我通常会测试例如服务或具有逻辑的类。很多时候有Cubit或BLoC。因此,使用该库非常有意义。如果我可以再谈一句关于测试的话,我通常会用Flutter驱动程序之类的功能来补充它。

回归测试和端到端测试。所以我从UI和BLoC本身的逻辑测试中获得了覆盖率。很好。这很有道理。你希望看到Flutter的哪些方面发生变化?是的。总有改进的空间,总有使其变得更棒的空间。是的。

我可以说,我很乐意看到更多关注移动端。我觉得自从Flutter团队开始扩展到其他平台以来,移动端有点被忽视了。

因此,我很乐意看到更多围绕特定平台功能的工具或功能,您可以更轻松地使用Flutter。例如,我们可以谈谈iOS小部件。

或者其他,例如,iOS现在在主屏幕、锁屏上的小部件。因此,我很乐意看到Flutter与这个平台特定代码的更多交互。除此之外,我一直希望的是

更强大的运行时信息,现在它被移动安全阻止了。因此,如果他们能找到一种方法至少给我们提供更多关于类型的信息,即使动态调用仍然不可用,我也会很高兴。如果您不知道,Dart本身具有镜像库。

它允许您获取运行时类型信息,但它在Flutter上不可用。所以我将尝试找到中间的东西。另一件事与Dart更相关,我觉得泛型功能有点,怎么说呢,可以在这里改进一下。

也许围绕更多动态的使用和Dart的使用。所有这些事情都有一些改进的空间。我认为他们非常关注

现在安全的故事。希望现在这已经过去,我们可以看到更多语言特性出现。我们最终可以看到其他语言。我很乐意看到更多合作伙伴加入到这种语言中。太棒了。你对刚开始使用Flutter的人有什么建议?好吧……

我尽量避免听起来太陈词滥调。我认为我们的时代以信息泛滥为象征。

这实际上可能会让刚入门的人感到非常困惑,因为有很多选择,很多东西可以学习,很多东西应该关注。当我回答我们在以色列的两个主要的Flutter Facebook群组中的问题时,我可以看到这一点。人们

人们真的感到困惑,例如状态管理问题就是一个很好的例子,因为人们真的不知道他们应该做什么,有很多东西,你知道每个人都有自己的意见,所以我的建议基本上是尝试专注,尝试并从简单开始

从Flutter文档开始。尝试消除所有噪音。拥有一个像网站项目或你真正想要构建的东西,然后把它发布出来。请你信任的人或社区中的人审查你的代码并回答你的问题。

还有其他方法可以获得答案,Stack Overflow、Flutter的Discord频道以及Facebook群组。所以一步一步来。最重要的是,构建一些东西。让一些东西工作。这就是你通过亲自动手学习的方式。

酷。这是很好的建议。说到副项目,你第一次联系这个播客是因为你正在开发一个包。你想谈谈吗,我认为它叫做Prism?你想谈谈它做什么以及它试图解决的问题吗?哦,是的,当然。所以,实际上,Prism不是我发明的名字。实际上,而且,我在Flutter中使用的模式,请相信我,也不是

我的发明。我很乐意为此承担责任,但我必须,你知道,说实话。所以,实际上,Prism库始于WPF时代。

我认为大约在2007年微软,人们开始采用WPF,他们不断来到微软并告诉他们,好吧,我们看到了Outlook Windows应用程序,它是模块化的。Outlook应用程序有电子邮件、联系人、日历待办事项,我们想要系统地构建应用程序。

类似于Outlook。那么我们该如何做到这一点呢?微软的模式和实践团队基本上定义了关于如何开发模块化应用程序的最佳实践指南。Prism是一个.NET中的代码库,它帮助构建

这个概念,我必须实现这个模块化的概念。所以,多年来我一直是咨询委员会的成员,所以要与之共存,随着时间的推移,随着技术的进步,我帮助它发展到其他技术,基本上就是这样。

例如UWP,现在在Lumen,我就像跳到了2022-23年,所以

在Lumen,我们现在有一个非常成熟的Flutter应用程序,如果你考虑一下,这非常罕见。他们在Flutter刚刚从测试版发布时就开始使用它,那是2018年。

他们非常非常早地选择了Flutter。所以,如果我们现在跳到,我们有一个非常庞大的Flutter应用程序。

它包含许多功能。我的意思是,您可以将Lumen应用程序分成至少五个独立的应用程序。例如,我们拥有一个功能齐全的食物日志功能。您有一个完整的应用程序列表,这些应用程序只做食物记录。好的。

MyFitnessPal是此领域中应用程序的一个很好的例子。因此,正如您可以想象的那样,应用程序是在很长一段时间内构建的,许多模式都是在此过程中发明的,所有最佳实践都是在此过程中开发的,

在此过程中发现的。您在代码中有很多代关于如何建模应用程序、如何使用不同功能的方法。

并且由于在Lohmann,我们真的想快速运行,快速迭代功能,获得消费者的反馈,了解什么好,什么不好,

并以非常快的速度构建此应用程序。我理解我们应该在应用程序中采用的方法是模块化的,我们当时在Prism中使用的相同模式也适用于为复杂性而构建的Flutter应用程序。如果您有一个简单的应用程序,那么Prism不适合您。

如果您的应用程序有五、六个需求、用户故事,那么它不适合您。但是,如果您要构建的应用程序很复杂,并且您想要拥有不同的模块,每个模块都是可维护的,并且您可以混合和匹配,因为例如,在Lumen应用程序中,

我们有一个消费设备,一个用于测量的实际硬件设备。但是假设您想将应用程序的版本部署到应用商店。我们启动设备并允许人们下载它,使用完整的锁,例如,正如我们提到的那样,并将设备作为扩展或他们可以购买的东西提供。然后,当他们拥有该设备时,他们将获得存储模块

将设备用于应用程序并获得额外功能。但是即使没有这些功能,应用程序也应该无缝工作。因此,您需要处理粘合剂以及这些模块如何以不会在您构建新版本时每个星期一或星期四都会中断的方式相互交互。

所以这就是Prism,基本上。它是一个允许您创建这些模块、允许您引导它们并按可靠的顺序加载它们的库。它允许您组合UI,因为模块可以决定,好吧,我有一个设置,我想托管这个。

来自其他模型的其他小部件。在我之前使用的示例中,如果我们有一个设备模型加载到其中,那么我可以有一个专门用于设备设置的小部件。

因此,设置区域需要根据加载的模型动态地运行。因此,我们可以将主机和将粘合到主机的子项分开,而无需它们知道谁将是我的主机,谁将是我的子项。这就是我们在Prism库中拥有的区域的概念。

第三个是一个相当标准的发布者-订阅者,它允许在发布者不知道订阅者反之亦然的情况下广播消息。

我的库的好处是您可以轻松地扩展它以使用IOC容器。我们将有一个使用GetIt的版本,但您可以根据需要以相同的方式连接任何IOC容器。我们还在使用GoRouter的Freedom库中添加了另一个扩展。

我们正在构建的Renewal的Neo版本基本上是基于这些库的。到目前为止,我可以说我对结果非常满意。这真的很有趣。感谢您创建并分享该库。我将确保在剧集说明中直接包含指向此库的链接。我认为该包的全名是prism_flutter_core。对吗?是的。

就是这样。正如我所说,另外两个包也将在Pub.dev上提供。此外,正如我所说,这个库非常容易扩展。这就是为什么它被称为Prism Core,因为您可以获取它并扩展它,并且……

就像,把它锤成你想要使用它的形状。那里的意见非常温和。我试图将其作为一个您可以使用的工具集。因为你不必这样做。你不喜欢你的应用程序中的PubSub?没关系,不要使用它。你不喜欢像我描述的那样使用区域进行组合和使用?

没关系,不要使用它。你只想在没有模型的情况下使用区域。您可以混合和匹配,并且基本上可以做任何您想做的事情。非常酷。最后,您还有什么想补充或推广的吗?我认为我已经推广了很多,但我再次会推广特拉维夫Flutter聚会,因为我认为这样……

这就像我们作为Flutter开发人员、我们地区Flutter社区见面和问候彼此的机会之一。我还呼吁人们加入。当然,我希望看到你们不仅仅是作为听众,也作为演讲者来参加。我尤其期待

还有女性演讲者。所以我真的,真的希望看到建议,看到即将到来的会议。我们在2023年3月有一个聚会。这是我们录制这期节目的时候。

我将在这次聚会上谈论Prism。我还将把这个会议带到比利时。那里有一个大型开发会议。他们接受了我关于我们刚才讨论的Flutter模块化功能的演讲。所以这将非常有趣

愉快的会议,我希望。我们已经为下一次聚会制定了计划,那将在5月初举行。所以请关注我们的聚会,我希望在那里见到你。非常感谢您参加播客。感谢收听。下次再见。

再次感谢你的邀请。我很高兴,并且非常希望。我很高兴能够为社区做出一点贡献,并且感谢你所做的工作。继续努力。谢谢。