在使用 Cubit State Management 时,我有一个问题:Cubit 类中访问 Repository 类的方法是否必须是异步的? Repository 类中访问远程数据库的方法当然是异步的,但就示例代码所示,为什么 Cubit 类中的方法应该是异步的?
以下是相关代码片段:
肘级:
Future<void> getAllCost() async {
emit(
state.copyWith(status: ManageCostStatus.loading),
);
try {
late List<Cost> costs = [];
costs = await supabaseRepsitory.getAllCost();
emit(state.copyWith(
status: ManageCostStatus.success,
costs: costs,
));
} on Exception {
emit(state.copyWith(status: ManageCostStatus.error));
}
}
存储库类
Future<List<Cost>> getAllCost() async {
final dataCost = await supabaseInstance
.from('notes')
.select<List<Map<String, dynamic>>>();
List<Cost> costList = List<Cost>.from(
dataCost.map((e) => Cost.fromMap(e)));
return costList;
}
说实话,我想让 Cubit 方法异步,因为异步方法和变量在 Screen 类中更容易处理。
它必须是异步的,因为您调用异步代码。这很正常而且很好。如果你真的想避免一肘内的异步方法,你可以:
void getAllCost() {
emit(
state.copyWith(status: ManageCostStatus.loading),
);
supabaseRepsitory.getAllCost().then((costs) {
emit(
state.copyWith(
status: ManageCostStatus.success,
costs: costs,
),
);
}).onError((e, s) {
emit(state.copyWith(status: ManageCostStatus.error));
});
}