Flutter SQLite官方示例代码类型不匹配错误求助
Flutter官方SQLite示例代码的类型错误解决方法
你遇到的问题源于Dart的强类型检查机制:sqflite查询返回的Map<String, dynamic>中,每个字段的值都是dynamic类型,而Dog类构造器要求的是明确的int、String、int类型,直接赋值会触发类型不匹配错误。
基础解决方法:显式类型转换
修改转换List<Map>到List<Dog>的代码块,为每个字段添加显式类型转换:
// Convert the List<Map<String, dynamic> into a List<Dog>. return List.generate(maps.length, (i) { return Dog( id: maps[i]['id'] as int, name: maps[i]['name'] as String, age: maps[i]['age'] as int, ); });
严谨处理方案(应对可能的null值)
如果需要考虑数据库字段可能存在null的场景,可以结合空转换操作符确保类型安全:
return List.generate(maps.length, (i) { return Dog( id: maps[i]['id'] as int? ?? 0, // 字段为null时使用默认值0 name: maps[i]['name'] as String? ?? '', // 字段为null时使用空字符串 age: maps[i]['age'] as int? ?? 0, ); });
问题根源说明
新版本Dart的空安全和类型检查机制更严格,而官方示例可能基于旧版本编写,省略了显式类型转换步骤。通过as关键字明确告知编译器字段的具体类型,即可消除类型不匹配的错误。
内容的提问来源于stack exchange,提问作者Evan R.
相关产品推荐
相关产品推荐

