这不是关于具体实现,而是更多关于良好实践。
我在颤振桌面项目中具有以下结构:
- DataProviders:从两种不同文件格式之一(本地)读取数据
- 存储库:解析数据并实例化我的模型
- ProjectCubit:从 FilePicker 获取路径并从上 2 层获取项目
ProjectCubit.dart:
class ProjectCubit extends Cubit<ProjectState> {
ProjectCubit() : super(ProjectState.Closed);
Project? loadedProject;
Project? getProject() {
// return loaded instance of Project if loaded
if(loadedProject != null)
return loadedProject;
}
// creates Project instance from csv file
void importProject(String filePath) async {
emit(ProjectState.Importing);
loadedProject = await ProjectRepository().loadData(loadType: ProjectLoadType.IMPORT_FROM_CSV, filePath: filePath);
emit(ProjectState.Open);
}
// open json-Project file
void openProject(String filePath) async {
emit(ProjectState.Opening);
try {
loadedProject = await ProjectRepository().loadData(loadType: ProjectLoadType.OPEN_PROJECT_FILE, filePath: filePath);
} catch (e) {
emit(ProjectState.Closed);
Log().l.e("Opening file failed with ${e.toString()}");
}
emit(ProjectState.Open);
}
}
州是:
enum ProjectState {
Closed,
Importing,
Opening,
Open
}
ProjectCubit 中的项目实例需要在多个设置(数据表、简单输入等)的多个屏幕上进行访问和更改。例如,项目有一个客户,它有一个客户名称、客户 ID 等,必须从客户设置屏幕进行更改。
我想到了两种方法:
- 创建一个以 ProjectCubit 作为参数并从那里修改项目的 ProjectSettingsCubit、CustomerDataCubit、ProjectDataCubit 等
- 一直使用 ProjectCubit 并从表示层进行更改
实现这一目标的最佳方法是什么?如果整个结构或 Cubit 不好,为什么?
将不胜感激任何帮助,谢谢