Flutter开发者

Flutter Beta2

2018-04-10

没错,就在今天Flutter宣布发布了Flutter的第二个测试版本(V0.2.8),借助它可以帮助开发者在更快的时间内创建高质量的IOS和Android应用。

回顾Beta1

自从我们于2月份在巴塞罗那举行的移动世界大会上发布第一个测试版以来,我们一直很高兴看到他们的强烈反响 我们在通用技术出版社(例如Ars Technica,TechCrunch,VentureBeat,9to5Google)上看到了一系列优秀的帖子,我们的社区很多人都在Medium上发布了新的Flutter帖子,还有大量新兴开发人员和组织下载并使用Flutter。

看下beta2

更容易安装

我们听到反馈意见,安装Flutter可能会更容易; 安装beta 1需要使用git命令行工具克隆我们的GitHub repo。所以我们重新安装了我们的安装程序,现在只需下载和解压缩安装档案即可支持安装beta2:Windows,macOS和Linux。对于Windows用户,我们还添加了一个酷炫的新Flutter控制台,以便在下载后立即开始使用Flutter命令:

改进的开发工具

Flutter的开发人员工具和经验团队发布了M23工具里程碑,其中包含许多改进。Android Studio&IntelliJ获得了一个新的“大纲视图”,提供构建方法中的UI小部件的结构化树视图,并支持“保存时格式”。VS Code获得了对运行测试,多项目支持和一个新选择器的支持,以在安装多个时选择当前的Flutter SDK。

改进的资源系统

我们已经对我们的资产系统进行了相当重要的优化。我们现在使用底层平台(Android,iOS)所期望的结构来放置资产。这具有许多优点。

首先,由于我们不需要提取资源,所以Flutter应用程序现在可以更快地启动。之前的资源系统偶尔会导致旧款Android手机的发布时间延迟。

其次,它允许插件从插件的本机代码一侧(即Java,Kotlin,Objective-C或Swift)访问资源。让我们来看一个具体的例子,video_player我们几个月前推出的插件。

到目前为止,它只能播放来自网络的视频,但一些开发人员要求能够使用Flutter的资产系统“传递”已经嵌入到应用中的视频文件。使用测试版2和版本0.4.0的插件,现在可以实现了。

因为我们将资源作为基础平台所期望的,因此可以在Flutter和本地平台之间共享。我们提供了新的API(Android,iOS),用于获取适用于本机代码的资源查找键,例如Android AssetManager:

1
2
3
4
5

String assetName = call.argument("asset");
String assetLookupKey = registrar.lookupKeyForAsset(assetName);
AssetFileDescriptor fd = registrar.context().getAssets().openFd(assetLookupKey);
player = new VideoPlayer(eventChannel, handle, fd, result);

Dart 2默认启用

我们的第一个测试版提供了Dart 2编程语言的预览版。我们的测试显示Dart 2接近完成,并且非常稳定。Flutter的第二个测试版默认启用Dart 2。结果你会看到更快的异步调用,以及更丰富的类型系统。

作为新型系统如何为您节省大量调试时间的一个例子,请考虑以下几点:

1
2
3
4
5
6
7
8
9
10
11

void main() {
List todo = ['Eat', 'Sleep', new Task('Code Flutter', Priority.high), 'Profit'];
runApp(
new MaterialApp(home: new TodoList(todo)),
);
}
class TodoList extends StatefulWidget {
final List<Widget> items;
TodoList(this.items);
}

该代码有一个错误。它将一串字符串和任务传递给一个需要一个小部件列表的小部件。静态分析并没有捕捉到这一点,因为程序员有意使用松散的静态类型作为待办事项列表(List简写为List)。

接下来考虑应用程序如何使用此列表:

1
2
3
4
5
6
7
8
9
10

Widget build(BuildContext context) {
List<Widget> remaining = widget.items.sublist(_done);
return new Scaffold(
body: (remaining.length <= 3)
? new Column(children: remaining)
: new Text('${remaining.length} items left to do'),
floatingActionButton: new FloatingActionButton(onPressed: _doOneThing),
);
}

由于对待办事项列表项目的访问是有条件的,所以错误会在晚些时候发生。在Flutter beta 1中,启动时不会出现错误,只有当用户点击该按钮后,才会通知字符串不能用作小部件:

1
2
3
4
5

The following assertion was thrown building TodoList(dirty, state: TodoListState#fd618):
type 'String' is not a subtype of type 'Widget' of 'child' where
String is from dart:core
Widget is from package:flutter/src/widgets/framework.dart

通过Dart 2中新的完整运行时检查,我们可以避免像这样的“等待发生的错误”,而不是提前失败,即在代码对泛型类型提出错误要求的时候。在这种情况下,只要应用程序启动,我们就会失败,动态列表todo将传递给TodoList构造函数,该构造函数需要List

控制台输出:

1
2
3
4
5
6
7
type 'List<dynamic>' is not a subtype of type 'List<Widget>' where
List is from dart:core
Object is from dart:core
List is from dart:core
Widget is from package:flutter/src/widgets/framework.dart

main (file:///Users/mit/tmp/todo/lib/main.dart:4:37)

Dart 2和可选的new / const

Dart 2还增加了在调用构造函数时使新和const关键字可选的支持,正如我们上一次测试版博客文章中所讨论的。在我们对beta 2的最终测试期间,我们发现了一些问题,所以现在我们推荐推迟任何非实验性的可选new / const使用,直到我们启动一个新的beta版本宣告它准备就绪。

呼吁行动:将您的代码升级到Dart 2

与所有变化一样,需要付出代价:如果您有现有的Flutter代码,则可能需要升级其中的一部分才能与Dart 2兼容。要开始升级,请确保将Flutter SDK更新为beta 2(v0。 2.8)以及用于Android Studio,IntelliJ或VS代码的Flutter IDE插件到最新版本。

接下来,验证您的代码是否通过了静态分析(从终端,运行flutter analyze或使用Android Studio / IntelliJ或VS代码中的问题视图)。然后,请参阅我们突破性变更后的全面指导,了解如何解决使用Dart 2中新的,更全面的运行时类型检查可能会遇到的问题。

如果您需要多一点时间才能完成此操作,则可以使用Dart 2退出暂时切换回旧的行为。预计此选择退出仅适用于单个测试版。

最后的想法

我们希望您会喜欢我们的第二个测试版,并感受我们在改进Flutter产品方面的持续承诺,因为我们正在开发下一个测试版。我们非常欢迎反馈意见,并希望你们都会分享你们的工作。我们真的很高兴看到Flutter被用来构建伟大而美丽的应用程序的所有方式!

使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

打赏请备注姓名或者昵称,方便我后期统计哦

关注公众号,及时查阅最新文章