Sqlite 一个被解雇的小工具仍然是树的一部分
我有一个todo应用程序,它使用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], ); }
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()