我是新手,我真的不知道将provider
与sqlite数据库一起使用。尽管我已经使用provider
创建了一个待办事项应用程序,并且已经成功向其中添加了sqlite database
。但是在获取数据时,我的listViewBuilder
小部件中出现了错误。
错误:未为类'Future> Function()'定义方法'[]'。
这是我的代码。
database_connection.dart
Future<List<Task>>getTasks() async {
await openDb();
final List<Map<String, dynamic>>maps = await _database.query('tasks');
print(maps);
return List.generate(maps.length, (i){
return Task(
id: maps[i]['id'],
name: maps[i]['title'],
date:maps[i]['date'],
isDone: maps[i]['iscomplete'] == 1 ? true: false,
);
});
}
taskData.dart
class TaskData extends ChangeNotifier {
final TaskDatabaseManager taskDatabaseManager = new TaskDatabaseManager();
List<Task> _tasks = [
Task(name: 'Buy coffee'),
Task(name: 'Go Shopping'),
Task(name: 'Go Sleep'),
];
// UnmodifiableListView<Task> get tasks {
// return UnmodifiableListView(_tasks);
//
// }
Future<List>tasks()async {
return await taskDatabaseManager.getTasks();
}
task_tile.dart
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]);
},
);
});
},
);
}
任何帮助都会很棒。
答案 0 :(得分:0)
检索数据可能有些棘手,因为它通常异步运行。这是我建议的流程。
在初始状态下检索数据。
final List<Task> _tasks;
@override
void initState() {
super.initState();
_tasks = taskData.tasks();
}
当数据仍在加载时返回一个占位符(通常是一个加载指示器)
if (_tasks == null) {
return CircularProgressIndicator(
valueColor: AlwaysStoppedAnimation(const Colors.white),
);
}
数据准备就绪后:
return TaskListTile(
taskTitle: _tasks[index].name,
isChecked: _tasks[index].isDone,
checkboxCallback: (checkboxState) {
taskData.updateTask(_tasks[index]);
},
deleteCallback: () {
taskData.deleteTask(_tasks[index]);
},
);