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

标签 sql sqlite flutter dart sqflite

我是新来的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): , while compiling: DELETE FROM gorevler WHERE id = TaskPage.id) sql 'DELETE FROM 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/

相关文章:

适用于 windowsPhone 8.1 的 SQLite.Net PCL

flutter - 返回类型 'FutureOr<Database>' 是 Fl​​utter 中潜在的不可空类型

java - SQL 请求类型

mysql - 更新列数据mysql

c# - SQLiteDataReader.read() 清空结果?

带导航器的 Flutter Modal Bottom Sheet 没有按预期弹出

flutter - 如何避免 Observable 多次调用 RxDart

php - 我如何在 php 中使用 fetchAll?

sql - 将 Datediff 设置为存储过程中的变量

sql - 在 MySQL/SQLite 数据库中按路径选择页面