在Flutter 项目开发中怎么避免项目失败?使用自定义 Flutter 包避免项目失败方法!

2021-08-25 14:26:56 浏览数 (3427)

领导一个成功的 Flutter 应用程序开发项目往往源于应用程序架构的强大组织。使用 Flutter 包是将应用程序文件和功能部分分组为可重用组件的绝佳方式,从而使团队协作更容易。本教程将带您完成为下一个 Flutter 项目创建自定义包所需的所有步骤。

还提供完整的分步视频 和完整代码 

概述

在讲解如何创建自定义包之前,我们先回顾一下 Flutter 开发者为什么需要使用包,以及自定义包是如何使用的。该包的目标是隔离可重用的功能,并使应用程序的其他部分可以轻松访问它。单个应用程序可以有多个自定义包。

例如,我们可以创建一个自定义包来处理不同按钮的 HTTP 网络 API 连接,以将结果显示到不同的屏幕。组织代码的一个好方法是将所有连接功能隔离到一个名为connection. 连接目录成为连接包。您还可以为动画创建另一个包并在该包中组织自定义动画。您创建的每个包都放在一个名为packages.

一旦代码在包中隔离,您就可以在主项目pubspec.yaml应用程序配置文件中使您的应用程序可以访问该包。pubspec.yaml根据您分发包的方式,文件的语法略有不同。

一旦使用 使程序包可供应用程序使用pubspec.yaml,使用该程序包的每个文件都会使用以下语法导入该程序包import 'package:name/file.dart`;

让我们用例子来说明这个过程,从pubspec.yaml 配置开始。

3种类型的包依赖配置格式 

构建和分发自定义 Flutter 包有以下三种策略:

  1. 发布到 pub.dev;
  2. 发布到 GitHub 或等效的独立存储库;
  3. 将包存储在您的主项目存储库中。

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


恭喜,您刚刚创建了一个自定义包!

步骤回顾

  1. 创建一个带有flutter create --template=package名称的包。
  2. 为您的包功能创建一个新文件,并将其链接到主包文件part of。
  3. 在主包文件中,链接到带有part.

使用你的新包

在pubspec.yaml主项目目录的文件中,添加新包的路径。


 导入包main.dart并通过调用方法使用它hello()。


当您按下按钮时,您应该会在控制台中看到“Hello, world”。


扩展您的包

使用此技术,您可以向每个新目录添加额外的目录和文件。您还可以为不同类型的功能创建不同的包。

随着应用程序的增长,您将需要管理应用程序的状态。我之前的文章Flutter 2.0 State Management Introduction with Provider 5.0解释了如何使用 provider管理 Flutter 应用程序的状态。 

概括

强大的应用程序架构组织是项目成功的关键。未能管理功能和状态等基本领域可能会导致延迟,在某些情况下还可能导致未完成的项目。有效使用标准的 Flutter 包系统是组织应用程序架构的绝佳工具。为了保持开发简单,请将您的包放在主应用程序存储库中,以降低包版本管理的复杂性。通过降低包版本管理的复杂性,您和您的团队将增加使用包的机会,让每个人都走上成功启动项目的道路。