更方便、更强大: Flutter package 生态系统更新-程序员宅基地

作者 / Chris Sells,Flutter 开发者体验产品经理

Google Flutter 团队只有一个工作目标: 让开发者在多个平台上都能构建精美的原生应用。在 Flutter 刚诞生时,我们通过专注于满足少数初始用户的需求达成了这一目标。这一阶段的成果就是用于呈现文本和图形的便于移植的渲染引擎。接下来的目标是拓展受众,我们通过高效的工作流程,结合强大的 Dart 平台,以及易用且能在 Android 和 iOS 上进行原生编译的 Flutter API 吸引了大量的开发者。随着用户群体的扩大,用户们的需求也在增加,这也促使我们在 Dart 的 pub.dev 平台上提供 Flutter package 管理和发现机制,从而将 package 作者和用户紧密地联系在一起。

这最后的一步也是特别重要的一步。做到这一点就意味着 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

由于 Flutter Favorite 的判定标准十分严格,所以带有这个徽章的 package 也会十分稀少。今天我们特别宣布,下面这些 package 加入了 Flutter Favorite 阵容:

  • 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

恭喜这些 package 的作者,也非常感谢大家对 Flutter package 生态系统做出的贡献。

  • 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 package 生态系统的成熟和多元,是我们携手社区打造出诸如 sign_in_with_apple 等插件的坚实基础。事实上,依赖 Flutter 的插件数量随时间增加的过程,也是生态系统成长的过程。

△ 自 1.0 版本发布以来依赖 Flutter 的 package 数量

通常情况下,如此惊人的数量增长都会伴随着整体质量的下滑。然而,从 Flutter 社区看到的趋势正好相反。

△ 自 1.0 版本发布以来依赖 Flutter 的

高质量 package 百分比

这里我们将 pub.dev 上整体评分中的健康度和维护状况作为质量指标。大家可以看到,自 Flutter 1.0 发布以来,不仅 package 数量迎来了巨大的增长,其生态系统的整体质量同样有很大的提升。

为 Google Flutter 插件的 1.0 版本做好准备

开发插件的不仅仅是社区。Google 内部团队也为 Flutter 维护了一系列插件。这些插件中有许多都被标记为 Flutter Favorite 以展示其高质量,包括 shared_preferences、path_provider、url_launcher 等等。但这些插件并没有全部都被标注为 "1.0" 版本,例如,shared_preferences 的版本就是 "0.5.7+2"。对于想在生产环境中使用插件的开发者来说,这样的版本号并不直观,而这个现象则是由 Dart 处理版本的方式造成的:

  • 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

对于下列插件,您可以用表格中给出的版本字符串来为 v1.0 版本做好准备:

如果您的 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 插件推进至正式版

您可能已经注意到,我们没有在上面的讨论中提及到全部的 Google Flutter 插件,包括 Firebase、Camera、Video Player 等等。这是因为我们还需要进一步打磨这些插件,使他们达到正式版本的品质;比如 Firebase 插件就需要更好、更全面的文档,以及更快的构建速度,并且降低其设置难度。我很高兴地宣布,我们正在与英国的 Invertase 合作达成这个目标,这家咨询公司在 Dart 和 Flutter 方面有着丰富的经验。

  • Invertase

    http://invertase.io

在接下来的几个月里,Invertase 将帮助我们把剩下的 Google Flutter 插件推进到正式版本的品质。如果您需要了解 Firebase 插件的详细情况,请阅读 Invertase 在 FlutterFire repo 中给出的详细说明。

  • 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 提供的无限可能,您会打造出怎样精彩的作品呢?

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014400934/article/details/106935158

智能推荐

WebView内存泄漏解决方法_web-view memory access out-程序员宅基地

文章浏览阅读292次。##1.新开进程在WebView所在的activity新开辟一个进程,在onDestroy中杀死WebView所在的进程@Overridepublic void onDestroy() { android.os.Process.killProcess(android.os.Process.myPid()); super.onDestroy();}清单文..._web-view memory access out

Springboot整合PageHelper分页插件,java分布式开发面试题-程序员宅基地

文章浏览阅读227次,点赞3次,收藏7次。可能有人会问我为什么愿意去花时间帮助大家实现求职梦想,因为我一直坚信时间是可以复制的。我牺牲了自己的大概十个小时写了这片文章,换来的是成千上万的求职者节约几天甚至几周时间浪费在无用的资源上。上面的这些(算法与数据结构)+(Java多线程学习手册)+(计算机网络顶级教程)等学习资源6072290)][外链图片转存中…(img-S0YU0wqO-1711156072290)]上面的这些(算法与数据结构)+(Java多线程学习手册)+(计算机网络顶级教程)等学习资源本文已被。

linux报错Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&inf_linux 安装vsftpd couldnot retrieve mirrorlist-程序员宅基地

文章浏览阅读1.6k次。解决方法:服务器未联网,联网即可解决_linux 安装vsftpd couldnot retrieve mirrorlist

