在自定义包 dart 之间共享模型 class
Share model class between custom packages dart
我在 lib
文件夹外创建了 2 个包,名为:authentication_repository
和 user_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_repository
和 user_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'
我在 lib
文件夹外创建了 2 个包,名为:authentication_repository
和 user_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_repository
和 user_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'