如何解决这个问题?flutter sqflite delete不起作用

bis0qfac  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(471)

我是新来的,所以从现在开始为我的错误道歉。我想删除我选择的列表项,但我不能。我在主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();
  }

我这样拉到主页:

@override
  Widget build(BuildContext context) {
    return Scaffold(
      resizeToAvoidBottomPadding: false,
      backgroundColor: const Color(0xfff9fcff),
      body: db == null ? Container() : MainPage(db),
    );
  }
}

主页在这里,我描述了获取数据库和渲染到页面。

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);

我的问题是在这里,我拉数据库和id删除的任务页,但我有一个错误。id是整数,我在sql代码中编写了用于删除的整数值,但是显示了错误。我不明白为什么。对此我很抱歉。请帮帮我。删除按钮和任务页:

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)没有这样的列:taskpage.id e/flatter(3683):[error:flutter/lib/ui/ui_dart_state.cc(166)]未处理的异常:databaseexception(没有这样的列:taskpage.id(代码1):,编译时:delete from gorevler where id=taskpage.id)sql'delete from gorevler where id=taskpage.id'args[]}
不是从主页上取了身份证吗?我不能理解这个错误。

sqxo8psd

sqxo8psd1#

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

ih99xse1

ih99xse12#

如果这是确切的代码,那么我可以看到一些错误在那里像数据类型的'id'是没有定义的,字符串插值应该用大括号如果没有词是多个(例如:${widget.id})。实际上,这些零碎的代码让它变得更加混乱。如果可能,请上传完整的dart文件。

相关问题