Flutter:Bloc/Cubit 状态管理中的异步方法

问题描述 投票:0回答:1

在使用 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 类中更容易处理。

flutter dart asynchronous architecture flutter-cubit
1个回答
0
投票

它必须是异步的,因为您调用异步代码。这很正常而且很好。如果你真的想避免一肘内的异步方法,你可以:

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));
  });
}
© www.soinside.com 2019 - 2024. All rights reserved.