在自定义包 dart 之间共享模型 class

Share model class between custom packages dart

我在 lib 文件夹外创建了 2 个包,名为:authentication_repositoryuser_repository 来处理网络请求。

这是我的项目结构:

├── lib
├── packages
│ ├── authentication_repository
│ └── user_repository

因为两个 repo 都需要 User class 我想为他们提供相同的源文件,但我不知道该怎么做。

现在每个 repo 都有自己的 User class,这是一个问题,因为当我将它们导入同一个文件时,Flutter 不知道要使用哪个 user.dart 文件,如果在 authentication_repository 中定义的一个或在 user_repository 中定义的另一个。 每个 repo 都有自己的 pubspec.yaml 文件,所以也许我可以从这里开始?

有人建议我创建一个名为 models 的新存储库并在此处定义 User class,然后 authentication_repositoryuser_repository 都将依赖于models 所以他们应该能够访问同一个文件。这个想法听起来不错,但我不知道怎么做。

编辑:

我使用 User class 和模型文件创建了一个名为 models 的新存储库:

class User extends Equatable {
  const User(this.id);

  final String id;

  @override
  List<Object> get props => [id];
}

和模型文件:

library models;

export './src/user.dart' show User;

现在如何将此包添加到其他 2 个存储库?这是 models/pubspec.yaml :

name: models
description: Dart package which manages the user domain.
version : ^1.0.0
publish_to: none

environment:
  sdk: ">=2.16.0 <3.0.0"

dependencies:
  equatable: ^2.0.0

现在我想我应该可以将它添加到其他 pubspec.yaml 文件中,就像 user_repository 中的这个一样:

name: user_repository
description: Dart package which manages the user domain.
publish_to: none

environment:
  sdk: ">=2.16.0 <3.0.0"

dependencies:
  models: ^1.0.0

但在 models/pubspec.yaml 收到此错误: Error on line 3, column 11 of pubspec.yaml: Invalid version number: Could not parse "^1.0.0".

它比你想象的要简单。只需按照创建其他包的相同方式创建一个新包 models。在创建的包中,您将看到 models.dart。该文件将被其他包导入,如

import 'package:models/models.dart

在 lib 文件夹中创建新文件夹 src 并将包含 User class 的 user.dart 文件添加到 user.dart 中。 要使其可以从根文件中的包访问 models.dart 添加这些行

library models;
export './src/user.dart' show User;

不要忘记将包添加为其他包的依赖项 pubspec.yaml:

dependencies:
  flutter:
    sdk: flutter
  models:
    path: [RELATIVE_PATH_TO_PACKAGE]

RELATIVE_PATH_TO_PACKAGE - 是相对于您的其他包的路径。如果将 models 包放在 packages 文件夹中,则在 authentication_repository 的 pubspec.yaml 中:

dependencies:
  flutter:
    sdk: flutter
  models:
    path: '../models'