database - “字符串”不是“布尔”类型的子类型
问题描述
这是一个使用数据库的待办事项列表应用程序。我正在使用布尔变量isDone
将任务标记为完成,但是当我添加新任务时,出现错误'String' is not a subtype of type 'bool'
。我想将值更改isDone
为字符串,但我不确定我可以在哪里输入该.toString()
行。
尝试使用类似错误的解决方案(int、bool、future 不是字符串、bool 等的子类型)但无法解决它,因为这些错误是特定于应用程序的。
数据库代码:
//This is the database
String _itemName;
String _dateCreated;
int _id;
bool _isDone;
TodoItem(this._itemName, this._dateCreated, this._isDone);
TodoItem.map(dynamic obj) {
this._itemName = obj["itemName"];
this._dateCreated = obj["dateCreated"];
this._id = obj["id"];
this._isDone = obj["isDone"];
}
String get itemName => _itemName;
String get dateCreated => _dateCreated;
int get id => _id;
bool get isDone => _isDone;
Map<String, dynamic> toMap() {
var map = new Map<String, dynamic>();
map["itemName"] = _itemName;
map["dateCreated"] = _dateCreated;
map["isDone"] = _isDone;
if (_id != null) {
map["id"] = _id;
}
return map;
}
TodoItem.fromMap(Map<String, dynamic> map) {
this._itemName = map["itemName"];
this._dateCreated = map["dateCreated"];
this._id = map["id"];
this._isDone = map["isDone"];
}
数据库创建、更新功能:
注意:更新函数只应该改变 isDone 的值
Future<bool> updateItem(TodoItem item) async {
var dbClient = await db;
int res = await dbClient.update("id", item.toMap(),
where: "id = ?", whereArgs: <bool>[item.isDone]);
return res > 0 ? true : false;
}
Future<int> saveItem(TodoItem item) async {
var dbClient = await db;
int res = await dbClient.insert("$tableName", item.toMap());
print(res.toString());
return res;
}
解决方案
bool
SQLite 不支持。
可能发生的情况是isDone
列值true
被转换为字符串"true"
,因此它在您的TodoItem.map
构造函数中崩溃。
尝试在插入之前或在查询参数中将值转换(并解析)为 1 或 0(int)。
推荐阅读
- java - 函数可以打印正确的值但不返回它
- javascript - Fullcalendar / eventdidmount - “更多链接”问题
- node.js - Angular 生根前端 <-> 后端 Cant root findByKey() 在前端
- java - 迭代 - HasNext 和 Next?
- c++ - 有没有办法使用 Boost Test 来测试非类型模板?
- javascript - 如何将角度服务传递到 Tabulator JS?
- c++ - VS Code 无法打开源文件“opencv2/opencv.hpp”
- python - 来自 TCP/IP Python 的图像数据
- python - 唤醒词检测中的误报过多
- c# - 在 C# 中使用单独的单元格将 2D 数组保存到 csv