gpt4 book ai didi

sql - 我该如何解决?Flutter sqflite删除不起作用

转载 作者:行者123 更新时间:2023-12-03 04:42:52 26 4
gpt4 key购买 nike

我是新来的Flutter,所以从现在开始我的错误对不起。
我想删除我选择的 list 项目,但我不能。我在主dart中以这种方式初始化db:

 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);
我的问题在这里,我拉出db和id以便在TaskPage上删除,但出现错误。 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): , whilecompiling: DELETE FROM gorevler WHERE id = TaskPage.id) sql 'DELETEFROM gorevler WHERE id = TaskPage.id ' args []}



它不是从MainPage中提取ID吗?我无法理解该错误。

最佳答案

Flutter中的字符串插值是通过使用${expression}实现的。如果表达式是标识符,则可以跳过{}。在您的情况下,表达式不是标识符,因此必须使用花括号。如果对此感到困惑,请确保在所有情况下都使用花括号。
这是您应该如何做的事情:"DELETE FROM Tasks WHERE id = ${widget.id}"您的错误代码基本上是这样做的:"DELETE FROM Tasks WHERE id = ${widget}.id"

关于sql - 我该如何解决?Flutter sqflite删除不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62866163/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com