如何在不支持bool列的SQFLite中存储Dart布尔变量isChecked?
在SQFLite中存储布尔类型变量的实现方法
1. 建表时定义整数列
SQFLite不支持布尔类型列,直接创建整数列来存储,约定0代表false,1代表true,建表语句示例:
CREATE TABLE tasks ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, is_checked INTEGER NOT NULL DEFAULT 0 -- 用整数存布尔值,默认false );
2. Dart布尔值转整数存入数据库
你的isChecked是bool类型变量,用三元运算符就能快速完成转换:
// bool转int:true→1,false→0 int storedValue = isChecked ? 1 : 0; // 插入数据示例 await db.insert( 'tasks', { 'name': '完成作业', 'is_checked': storedValue, // 存入转换后的整数 }, ); // 更新数据示例 await db.update( 'tasks', {'is_checked': storedValue}, where: 'id = ?', whereArgs: [1], );
3. 从数据库读取整数转回布尔值
查询数据后,把整数转回bool类型,直接关联UI控件:
// 查询数据 List<Map<String, dynamic>> maps = await db.query('tasks'); // 遍历结果并转换 List<Task> tasks = maps.map((map) { return Task( id: map['id'], name: map['name'], isChecked: map['is_checked'] == 1, // int转bool:1→true,其他值为false ); }).toList();
这样就能在SQFLite中实现布尔值的存储与读取,和你的UI控件isChecked无缝关联。
内容的提问来源于stack exchange,提问作者DktPhl2018
相关产品推荐
相关产品推荐

