本文由 简悦SimpRead 转码,原文地址 verygood.ventures
一个精心策划的Flutter和Dart软件包列表,使您的Flutter项目更加完美。阅读更多关于......
开源包在软件开发中发挥着巨大的作用,特别是在构建Flutter应用程序时。Pub.dev拥有一个由24000多个软件包组成的不断增长的生态系统,可以帮助您为您的Flutter应用程序添加功能,并利用社区创建的解决方案。
本博客包含一个精心策划的Flutter和Dart软件包列表,这些软件包对我们在VGV的客户项目开发至关重要,同时也是我们在个人项目中使用的。
目录:
✨ 表示本次更新中添加的软件包
顶级开放源代码包
alchemist ✨
Alchemist是一个旨在加强黄金测试的包。这个包由Betterment x VGV开发,包含一个声明式的API,解决了Flutter框架内黄金测试支持的一些痛点--比如修复持续集成测试片断和简化注入自定义主题。这里有一个关于如何使用alchemist的博客与你的黄金测试。
Collection✨
如果你在你的代码库中使用集合,这个来自Dart团队的包是必须的。Collection包含了一些函数,可以帮助解决集合中元素的平等问题,以及集合之间的平等问题,列表操作,优先级队列的实现,以及包装器。
coverage
我们相信100%代码覆盖率的重要性,它可以确保每一行代码都经过测试,并且表现出预期的效果。coverage是一个伟大的Dart包,它允许用户收集、操作和格式化覆盖率数据。
通过coverage,你可以从Dart虚拟机中收集覆盖率,并将该覆盖率数据格式化为LCOV或pretty-printed格式。
cloud_firestore
cloud_firestore是一个Flutter插件,可以让用户访问Firebase Cloud Firestore数据库,一个用于移动、网络和服务器开发的NoSQL云数据库。这使得你的应用程序可以读取、写入并对Firestore数据库的实时变化做出反应。
请务必查看关于你如何在自己的项目中开始使用cloud_firestore包的文档。
equatable ✨
Equatable是一个用于比较Dart对象的小而有用的包。这个包重载了==运算符,允许你在不生成代码的情况下比较对象。
firebase_auth
我们不能不推荐cloud_firestore,同时也要提到firebase_auth。firebase_auth允许用户访问Firebase Authentication API,通过密码、电话号码和服务提供商(如Twitter、Facebook和Google)实现认证。
请访问认证使用文档以了解更多关于将firebase_auth集成到你的项目中的信息。
Flame✨
Flame是Flutter中游戏开发的必备工具。它利用Flutter框架来提供你构建高性能游戏所需的一切。有了flame,您的Flutter游戏只需一个小部件就能完成。开始使用他们的详细文档。
flame_bloc ✨
如果你使用flame来构建一个游戏,你也可以利用bloc库来管理游戏状态。flame_bloc包使得访问和监听bloc和cubits变得容易。关于使用flame_bloc的教程,请查看我们的博客。
flutter_gen
在Flutter中,使用字符串来指定一个资产的路径并不安全。例如,如果你不小心打错了资产路径,就会抛出一个断言错误。flutter_gen是一个资产、字体、颜色等的代码生成器,有效地摆脱了基于字符串的API。
使用flutter_gen,您可以使用代码生成器来生成编译安全的资产引用,而不是使用字符串作为资产路径。
# pubspec.yaml
flutter:
assets:
- assets/images/profile.jpg
Widget build(BuildContext context) {
return Assets.images.profile.image();
}
关于如何安装和使用flutter_gen的更多信息,请务必查看他们的文档。
googleapis
googleapis Dart包提供了自动生成的Dart库,以访问Google API Client Libraries中的API。安装这一个包,你就可以访问几十个可用的谷歌API,包括Admin SDK、日历、Dialogflow、Drive等。
请务必阅读一下如何使用Google APIs with Flutter。
hive
hive是一个Dart包,为开发者提供了一个易于访问的NoSQL数据库。它简单、强大、直观--我们很欣赏你能在hive的类似地图的数据库内轻松存储基元和Dart对象。下面是一个例子。
final box = Hive.box(‘myBox’);
box.put(‘company’, ‘VGV’);
final company = box.get(‘company’);
print(‘Company: $company);
in_app_review
用户反馈可以是应用开发过程中不可或缺的一部分,所以我们将in_app_reviewFlutter包列入我们的名单。开发者可以在应用内提示用户进行应用商店的评论。
InAppReview.instance.openStoreListing(appStoreId: '...', microsoftStoreId: '...');
Membrane ✨
Membrane是一个有助于从Rust到Dart生成代码的包。由于强调性能和严格的类型,它是将代码移植到Dart的可靠方法。
modal_bottom_sheet ✨
由我们的队友Jaime Blasco维护,modal_bottom_sheet使得实现一个模态底层表单变得简单,它既具有性能又能在任何本地移动设备上看起来像个家。它包括对滚动、拖动和其他自定义功能的支持。
pana
pana是一个方便的Dart包,可以让你分析你的应用程序中使用的其他包的健康和质量。它评估了多个类别的包。
- 遵循Dart惯例
- 提供文档
- 支持多个平台
- 通过静态分析
- 支持最新的依赖关系
要开始使用,只需从pub.dev安装pana。
dart pub global activate pana
然后,指定一个软件包或一个本地目录来分析。
pana --hosted {published package name} [{version}]
pana {local directory}
recase ✨
Recase是一个小而强大的软件包,可以轻松地将输入文本的大小写变为snake_case、dot.case、path/case、PascalCase等。
purchases_flutter ✨
Purchases_flutter是RevenueCat的一个有用的软件包,用于在你的Flutter应用程序中使用StoreKit和Google Play Billing实现应用内购买。在一个地方获得购买跟踪、应用内订阅和分析。
url_launcher
顾名思义,url_launcher Flutter包是一种方便的方式,可以从您的应用程序中启动外部URL,并支持许多URL方案。当你想依靠底层平台来为你处理打开URL时,请使用这个包。
const url = ‘https://verygood.ventures/blog’;
if (await canLaunch(url)) {
await launch(url);
}
顶级VGV包
flow_builder
flow_builder是一个Flutter包,它简化了遵循新Navigator 2.0 API的导航堆栈的使用。只需创建一个流状态,flow_builder就能根据流状态的变化生成一个新的导航栈。欲了解更多信息,请务必查看我们关于将flow_builder纳入您的项目的文章。
flutter_bloc
我们更喜欢使用flutter_bloc包进行状态管理。作为Flutter的最爱,flutter_bloc是一个简单、可预测、易测试的状态管理解决方案,它与VGV的开发实践完美契合。我们甚至写了一篇文章,深入探讨了我们为什么使用flutter_bloc。
mocktail
自动测试是我们开发工作流程的一个关键组成部分,以确保我们的应用程序按预期执行。编写自动化测试的一个常用包是mocktail。mocktail,受mockito的启发,允许用户通过创建模拟来存根和验证方法行为,而不需要依赖null安全代码库的代码生成。
// A Real Dog Class
class Dog{
String bark() => 'woof!';
}
// A Mock Dog Class
class MockDog extends Mock implements Dog {}
void main() {
final dog = MockDog();
final sound = ‘bark’;
// Stub the `bark` method.
when(() => dog.bark()).thenReturn(sound);
// Interact with the mock dog instance.
expect(dog.bark(), equals(sound));
// Verify the interaction occurred.
verify(() => dog.bark()).called(1);
}
mocktail也与我们新的mockingjay包协同工作,它允许用户模拟、测试和验证导航行为。请继续关注关于这个新包的更多信息!
mason
mason Dart包是一个通过自动化提高效率的关键工具。使用mason,你可以以砖的形式创建和定制可重用的代码模板。这里有一篇关于如何使用mason的教程。
formz
在VGV,我们使用formz包,它以一种容易理解的格式大量简化了表单的表示和验证。只需扩展FormzInput并提供输入和错误类型。
// Define input validation errors
enum NameInputError { empty }
class NameInput extends FormzInput {
// Call super.pure to represent an unmodified form input.
const NameInput.pure() : super.pure('');
// Call super.dirty to represent a modified form input.
const NameInput.dirty({String value = ''}) : super.dirty(value);
// Override validator to handle validating a given input value.
@override
NameInputError validator(String value) {
return value?.isNotEmpty == true ? null : NameInputError.empty;
}
}
与上面定义的NameInput类交互是简单而直观的。
final name = NameInput.pure();
print(name.value); // ''
print(name.valid); // false
print(name.status); // FormzInputStatus.pure
print(name.error); // NameInputError.empty
final joe = NameInput.dirty(value: 'joe');
print(joe.value); // 'joe'
print(joe.valid); // true
print(joe.status); // FormzInputStatus.valid
print(joe.error); // null
print(joe.toString()); // NameInput('joe', true);
very_good_analysis
提示工具对于通过检查文体错误来确保高质量、一致的代码是非常好的。我们创建了very_good_analysis包,以结合来自(现已废弃的)pedantic package的规则,以及一些我们在VGV使用的额外选项。阅读更多关于very_good_analysis。
very_good_cli ✨
very_good_cli是一个命令行工具,可以用来生成一些有意见的模板,包括。Very Good Core,我们有主见的Flutter启动程序,Flutter包,Dart包,以及联合插件。我们创建了Very Good CLI,使其更容易启动新的项目--无论是多平台应用程序还是Flutter包--并确保我们的最佳实践在开箱时就能实现。
Very_good_workflows ✨
GitHub的工作流程可以帮助你标准化作为CI流程一部分的运行步骤--我们通常在合并前对每个PR使用这些步骤。我们创建了very_good_workflows,以开源我们在VGV用于检查意见的最佳做法的工作流程。在这个博客中了解更多关于定制工作流程的信息。
虽然这个列表并不详尽,但我们想展示我们在VGV工作和个人Flutter项目中一贯使用的顶级软件包。请查看pub.dev,了解Flutter和Dart软件包的完整目录。
注意:本文已于2022年4月更新,增加了一些包。为了提高可读性,我们做了一些改动,包括增加了一个目录,并按字母顺序组织了列表。