领导一个成功的 Flutter 应用程序开发项目往往源于应用程序架构的强大组织。使用 Flutter 包是将应用程序文件和功能部分分组为可重用组件的绝佳方式,从而使团队协作更容易。本教程将带您完成为下一个 Flutter 项目创建自定义包所需的所有步骤。
概述
在讲解如何创建自定义包之前,我们先回顾一下 Flutter 开发者为什么需要使用包,以及自定义包是如何使用的。该包的目标是隔离可重用的功能,并使应用程序的其他部分可以轻松访问它。单个应用程序可以有多个自定义包。
例如,我们可以创建一个自定义包来处理不同按钮的 HTTP 网络 API 连接,以将结果显示到不同的屏幕。组织代码的一个好方法是将所有连接功能隔离到一个名为connection. 连接目录成为连接包。您还可以为动画创建另一个包并在该包中组织自定义动画。您创建的每个包都放在一个名为packages.
一旦代码在包中隔离,您就可以在主项目pubspec.yaml应用程序配置文件中使您的应用程序可以访问该包。pubspec.yaml根据您分发包的方式,文件的语法略有不同。
一旦使用 使程序包可供应用程序使用pubspec.yaml,使用该程序包的每个文件都会使用以下语法导入该程序包import 'package:name/file.dart`;
让我们用例子来说明这个过程,从pubspec.yaml 配置开始。
3种类型的包依赖配置格式
构建和分发自定义 Flutter 包有以下三种策略:
- 发布到 pub.dev;
- 发布到 GitHub 或等效的独立存储库;
- 将包存储在您的主项目存储库中。
1. pub.dev
如果将包发布到 pub.dev,则可以从pubspec.yaml, 依赖项下访问它。由于我的库不在 pub.dev 上,我将展示 HTTP 包的语法。
YAML:
dependencies:
http : ^0.13.3
2. 远程 Git 服务器
在大多数情况下,您不需要让很多人都可以访问您的包。在这些情况下,您可以使用以下语法从网络访问库。
YAML:
dependencies:
theta:
url: https://github.com/codetricity/theta
ref: mai
在上面的例子中,包名是theta. 该包在 GitHub 上的main 分支下可用。
3. 项目的 Packages 文件夹
您还可以将包存储在主应用程序项目文件夹中。如果包名是theta,则存放在主工程目录下packages/theta。
如果包存储在本地,则pubspec.yaml 语法如下。
YAML:
dependencies:
theta:
path: packages/theta
使用自定义包
在所有三种方法中,您都可以将自定义包导入到应用程序中以使用它。
应用代码
Dart:
import 'package:theta/theta.dart';
void main(List<String> args) async {
print(await Camera.info);
}
自定义封装代码
为了说明代码的哪一部分来自包,我将包含库的一小段。
在上面的示例中,该部分Camera.info是位于包中的静态 gettertheta/lib/src/protocols.dart
Dart:
const String _baseUrl = 'http://192.168.1.1/osc/';
class Camera {
static Future<Map<String, dynamic>> get info async {
var url = _baseUrl + 'info';
var response = connect(url, 'get');
return response;
}
...
创建包后,可以轻松访问包中的所有类和方法。
分销策略建议
您应该首先将您的包放在应用程序存储库packages 目录中,并且最初仅将包用于您的一个应用程序。应用程序和包稳定后,您可以将其分发到 GitHub 上,供团队或组织的其他成员直接从他们的pubspec.yaml 文件中使用。
在您让其他组可以访问该包并且他们开始使用它之后,您将需要花更多时间进行包版本管理。
创建包
创建一个新项目。我将我的项目称为theta_api_intro_tutorial。
在主项目顶级目录中创建一个名为 packages 的文件夹。
切换到目录并创建一个新包。在此示例中,我的包名为theta_connection.
flutter create --template=package theta_connection
当你创建一个包flutter create,它会自动创建另一套lib,pubspec.yaml和README.md文件。
在新创建的lib 目录下,有一个主theta_connection.dart文件,它作为包中其余文件的中央连接点。
从theta_connection.dart和test/theta_connection.dart文件中删除示例代码。
部分
创建一个新文件来保存新包的第一个方法。我已经调用了我的文件protocols/test_hello.dart。
这个文件的关键学习点是学习如何包含part of '../theta_connection.dart'到文件的顶部。这是从包中的每个文件到主包文件的连接点,稍后将允许您的应用程序访问该方法。
部分
除了使用 to 方法连接文件外theta_connection.dart,还需要添加一个连接 from theta_connection.darttoprotocols/test_hello.dart
恭喜,您刚刚创建了一个自定义包!
步骤回顾
- 创建一个带有flutter create --template=package名称的包。
- 为您的包功能创建一个新文件,并将其链接到主包文件part of。
- 在主包文件中,链接到带有part.
使用你的新包
在pubspec.yaml主项目目录的文件中,添加新包的路径。
导入包main.dart并通过调用方法使用它hello()。
当您按下按钮时,您应该会在控制台中看到“Hello, world”。
扩展您的包
使用此技术,您可以向每个新目录添加额外的目录和文件。您还可以为不同类型的功能创建不同的包。
随着应用程序的增长,您将需要管理应用程序的状态。我之前的文章Flutter 2.0 State Management Introduction with Provider 5.0解释了如何使用 provider管理 Flutter 应用程序的状态。
概括
强大的应用程序架构组织是项目成功的关键。未能管理功能和状态等基本领域可能会导致延迟,在某些情况下还可能导致未完成的项目。有效使用标准的 Flutter 包系统是组织应用程序架构的绝佳工具。为了保持开发简单,请将您的包放在主应用程序存储库中,以降低包版本管理的复杂性。通过降低包版本管理的复杂性,您和您的团队将增加使用包的机会,让每个人都走上成功启动项目的道路。