Sqlite 一个被解雇的小工具仍然是树的一部分

Sqlite 一个被解雇的小工具仍然是树的一部分,sqlite,flutter,dart,provider,Sqlite,Flutter,Dart,Provider,我有一个todo应用程序,它使用provider进行状态管理和sqlite数据库 在应用程序中,我试图添加Dismissible小部件来删除项目 但问题是,当我尝试删除项目时,它确实会从数据库中删除,但我在屏幕上出现错误。我是个新手 控制台中出现错误 task_data.dart 数据库连接.dart Future deleteTask(int-id)异步{ 等待openDb(); 等待_database.delete( “任务”, 其中:“id=?”, wherergs:[id], ); }

我有一个todo应用程序,它使用
provider
进行状态管理和
sqlite
数据库

在应用程序中,我试图添加
Dismissible
小部件来删除项目

但问题是,当我尝试删除项目时,它确实会从
数据库中删除,但我在屏幕上出现错误。我是个新手

控制台中出现错误

task_data.dart

数据库连接.dart

Future deleteTask(int-id)异步{
等待openDb();
等待_database.delete(
“任务”,
其中:“id=?”,
wherergs:[id],
);
}
任务列表视图.dart

class TaskListView扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
退货消费者(
生成器:(上下文、任务数据、子项){
返回ListView.builder(
itemCount:taskData.taskCount,
itemBuilder:(上下文,索引){
返回任务列表互动程序(
taskTitle:taskData.tasks[index].name,
已检查:taskData.tasks[index].isDone,
checkboxCallback:(checkboxState){
taskData.updateTask(taskData.tasks[index]);
},
deleteCallback:(){
taskData.deleteTask(taskData.tasks[index].id);
},
);
});
},
);
}
}

当您解除可解除的
时,应将其从小部件树中删除。在您的情况下,对于
taskData
的每个项目,您都会显示一个
Dismissible
,因此如果您取消某个项目的
Dismissible
,您应该从列表中删除该项目


因此,在
deleteCallback
中,在执行
deleteTask()
之后,如果您确信您的可撤销小部件已被删除,则应该执行
taskData.removeAt(index)
内部
setState()
。尝试修复
。 密钥应该是唯一的。如果任务的id是唯一的

key: Key(taskData.tasks[index].id)
如果没有任何其他常量和唯一数据,可以尝试

key: UniqueKey()

你能把列表视图中的代码发布到Dismissible吗?我有点困惑,我应该把它们放在
任务列表视图中的哪个位置。dart
文件在
任务列表视图中。dart
文件实际上我在
任务列表视图中使用
消费者
。dart
文件这就是为什么。在
任务列表视图中。dart
从年开始
task\u list\u tile.dart
您没有对索引或列表的引用。但是在那里它说
removeAt
没有定义。
void deleteTask(int id) {
    taskDatabaseManager.deleteTask(id);
    notifyListeners();
  }
Future<void> deleteTask(int id) async {
    await openDb();
    await _database.delete(
      'tasks',
      where: 'id = ?',
      whereArgs: [id],
    );
  }
class TaskListView extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Consumer<TaskData>(
      builder: (context, taskData, child) {
        return ListView.builder(
            itemCount: taskData.taskCount,
            itemBuilder: (context, index) {
              return TaskListTile(
                taskTitle: taskData.tasks[index].name,
                isChecked: taskData.tasks[index].isDone,
                checkboxCallback: (checkboxState) {
                  taskData.updateTask(taskData.tasks[index]);
                },
                deleteCallback: () {
                  taskData.deleteTask(taskData.tasks[index].id);
                },
              );
            });
      },
    );
  }
}
key: Key(taskData.tasks[index].id)
key: UniqueKey()