You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter使用cbl包时async/await函数提前返回问题求助

Flutter + CBL 数据持久化异步函数提前返回问题

使用Flutter结合cbl包做数据持久化时,检索数据条目出现异常:自定义异步函数在await Database.openAsync(database)处提前返回,完全没执行到后续的return语句,这和Dart async/await的预期行为不符,目前陷入困境。

task_database.dart 代码

Future<dynamic> getAllTasks() async {
  final tasksDb = await Database.openAsync(database);  // <---------- 此处提前返回

  var tasksQuery = const QueryBuilder()
      .select(SelectResult.all())
      .from(DataSource.database(tasksDb));
  final resultSet = await tasksQuery.execute();

  late var task;
  
  await for (final result in resultSet.asStream()) {
    final map = result.toPlainMap();
    final taskDao = TaskDao.fromJson(map);
    task = taskDao.task;
    // Do something with the task...
    print(task);
  }

  return task; // <-------------------------------------------- 未执行到此处
}

task_cubit.dart 原始代码

getAllTasks() => {
    allTaskMap = TasksAbcDatabase().getAllTasks(),
    emit(TaskState(tasks: state.Tasks))
};

已尝试的解决方法

  • 将Database.openAsync替换为Database.openSync,但函数会在下一个await语句处提前返回;
  • 将cubit中的getAllTasks改为异步函数并等待数据库操作,代码如下:
Future<void> getAllTasks() async => {
    allTaskMap = await TasksAbcDatabase().getAllTasks(),
    emit(TaskState(tasks: state.Tasks))
};

但问题依旧:当task_database中的函数提前返回时,cubit中的getAllTasks也会在第一个await语句(allTaskMap赋值处)提前返回。

内容的提问来源于stack exchange,提问作者ibbs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:35:18