在使用Cubit状态管理时,我有一个问题,Cubit类中访问Repository类的方法是否必须是Cubit c?Repository类中访问远程DB的方法当然是Cubit c,但为什么Cubit类中的方法应该是Cubit c?
以下是相关的代码片段:
腕尺等级:
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类中更容易处理。
2条答案
按热度按时间mbjcgjjk1#
它必须是cubic,因为你调用cubic代码。这是正常的,很好。如果你真的想避免cubic方法,你可以:
字符串
t40tm48m2#
在你的cubit类中的getAllCost()函数需要标记为cubit,因为函数调用
supabaseRepsitory.getAllCost();
,这是一个需要等待的未来,任何时候你调用一个未来的函数,你都必须等待函数and mark your function as async
dart中的future是什么?:* future表示异步操作的结果 *
什么是异步操作?异步操作让程序在等待另一个操作完成的同时完成工作。
以下是一些常见的异步操作:
这种异步计算通常将其结果作为Future提供,或者如果结果有多个部分,则作为Stream提供。
你可以在这里阅读更多关于blog和await的信息:https://dart.dev/codelabs/async-await
字符串