Flutter使用Floor操作SQLite遇List<String?>类型不支持错误求解决
解决Floor中List<String?>类型不支持的问题
SQLite本身没有原生列表类型,Floor无法直接识别List<String?>作为数据库列类型,需要通过自定义类型转换器实现列表与数据库可存储格式的互转,具体操作如下:
步骤1:创建类型转换器类
实现TypeConverter,将List<String?>转换为JSON字符串存储,读取时再反序列化为列表:
import 'package:floor/floor.dart'; import 'dart:convert'; class StringListConverter extends TypeConverter<List<String?>?, String?> { @override List<String?>? decode(String? databaseValue) { if (databaseValue == null) return null; final List<dynamic> rawList = json.decode(databaseValue); return rawList.map((item) => item as String?).toList(); } @override String? encode(List<String?>? value) { if (value == null) return null; return json.encode(value); } }
步骤2:给实体类字段绑定转换器
修改你的实体类,在someList字段上添加@TypeConverters注解,指定使用上面的转换器:
@Entity( tableName: some_table_name, primaryKeys: ['identifier'], ) class someEntity { // 其他字段... @TypeConverters([StringListConverter]) List<String?> someList; // 构造函数及其他逻辑... }
步骤3:重新生成Floor代码
执行命令重新生成代码即可:
flutter packages pub run build_runner build
内容的提问来源于stack exchange,提问作者Anastasia Zhdanova
相关产品推荐
相关产品推荐

