更方便、更强大: Flutter package 生态系统更新
作者 / Chris Sells,Flutter 开发者体验产品经理
这最后的一步也是特别重要的一步。做到这一点就意味着 Flutter 社区可以在不依赖 Flutter 团队的情况下实现互帮互助。现在任何人在 pub.dev 上发布或使用 package 之前,都不再需要四处询问了。另一方面,要培养这种生态系统,就需要一个值得信赖的角色来打造现代 Flutter 应用开发的基础设施。Google 的 Flutter 团队正好负责解决这个问题: 提供值得信赖的平台,让 Flutter 社区继续发展壮大。
Package 的发布者认证、评分和 Favorite 项目
为了提升 Flutter package 生态系统的可信度,我们在 pub.dev 上给出了 package 的一些评价指标:
这是 provider package 的页面截图,这个 package 在 Flutter 生态中的人气和质量都位居前列。这张截图包含了一些我们在 pub.dev 上用以展示 package 质量的信息。首先是域名左边的蓝色盾牌图标,它代表 Verified Publisher (认证发布者),即这个 package 是由经过身份验证的作者发布的。接下来往右一点是点赞图标和点赞数,让您可以知道这个 package 在社区用户间受欢迎的程度。最后是截图最右边的 Flutter Favorite 徽章,看到这个徽章就意味着您在构建应用的时候应该首先考虑使用这个 package。这里给出一个对比: 一个在过去三个月内积极维护的 package 平均会收到 12 个赞,而 Flutter Favorite package 则是 270 个。为了确保找到质量最佳的 package,Flutter Favorite 衡量指标会综合考虑诸多要素: 包括 pub.dev 评分,各种主观及客观的质量、可用性和适用性指标,以及由 Flutter 框架作者之一来进行的工程代码审查结果。
-
provider package https://pub.flutter-io.cn/packages/provider -
Verified Publisher https://dart.dev/tools/pub/verified-publishers -
Flutter Favorite 衡量指标 https://flutter.dev/docs/development/packages-and-plugins/favorites#metrics
-
bloc https://pub.flutter-io.cn/packages/bloc -
flutter_bloc https://pub.flutter-io.cn/packages/flutter_bloc -
convex_bottom_bar https://pub.flutter-io.cn/packages/convex_bottom_bar -
geolocator https://pub.flutter-io.cn/packages/geolocator -
google_fonts https://pub.flutter-io.cn/packages/google_fonts -
location https://pub.flutter-io.cn/packages/location -
sign_in_with_apple https://pub.flutter-io.cn/packages/sign_in_with_apple
Flutter Favorite package 完整列表
https://pub.flutter-io.cn/flutter/favorites
通过 Apple 登录
在这次赢得 Flutter Favorite 荣誉的插件中,最引人注目的是 sign_in_with_apple 插件。
-
sign_in_with_apple 插件 https://pub.flutter-io.cn/packages/sign_in_with_apple
该插件不仅质量高、适用性广,而且还填补了 Flutter 功能清单中的一项重要空白。Apple 已经声明,所有使用了其他第三方登录方式,如 Google Sign In 等的应用,都必须在 2020 年 6 月 30 日之前同时提供 Apple Sign In,这样才能发布到 App Store。显然,通过 Apple 登录对于任何在 iOS 上开发应用的 Flutter 开发者来说都是至关重要的功能,但这次并不是由 Google 的 Flutter 团队提供,而是借助社区的力量。在与 sign_in_with_apple 的作者 Timm Preetz 和 Henri Beck 沟通后,他们的反应非常迅速,在极短的时间内将插件打磨到了我们需要的水准。
-
Apple 的声明 https://developer.apple.com/news/?id=03262020b
质量与数量并重
通常情况下,如此惊人的数量增长都会伴随着整体质量的下滑。然而,从 Flutter 社区看到的趋势正好相反。
△ 自 1.0 版本发布以来依赖 Flutter 的
为 Google Flutter 插件的 1.0 版本做好准备
-
Google Flutter 插件 https://pub.flutter-io.cn/publishers/flutter.dev/packages -
shared_preferences https://pub.flutter-io.cn/packages/shared_preferences -
path_provider https://pub.flutter-io.cn/packages/path_provider -
url_launcher https://pub.flutter-io.cn/packages/url_launcher
按照惯例,我们建议开发者在设置 package 依赖时使用脱字号 (caret,即 "^" 符号) 语法,比如: ^current-version。这个写法会被 flutter pub get 解读为 "我想使用不低于我指定版本号的最高版本,但不要升级到下一个大版本"。这也是 Dart 实现语义兼容的做法,即,大版本用于处理重要改动 (breaking change),需要开发者明确设置依赖。但在 Google 维护的这些 Flutter 插件中,我们已经稳定了 API,所以将版本指定为 1.x 是安全的。您可以在 pubspec.yaml 中这样设置:
dependencies:
shared_preferences: '>=0.5.7+2 <2.0.0'
-
语义兼容 https://semver.org/ -
Dart 的语义兼容实现 https://medium.com/@nex3/pubgrub-2fb6470504f
如果您的 pubspec.yaml 没有按照上表进行更新,那么当我们升级到 1.0.0 版本时,您的应用还有依赖的 package 就不会得到更新。在 1.0 版本里这不会有什么问题,因为 package 和上面列出来的 0.x 版本是一样的,但在升级到 1.1 或更高版本后呢?这也是为什么您需要按照上表修改 pubspec.yaml 的原因。
在某些情况下,我们也会直接提供帮助。比如,现在 pub.dev 上有 181 个依赖 shared_preferences 的 package。如果您的应用依赖于 shared_preferences <2.0.0,同时还依赖于另一个 package,而它依赖 shared_preferences <1.0.0,那 Dart 的版本求解器永远不会为您升级到 1.0.0 (或 1.1.0 等更高的版本)。但您不必坐等这 181 个 package 作者看到这篇文章后更新他们的版本依赖字符串,我们正在针对这些 package 的 pubspec.yaml 主动提交 PR,从而使其中的版本字符串符合上表中的要求。这样当我们将 Google Flutter 插件的版本号从 0.x 更新到 1.0.0 时,您的应用以及依赖的 package 都会工作正常。
将 Google Flutter 插件推进至正式版
-
Invertase http://invertase.io
-
FlutterFire repo https://github.com/FirebaseExtended/flutterfire/issues/2582
小结
Flutter 的 package 生态正在蓬勃发展,雨后春笋一般出现的 package 填补了 Flutter 生态中的诸多空白,如果只靠 Google 的 Flutter 团队的话是不可能管理如此丰富的内容的。幸运的是,现在我们有了 pub.dev 上的各种指标,包括评分、评级和 Flutter Favorite,还拥有了来自 Invertase 的鼎力相助,您完全有理由充满信心,相信自己可以在这个生态中找到适合自己下一个 Flutter 应用的 package。有了 pub.dev 中海量 package 提供的无限可能,您会打造出怎样精彩的作品呢?
推荐阅读