更方便、更强大: 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

智能推荐

使用nginx解决浏览器跨域问题_nginx不停的xhr-程序员宅基地

文章浏览阅读1k次。通过使用ajax方法跨域请求是浏览器所不允许的,浏览器出于安全考虑是禁止的。警告信息如下:不过jQuery对跨域问题也有解决方案,使用jsonp的方式解决,方法如下:$.ajax({ async:false, url: 'http://www.mysite.com/demo.do', // 跨域URL ty..._nginx不停的xhr

在 Oracle 中配置 extproc 以访问 ST_Geometry-程序员宅基地

文章浏览阅读2k次。关于在 Oracle 中配置 extproc 以访问 ST_Geometry,也就是我们所说的 使用空间SQL 的方法,官方文档链接如下。http://desktop.arcgis.com/zh-cn/arcmap/latest/manage-data/gdbs-in-oracle/configure-oracle-extproc.htm其实简单总结一下,主要就分为以下几个步骤。..._extproc

Linux C++ gbk转为utf-8_linux c++ gbk->utf8-程序员宅基地

文章浏览阅读1.5w次。linux下没有上面的两个函数,需要使用函数 mbstowcs和wcstombsmbstowcs将多字节编码转换为宽字节编码wcstombs将宽字节编码转换为多字节编码这两个函数,转换过程中受到系统编码类型的影响,需要通过设置来设定转换前和转换后的编码类型。通过函数setlocale进行系统编码的设置。linux下输入命名locale -a查看系统支持的编码_linux c++ gbk->utf8

IMP-00009: 导出文件异常结束-程序员宅基地

文章浏览阅读750次。今天准备从生产库向测试库进行数据导入,结果在imp导入的时候遇到“ IMP-00009:导出文件异常结束” 错误,google一下,发现可能有如下原因导致imp的数据太大,没有写buffer和commit两个数据库字符集不同从低版本exp的dmp文件,向高版本imp导出的dmp文件出错传输dmp文件时,文件损坏解决办法:imp时指定..._imp-00009导出文件异常结束

python程序员需要深入掌握的技能_Python用数据说明程序员需要掌握的技能-程序员宅基地

文章浏览阅读143次。当下是一个大数据的时代,各个行业都离不开数据的支持。因此,网络爬虫就应运而生。网络爬虫当下最为火热的是Python,Python开发爬虫相对简单,而且功能库相当完善,力压众多开发语言。本次教程我们爬取前程无忧的招聘信息来分析Python程序员需要掌握那些编程技术。首先在谷歌浏览器打开前程无忧的首页,按F12打开浏览器的开发者工具。浏览器开发者工具是用于捕捉网站的请求信息,通过分析请求信息可以了解请..._初级python程序员能力要求

Spring @Service生成bean名称的规则(当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致)_@service beanname-程序员宅基地

文章浏览阅读7.6k次,点赞2次,收藏6次。@Service标注的bean,类名:ABDemoService查看源码后发现,原来是经过一个特殊处理:当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致public class AnnotationBeanNameGenerator implements BeanNameGenerator { private static final String C..._@service beanname

随便推点

二叉树的各种创建方法_二叉树的建立-程序员宅基地

文章浏览阅读6.9w次,点赞73次,收藏463次。1.前序创建#include&lt;stdio.h&gt;#include&lt;string.h&gt;#include&lt;stdlib.h&gt;#include&lt;malloc.h&gt;#include&lt;iostream&gt;#include&lt;stack&gt;#include&lt;queue&gt;using namespace std;typed_二叉树的建立

解决asp.net导出excel时中文文件名乱码_asp.net utf8 导出中文字符乱码-程序员宅基地

文章浏览阅读7.1k次。在Asp.net上使用Excel导出功能,如果文件名出现中文,便会以乱码视之。 解决方法: fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);_asp.net utf8 导出中文字符乱码

笔记-编译原理-实验一-词法分析器设计_对pl/0作以下修改扩充。增加单词-程序员宅基地

文章浏览阅读2.1k次,点赞4次,收藏23次。第一次实验 词法分析实验报告设计思想词法分析的主要任务是根据文法的词汇表以及对应约定的编码进行一定的识别,找出文件中所有的合法的单词,并给出一定的信息作为最后的结果,用于后续语法分析程序的使用;本实验针对 PL/0 语言 的文法、词汇表编写一个词法分析程序,对于每个单词根据词汇表输出: (单词种类, 单词的值) 二元对。词汇表:种别编码单词符号助记符0beginb..._对pl/0作以下修改扩充。增加单词

android adb shell 权限,android adb shell权限被拒绝-程序员宅基地

文章浏览阅读773次。我在使用adb.exe时遇到了麻烦.我想使用与bash相同的adb.exe shell提示符,所以我决定更改默认的bash二进制文件(当然二进制文件是交叉编译的,一切都很完美)更改bash二进制文件遵循以下顺序> adb remount> adb push bash / system / bin /> adb shell> cd / system / bin> chm..._adb shell mv 权限

投影仪-相机标定_相机-投影仪标定-程序员宅基地

文章浏览阅读6.8k次,点赞12次,收藏125次。1. 单目相机标定引言相机标定已经研究多年,标定的算法可以分为基于摄影测量的标定和自标定。其中,应用最为广泛的还是张正友标定法。这是一种简单灵活、高鲁棒性、低成本的相机标定算法。仅需要一台相机和一块平面标定板构建相机标定系统,在标定过程中,相机拍摄多个角度下(至少两个角度,推荐10~20个角度)的标定板图像(相机和标定板都可以移动),即可对相机的内外参数进行标定。下面介绍张氏标定法(以下也这么称呼)的原理。原理相机模型和单应矩阵相机标定,就是对相机的内外参数进行计算的过程,从而得到物体到图像的投影_相机-投影仪标定

Wayland架构、渲染、硬件支持-程序员宅基地

文章浏览阅读2.2k次。文章目录Wayland 架构Wayland 渲染Wayland的 硬件支持简 述: 翻译一篇关于和 wayland 有关的技术文章, 其英文标题为Wayland Architecture .Wayland 架构若是想要更好的理解 Wayland 架构及其与 X (X11 or X Window System) 结构;一种很好的方法是将事件从输入设备就开始跟踪, 查看期间所有的屏幕上出现的变化。这就是我们现在对 X 的理解。 内核是从一个输入设备中获取一个事件,并通过 evdev 输入_wayland

推荐文章

热门文章

相关标签