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

智能推荐

while循环&CPU占用率高问题深入分析与解决方案_main函数使用while(1)循环cpu占用99-程序员宅基地

文章浏览阅读3.8k次,点赞9次,收藏28次。直接上一个工作中碰到的问题,另外一个系统开启多线程调用我这边的接口,然后我这边会开启多线程批量查询第三方接口并且返回给调用方。使用的是两三年前别人遗留下来的方法,放到线上后发现确实是可以正常取到结果,但是一旦调用,CPU占用就直接100%(部署环境是win server服务器)。因此查看了下相关的老代码并使用JProfiler查看发现是在某个while循环的时候有问题。具体项目代码就不贴了,类似于下面这段代码。​​​​​​while(flag) {//your code;}这里的flag._main函数使用while(1)循环cpu占用99

【无标题】jetbrains idea shift f6不生效_idea shift +f6快捷键不生效-程序员宅基地

文章浏览阅读347次。idea shift f6 快捷键无效_idea shift +f6快捷键不生效

node.js学习笔记之Node中的核心模块_node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是-程序员宅基地

文章浏览阅读135次。Ecmacript 中没有DOM 和 BOM核心模块Node为JavaScript提供了很多服务器级别,这些API绝大多数都被包装到了一个具名和核心模块中了,例如文件操作的 fs 核心模块 ,http服务构建的http 模块 path 路径操作模块 os 操作系统信息模块// 用来获取机器信息的var os = require('os')// 用来操作路径的var path = require('path')// 获取当前机器的 CPU 信息console.log(os.cpus._node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是

数学建模【SPSS 下载-安装、方差分析与回归分析的SPSS实现(软件概述、方差分析、回归分析)】_化工数学模型数据回归软件-程序员宅基地

文章浏览阅读10w+次,点赞435次,收藏3.4k次。SPSS 22 下载安装过程7.6 方差分析与回归分析的SPSS实现7.6.1 SPSS软件概述1 SPSS版本与安装2 SPSS界面3 SPSS特点4 SPSS数据7.6.2 SPSS与方差分析1 单因素方差分析2 双因素方差分析7.6.3 SPSS与回归分析SPSS回归分析过程牙膏价格问题的回归分析_化工数学模型数据回归软件

利用hutool实现邮件发送功能_hutool发送邮件-程序员宅基地

文章浏览阅读7.5k次。如何利用hutool工具包实现邮件发送功能呢?1、首先引入hutool依赖<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.19</version></dependency>2、编写邮件发送工具类package com.pc.c..._hutool发送邮件

docker安装elasticsearch,elasticsearch-head,kibana,ik分词器_docker安装kibana连接elasticsearch并且elasticsearch有密码-程序员宅基地

文章浏览阅读867次,点赞2次,收藏2次。docker安装elasticsearch,elasticsearch-head,kibana,ik分词器安装方式基本有两种,一种是pull的方式,一种是Dockerfile的方式,由于pull的方式pull下来后还需配置许多东西且不便于复用,个人比较喜欢使用Dockerfile的方式所有docker支持的镜像基本都在https://hub.docker.com/docker的官网上能找到合..._docker安装kibana连接elasticsearch并且elasticsearch有密码

随便推点

Python 攻克移动开发失败!_beeware-程序员宅基地

文章浏览阅读1.3w次,点赞57次,收藏92次。整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)近年来,随着机器学习的兴起,有一门编程语言逐渐变得火热——Python。得益于其针对机器学习提供了大量开源框架和第三方模块,内置..._beeware

Swift4.0_Timer 的基本使用_swift timer 暂停-程序员宅基地

文章浏览阅读7.9k次。//// ViewController.swift// Day_10_Timer//// Created by dongqiangfei on 2018/10/15.// Copyright 2018年 飞飞. All rights reserved.//import UIKitclass ViewController: UIViewController { ..._swift timer 暂停

元素三大等待-程序员宅基地

文章浏览阅读986次,点赞2次,收藏2次。1.硬性等待让当前线程暂停执行,应用场景:代码执行速度太快了,但是UI元素没有立马加载出来,造成两者不同步,这时候就可以让代码等待一下,再去执行找元素的动作线程休眠,强制等待 Thread.sleep(long mills)package com.example.demo;import org.junit.jupiter.api.Test;import org.openqa.selenium.By;import org.openqa.selenium.firefox.Firefox.._元素三大等待

Java软件工程师职位分析_java岗位分析-程序员宅基地

文章浏览阅读3k次,点赞4次,收藏14次。Java软件工程师职位分析_java岗位分析

Java:Unreachable code的解决方法_java unreachable code-程序员宅基地

文章浏览阅读2k次。Java:Unreachable code的解决方法_java unreachable code

标签data-*自定义属性值和根据data属性值查找对应标签_如何根据data-*属性获取对应的标签对象-程序员宅基地

文章浏览阅读1w次。1、html中设置标签data-*的值 标题 11111 222222、点击获取当前标签的data-url的值$('dd').on('click', function() { var urlVal = $(this).data('ur_如何根据data-*属性获取对应的标签对象

推荐文章

热门文章

相关标签