Dart 2.3 发布,带来构建 UI 新特性

h4cd
 h4cd
发布于 2019年05月09日
收藏 32

Google I/O 2019 第二天,官方发布了 Dart 2.3 稳定版本

此版本针对构建用户界面进行了优化,改善了开发者在开发 UI 时的编码体验,为开发 Flutter UI 提供了新的工具支持,同时还提供了两个新的网站:dart.dev 与 pub.dev。

用于构建用户界面的新语言特性

在客户端开发方面,Dart 与 Flutter 团队之间长期合作的项目之一就是使用 Dart 捕获用户界面代码,而不需要标记语言。开发团队认为对行为和布局使用单一语言具有很大的好处,包括减少上下文切换、不必学习两种语言,并在构建 UI 时允许通用编程语言的所有抽象功能。

在 Dart 最近几个版本中进行了一些改进,例如简化构建 widget 的代码,添加自动的 int-to-double 转换以及添加 set literals。Dart 2.3 中,进一步带来了三个用于描述 UI 的新特性:基于列表、条件与重复。

可以将 UI 视为 widget 节点的树,一些节点包含 widget 列表,例如可滚动元素的列表。通常这些列表是从其它列表构建的。为此,添加了一个新的 spread operator 扩展运算符特性,用于将元素从一个列表解压到另一个列表。在下面的示例中,buildMainElements() 返回一个 widget 列表,然后使用扩展运算符 ... 将其解压到周围列表中:

Widget build(BuildContext context) {
  return Column(children: [
    Header(),
    ...buildMainElements(),
    Footer(),
  ]);
}

另一个常见的 UI 任务是根据条件包含特定元素。例如,开发者可能希望在所有页面上都带有“下一步”按钮,当然条件是最后一页不需要这个按钮。在 Dart 2.3 中,可以使用以下 collection if 执行此操作:

Widget build(BuildContext context) {
  return Column(children: [
    Text(mainText),
    if (page != pages.last)
      FlatButton(child: Text('Next')),
  ]);
}

最后,UI 经常从其它重复元素构建重复元素,可以使用新的 collection for 特性来描述这一点:

Widget build(BuildContext context) {
  return Column(children: [
    Text(mainText),
    for (var section in sections)
      HeadingAction(section.heading),
  ]);
}

这三个新特性是语言特性,而不是标记命令,因此它们是完全可组合的,可以在处理集合的任何上下文中使用。这些特性包含在 Flutter 1.5 版本中,可在 Dart 2.3 版本中找到。

此外还添加了新的 lint,可以在静态分析中配置这些 lint 以强制使用新的 spread、collection if 和 features for 特性。

IDE 和编辑器功能

配合 Dart 2.3 的 UI 特性改进,此版本还为 IDE 支持添加了新的 UI Guides 功能。UI Guides 是在 UI 代码中绘制的水平和垂直线,使得更容易看到 Flutter UI build() 方法的树结构。以下是一个计算器应用示例,其中 UI Guides 清楚地表示了 UI 是从包含多个 KeyRows 的扩展列构建的,每个 KeyRows 包含 NumberKeys。

UI Guides 在 IntelliJ IDEA 35.2 和 Android Studio 插件中提供。今后 VS Code 中也有望提供类似支持。

另一方面,开发者在使用 API 时经常会使用代码自动补全功能,这一功能在补全已导入的库中的 API 效果很好,但对于还未导入的库则不起作用。新版本 IDE 现在弥补了这一不足,开发者现成可以在任何前缀上调用代码补全,并且将看到当前包中所有 API 的完整性,它直接依赖的包以及 SDK。如果补全的是尚未导入的库中的代码,则 IDE 会为自动添加导入语句。

新的 Dart 与 Pub 网站

开发团队为 Dart 平台构建一个新网站:dart.dev,https://dart.dev

该网站提供了一个全新的登陆页面,专注于解释 Dart 平台的核心优势,同时更新了文档页面,以获得更好的导航和更具视觉吸引力。最后,对所有内容进行了大量重组,以使其更容易被发现,并为以前缺少的核心内容添加了新页面。此外,更新了 Pub 包网站,并使用了方便的新 URL:pub.dev

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 OSCHINA 社区 [http://www.oschina.net]
本文标题:Dart 2.3 发布,带来构建 UI 新特性
加载中

精彩评论

Megadotzipp
Megadotzipp
Java肯定会死,肯定不是被干死,肯定是被龟壳作死的。.NET 不仅不会死,而且应该会越来越好
cshanxiao
cshanxiao
既生 kotlin, 又生 Dart, 学不完
黑暗料理魔王
黑暗料理魔王
google的go和dart都越来越火了
一位极其不愿意透漏姓名的马先生
一位极其不愿意透漏姓名的马先生
目前比较看好 go云计算,高并发,dart 很有可能以后是google andorid官方语言和跨平台来代替react native或者h5混合开发,最后一个如果.net跨平台以后,估计也会很强势
吾太
那个说.NET被干死的我不认同,Java也死不了,只能说百花齐放。

最新评论(17

J
Jason909

引用来自“冰力”的评论

DLang 和 TypeScript 更好。

引用来自“吴题”的评论

vm这些比较大,dart应该轻量些。他们肯定考虑各种语言的,最终选择dart有他道理的
据说因为Dart团队离Flutter团队比较近,合作比较方便,所以选了Dart
吴题
吴题

引用来自“冰力”的评论

DLang 和 TypeScript 更好。
vm这些比较大,dart应该轻量些。他们肯定考虑各种语言的,最终选择dart有他道理的
小卡车呼呼呼
谷歌新系统生下来就一堆应用
游侠小陆
改成函数式啊,括号括号妈的括号
两广总督bogang
两广总督bogang

引用来自“Megadotzipp”的评论

Java肯定会死,肯定不是被干死,肯定是被龟壳作死的。.NET 不仅不会死,而且应该会越来越好
龟壳放弃java了,反正也捞不着银子
cshanxiao
cshanxiao
既生 kotlin, 又生 Dart, 学不完
冰力
冰力
DLang 和 TypeScript 更好。
一位极其不愿意透漏姓名的马先生
一位极其不愿意透漏姓名的马先生
目前比较看好 go云计算,高并发,dart 很有可能以后是google andorid官方语言和跨平台来代替react native或者h5混合开发,最后一个如果.net跨平台以后,估计也会很强势
潮小瓜
潮小瓜
为啥我看不了这篇文章
申逸
申逸
有没有中文论坛或者社区
返回顶部
顶部