我该如何解决这个问题?Flutter sqflite delete 不起作用
How I can solve this ?Flutter sqflite delete doesn't work
我是 Flutter 的新手,很抱歉我现在犯的错误。
我想删除我选择的列表项,但我不能。我在主飞镖中以这种方式初始化数据库:
Database db;
Future createDatabase() async {
db = await openDatabase(
"listoftasks.db",
version: 1,
onCreate: (Database db, int version) {
db.execute(
"CREATE TABLE Tasks (id INTEGER PRIMARY KEY, name TEXT)");
print("creating");
},
onOpen: (Database db) {
print("opened existing database");
},
);
}
@override
void initState() {
createDatabase();
super.initState();
}
然后我通过这种方式转到了 MainPage :
@override
Widget build(BuildContext context) {
return Scaffold(
resizeToAvoidBottomPadding: false,
backgroundColor: const Color(0xfff9fcff),
body: db == null ? Container() : MainPage(db),
);
}
}
MainPage 在这里,我描述了如何获取数据库并呈现到页面。
List<Task> existingTasks = [];
getTasks() async {
existingTasks = [];
List<Map> tasksQuery =
await widget.db.rawQuery(
"SELECT * FROM Tasks");
for (var i in tasksQuery) {
String name = i["name"];
id = i["id"];
Task newTask = Task(id: id, title: name);
setState(() {
existingTasks.add(newTask);
});
}
}
@override
void initState() {
getTasks();
super.initState();
}
@override
Widget build(BuildContext context) {
return Material(
color: Color(0xffF9FCFF),
child:
TaskPage(
tasks: existingTasks,
db: widget.db,
getTasks: getTasks,
id: id);
我的问题在这里,我在 TaskPage 上提取数据库和 ID 以进行删除,但出现错误。 ID 是整数,我在 sql 代码中写了整数值用于删除,但显示错误。我不明白这是为什么。我为此感到抱歉。请帮我 。
删除按钮和 TaskPage :
IconButton(
color: Colors.red,
iconSize: 25,
icon: Icon(Icons.delete),
onPressed: () {
widget.db.rawDelete(
"DELETE FROM Tasks WHERE id = $widget.id ");
//i am pulling id as selected value from MainPage but It doesn't work.
print(widget.id);
widget.getTasks();
}),
错误是:
E/SQLiteLog( 3683): (1) no such column: TaskPage.id E/flutter ( 3683):
[ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception:
DatabaseException(no such column: TaskPage.id (code 1): , while
compiling: DELETE FROM gorevler WHERE id = TaskPage.id) sql 'DELETE
FROM gorevler WHERE id = TaskPage.id ' args []}
它不是从 MainPage 中提取 id 吗?我无法理解错误。
如果这是确切的代码,那么我可以看到其中的一些错误,例如未定义 'id' 的数据类型,如果没有,则应使用大括号进行字符串插值。单词的数量不止一个(例如:${widget.id})。
实际上,这些破碎的代码片段使它更加混乱。如果可能,请上传完整的飞镖文件。
Flutter中的字符串插值是通过${expression}
实现的。如果表达式是标识符,则可以跳过{}
。在您的情况下,表达式不是标识符,因此您必须使用大括号。如果您对此感到困惑,请确保在所有情况下都使用大括号。
这就是你应该做的事情:
"DELETE FROM Tasks WHERE id = ${widget.id}"
您的错误代码基本上是这样做的:
"DELETE FROM Tasks WHERE id = ${widget}.id"
我是 Flutter 的新手,很抱歉我现在犯的错误。 我想删除我选择的列表项,但我不能。我在主飞镖中以这种方式初始化数据库:
Database db;
Future createDatabase() async {
db = await openDatabase(
"listoftasks.db",
version: 1,
onCreate: (Database db, int version) {
db.execute(
"CREATE TABLE Tasks (id INTEGER PRIMARY KEY, name TEXT)");
print("creating");
},
onOpen: (Database db) {
print("opened existing database");
},
);
}
@override
void initState() {
createDatabase();
super.initState();
}
然后我通过这种方式转到了 MainPage :
@override
Widget build(BuildContext context) {
return Scaffold(
resizeToAvoidBottomPadding: false,
backgroundColor: const Color(0xfff9fcff),
body: db == null ? Container() : MainPage(db),
);
}
}
MainPage 在这里,我描述了如何获取数据库并呈现到页面。
List<Task> existingTasks = [];
getTasks() async {
existingTasks = [];
List<Map> tasksQuery =
await widget.db.rawQuery(
"SELECT * FROM Tasks");
for (var i in tasksQuery) {
String name = i["name"];
id = i["id"];
Task newTask = Task(id: id, title: name);
setState(() {
existingTasks.add(newTask);
});
}
}
@override
void initState() {
getTasks();
super.initState();
}
@override
Widget build(BuildContext context) {
return Material(
color: Color(0xffF9FCFF),
child:
TaskPage(
tasks: existingTasks,
db: widget.db,
getTasks: getTasks,
id: id);
我的问题在这里,我在 TaskPage 上提取数据库和 ID 以进行删除,但出现错误。 ID 是整数,我在 sql 代码中写了整数值用于删除,但显示错误。我不明白这是为什么。我为此感到抱歉。请帮我 。 删除按钮和 TaskPage :
IconButton(
color: Colors.red,
iconSize: 25,
icon: Icon(Icons.delete),
onPressed: () {
widget.db.rawDelete(
"DELETE FROM Tasks WHERE id = $widget.id ");
//i am pulling id as selected value from MainPage but It doesn't work.
print(widget.id);
widget.getTasks();
}),
错误是:
E/SQLiteLog( 3683): (1) no such column: TaskPage.id E/flutter ( 3683): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: DatabaseException(no such column: TaskPage.id (code 1): , while compiling: DELETE FROM gorevler WHERE id = TaskPage.id) sql 'DELETE FROM gorevler WHERE id = TaskPage.id ' args []}
它不是从 MainPage 中提取 id 吗?我无法理解错误。
如果这是确切的代码,那么我可以看到其中的一些错误,例如未定义 'id' 的数据类型,如果没有,则应使用大括号进行字符串插值。单词的数量不止一个(例如:${widget.id})。 实际上,这些破碎的代码片段使它更加混乱。如果可能,请上传完整的飞镖文件。
Flutter中的字符串插值是通过${expression}
实现的。如果表达式是标识符,则可以跳过{}
。在您的情况下,表达式不是标识符,因此您必须使用大括号。如果您对此感到困惑,请确保在所有情况下都使用大括号。
这就是你应该做的事情:
"DELETE FROM Tasks WHERE id = ${widget.id}"
您的错误代码基本上是这样做的:
"DELETE FROM Tasks WHERE id = ${widget}.id"