错误:未为类'Future <List <dynamic >> Function()'定义方法'[]'

时间:2019-10-18 04:14:24

标签: sqlite flutter dart provider

我是新手,我真的不知道将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]);
                },
              );
            });
      },
    );
  }

任何帮助都会很棒。

1 个答案:

答案 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]);
  },
);