matlab rx算法,精通MATLAB智能算法(2015代码)-程序员宅基地

文章浏览阅读363次。文件名大小更新时间Intelligent algorithm\10\s10_1\1.jpg535472014-04-26Intelligent algorithm\10\s10_1\s10_1.m87752014-04-26Intelligent algorithm\10\s10_2\1.jpg535472014-04-26Intelligent algorithm\10\s10_2\bys.m1..._rx-algorithm及其变体代码实现

Vue使用AntV/G2例子_vue2中使用antv中的水波图基础用法-程序员宅基地

文章浏览阅读780次。Vue项目中使用AntV/G2图表_vue2中使用antv中的水波图基础用法

Matlab GUI图像融合实现与优化_matlab 如何把两个图片融合-程序员宅基地

文章浏览阅读158次。图像融合是图像处理中的重要应用领域之一,其主要目的是将多幅图像信息融合为一张更加清晰、更具信息含量的图像。同时,在优化图像融合算法的过程中,Matlab工具箱已经提供了许多有用的函数和工具,帮助我们更好地进行图像处理和分析。本文介绍了基于Matlab GUI环境实现图像融合的方法,并提供了几种常用的图像融合算法。同时,在实现图像融合时,需要根据具体应用场景以及图像特征来选择和调整不同的融合方法和参数。在实现图像融合时,需要先将待融合的图像进行对齐。根据用户所选的融合方法,我们可以实现相应的图像融合算法。_matlab 如何把两个图片融合

随便推点

大数问题——26进制_z-26进制数是一个每位都是大写字母的数字。 a、b、c、…、x、y、z 分别依次代表一-程序员宅基地

文章浏览阅读4.3k次。杭电2100LovekeyProblem Description XYZ-26进制数是一个每位都是大写字母的数字。 A、B、C、…、X、Y、Z 分别依次代表一个0 ~ 25 的数字,一个 n 位的26进制数转化成是10进制的规则如下 A0A1A2A3…An-1 的每一位代表的数字为a0a1a2a3…an-1 ,则该XYZ-26进制数的10进制值就为 m = a0 * 26^(n-1) + a_z-26进制数是一个每位都是大写字母的数字。 a、b、c、…、x、y、z 分别依次代表一

程序员必知的8大排序(一)-------直接插入排序,希尔排序(java实现)_直接插入排序34,65,12,56,78,10-程序员宅基地

文章浏览阅读129次。程序员必知的8大排序(一)-------直接插入排序,希尔排序(java实现)原创 2012年05月12日 11:18:05标签:java /数据结构 /算法50847前几天,看到一篇前辈的博文“程序员必知的8大排序”,不禁的手痒起来,重新翻开严蔚敏老师的《数据结构》复习了一遍,然后一一的用java去实现,其中有不足之处,还望各位道友指正_直接插入排序34,65,12,56,78,10

Android:Json数据转换成Map_android json to hashmap-程序员宅基地

文章浏览阅读1.6k次。本文利用Gson来做实现,先导入:implementation 'com.google.code.gson:gson:2.8.6'主要利用的是JsonObject里的entrySet()方法,相关Demo代码如下:import com.google.gson.Gson;import com.google.gson.JsonElement;import com.google.gson.JsonObject;import java.util.HashMap;import java.ut_android json to hashmap

R语言 quantmod下载股票代码无法访问Yahoo的唯一解决方法_r语言下载不了雅虎数据-程序员宅基地

文章浏览阅读394次。总结而言,当无法访问Yahoo时,使用quantmod包下载股票代码的一个可行解决方法是选择替代数据源,例如Alpha Vantage,并使用其提供的API密钥来获取数据。值得注意的是,使用Alpha Vantage作为替代数据源可能会有一些限制,例如每分钟请求的次数有限制,并且可能无法提供与Yahoo相同的数据范围和质量。getSymbols函数用于从指定的数据源获取股票数据,参数src用于指定数据源,api.key用于传递API密钥。在获得API密钥后,我们可以使用以下代码来获取股票代码。_r语言下载不了雅虎数据

Matlab函数句柄调用图像K均值分类_function varargout = classification_outputfcn(hobj-程序员宅基地

文章浏览阅读1.2k次。function varargout = guideTemp2(varargin)% GUIDETEMP2 MATLAB code for guideTemp2.fig% GUIDETEMP2, by itself, creates a new GUIDETEMP2 or raises the existing% singleton*.%% H = GUID_function varargout = classification_outputfcn(hobject, eventdata, handles)

1688API获得店铺详情_1688获得店铺详情-程序员宅基地

文章浏览阅读271次。seller_info - 获得店铺详情测试网址:http://console.open.onebound.cn/console/?i=eidiResult Object:---------------------------------------{ "user": { "nick": "yylsmould", "city": "浙江 宁波", "good_num": "", "level": "11", "user_num_id": null, "company_i_1688获得店铺详情