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

Flutter技术问题:遍历可空数据表并添加行对象至对象列表

解决方案

1. 解决“无法无条件调用方法'query',因为接收者可能为null”报错

虽然你已经通过if (_database != null)判断了非空,但Dart空安全编译器可能未完全识别该分支的非空状态,可通过两种方式处理:

  • 方式一:使用非空断言运算符!
    直接在_database后加!,明确告知编译器此处_database非空:

    final List<Map<String, dynamic>> maps = await _database!.query('dbtable');
    
  • 方式二:局部变量缓存非空实例
    将_database赋值给局部变量,让编译器明确其非空类型:

    final db = _database!;
    final List<Map<String, dynamic>> maps = await db.query('dbtable');
    

2. 将返回的Rung对象添加至mylist

你的database方法当前返回Object?,建议先修正返回类型为Future<List<Rung>>以规范类型,再通过以下步骤添加到列表:

步骤1:修正database方法的返回类型与字段赋值

原代码中done和boldTitle字段直接赋值字符串,需转为布尔值,同时调整返回类型:

Future<List<Rung>> get database async {
  if (_database != null) {
    dev.log('1 My db is NOT null: $_database', name: 'db_helper.dart');

    final List<Map<String, dynamic>> maps = await _database!.query('dbtable');
    return List.generate(maps.length, (i) {
      return Rung(
        rungId: maps[i]['colId'],
        name: maps[i]['colTask'] ?? 'unknown',
        done: (maps[i]['colDone'] ?? 'false').toLowerCase() == 'true',
        boldTitle: (maps[i]['colBold'] ?? 'false').toLowerCase() == 'true',
        info: maps[i]['colInfo'] ?? '',
      );
    });
  }
  // 处理_database为空的情况,返回空列表或抛出异常
  return [];
}

步骤2:调用方法并添加到mylist

在需要的业务逻辑中调用database方法,将返回的列表添加到Rung.myList:

// 示例调用
final List<Rung> rungs = await database;
// 方式一:清空原有列表后添加新数据
Rung.myList.clear();
Rung.myList.addAll(rungs);
// 方式二:直接追加到现有列表
// Rung.myList.addAll(rungs);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 16:42:08