繁体   English   中英

我该如何解决这个问题?Flutter sqflite 删除不起作用

[英]How I can solve this ?Flutter sqflite delete doesn't work

我是新的 Flutter 很抱歉我的错误从现在开始。 我想删除我选择的列表项,但我不能。 我在主 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);

我的问题在这里,我在 TaskPage 上提取 db 和 id 来删除,但我有一个错误。 ID 是 integer,我在 sql 代码中写了 integer 值用于删除,但显示错误。 我不明白为什么会这样。 我对此感到抱歉。 请帮我。 删除按钮和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)没有这样的列:TaskPage.id E/flutter(3683):[错误:flutter/lib/ui/ui_dart_state.cc(166)]未处理的异常:DatabaseException(没有这样的列:TaskPage .id (code 1): , 编译时: 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"

如果这是确切的代码,那么我可以在其中看到一些错误,例如未定义“id”的数据类型,如果没有,则应使用大括号进行字符串插值。 的单词不止一个(例如:${widget.id})。 实际上,这些破碎的代码让它变得更加混乱。 如果可能,请上传完整的 dart 文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM