【发布时间】:2021-10-22 20:26:24
【问题描述】:
这不是关于具体实施,而是更多关于良好实践。
我在一个flutter桌面项目中有如下结构:
- 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 中的项目实例需要在多个设置(数据表、简单输入等)的多个屏幕上进行访问和更改。例如,Project 有一个 Customer,它有一个 customerName、customerId 等,必须从 Customer-Settings 屏幕进行更改。
我想到了两种方法:
- 创建一个 ProjectSettingsCubit、CustomerDataCubit、ProjectDataCubit 等,它们将 ProjectCubit 作为参数并从那里修改项目
- 一直使用 ProjectCubit 并从表示层进行更改
实现这一目标的最佳方法是什么?如果整个结构或 Cubit 不好,为什么?
不胜感激,谢谢
【问题讨论】:
标签: flutter dart desktop bloc cubit