在最近举办的 FlutterInProduction 活动中,Flutter 官方除了回顾其发展历程和用户案例外,还详细介绍了未来的路线图。其中提到了一些令人期待的新功能,比如在 3.27 版本中引入的 Swift Package Manager、Widget 实时预览,以及 Dart 与原生平台语言的直接互操作支持等。然而,Flutter 提出的一个有趣的概念引起了大家的关注,那就是“让 Flutter 代码更快速易写且更容易阅读”。
这个目标为何如此引人注目呢?通过以下示例可以看出,Flutter 正在支持一种名为 Decorators 的新特性,这意味着开发者可以通过一种更为清晰的方式来组织代码。例如,原本的代码结构可能是:
dartPadding(padding: EdgeInsets.all(10), child: MyButton())
而经过 Decorator 转换后,代码可以简化为:
dartMyButton().padding(EdgeInsets.all(10))
这种变化让人不禁联想到现有的 SwiftUI 和 ArkUI。Flutter 是否正在朝着“SwiftUI/ArkUI 化”的方向发展呢?
对于熟悉 SwiftUI 的开发者来说,Decorator 模式应该并不陌生。SwiftUI 本身就支持这种模式,开发者在视图中使用的每个修饰符(modifier)实际上都是一个视图的包裹(view wraps)。如果再对比 Jetpack Compose 中的 Modifier,大家会发现它们在某种程度上是相互呼应的。
在 Flutter 的代码中,Decorator 化的表现非常明显。原本需要通过多层嵌套来实现的功能,现在可以通过更为直观的方式呈现出来。这种变化让许多开发者感到兴奋,因为它不仅减少了代码的复杂度,还提升了可读性。
然而,并不是所有的开发者都对这种“SwiftUI/ArkUI 化”的趋势表示欢迎。例如,Flock 的负责人曾表示,Flutter 的 widget 树一直是声明性的,开发者所做的是声明树的结构,而非生成它。他对 Decorator 的看法是,它更像是一种构建器模式(builder pattern),这种风格的偏好并不一定能解决实际问题。他认为,“干净”的代码并不能帮助理解和解决问题。
以以下代码为例,每行后面的注释表示该 widget 在树中的相对级别:
dartWidget build(BuildContext context) { return Scaffold( // 1 body: Container( // 2 child: const Text("Hello, world") // 5 .padding([Edge.leading, Edge.vertical], 20) // 4 .padding([Edge.trailing], 8), // 3 ), );}
在这个声明式的 widget 树中,开发者可以从外向内顺序阅读,而在使用 Decorator 时,阅读顺序则变成了从内向外,这可能会导致混淆。
Flock 的负责人认为,构建器模式会导致不可预测的深度顺序,降低可读性,并增加混乱。他担心一旦这种模式被广泛采用,复杂性将会在生态系统中成倍增加。
不过,从我的角度来看,Flutter 如果能够实现“SwiftUI/ArkUI 化”,大多数开发者还是会欢迎这种变化。正如前文所提到的,这一调整的核心目标是“让 Flutter 代码更快速易写且更容易阅读”。我认为,在大多数场景下,这种模式能够显著提升开发效率和可读性。
目前,Decorator 特性仍处于评估阶段,官方也在进行用户研究,以确保在保持两个 widget 模型的同时,能够最大化其优势。
除此之外,活动中还提到了一些其他新特性,比如 Enum 简写,未来 Flutter 开发者可能只需使用 `.spaceEvenly`,而无需输入 `MainAxisAlignment.spaceEvenly`,这将大大提升代码的简洁性和效率。
另一个新特性是 Primary Constructors,它支持隐式创建变量,这将使代码更加简洁,尤其是在宏开发和 JSON 序列化方面,整体的编程体验也将有所改善。
当然,有人可能会觉得这是一种“Kotlin 化”的趋势,但我认为这只是技术发展的一个共同方向。
最后,你认为 Decorators 这种“SwiftUI/ArkUI 化”的实现是否符合你的开发偏好?如果最终保留了两种 Widget 模式,你会选择哪一种呢?我个人觉得这种变化是积极的,无论是编写 Flutter、SwiftUI 还是 ArkUI,都会降低开发者的“割裂感”。
参考链接:
声明:
1、本博客不从事任何主机及服务器租赁业务,不参与任何交易,也绝非中介。博客内容仅记录博主个人感兴趣的服务器测评结果及一些服务器相关的优惠活动,信息均摘自网络或来自服务商主动提供;所以对本博客提及的内容不作直接、间接、法定、约定的保证,博客内容也不具备任何参考价值及引导作用,访问者需自行甄别。
2、访问本博客请务必遵守有关互联网的相关法律、规定与规则;不能利用本博客所提及的内容从事任何违法、违规操作;否则造成的一切后果由访问者自行承担。
3、未成年人及不能独立承担法律责任的个人及群体请勿访问本博客。
4、一旦您访问本博客,即表示您已经知晓并接受了以上声明通告。
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
Copyright 2005-2024 yuanmayuan.com 【源码园】 版权所有 备案信息
声明: 本站非腾讯QQ官方网站 所有软件和文章来自互联网 如有异议 请与本站联系 本站为非赢利性网站 不接受任何赞助和广告