ListView不根据数据库更改进行更新

时间:2020-02-02 10:12:26

标签: listview flutter

非常感谢您的帮助,因为我已经尝试解决几天了,但是仍然无法解决问题。

下面的所有代码都可以正常使用,直到最近,列表像以前一样停止更新,直到我热重启它为止。

以下两个功能分别获取我的地图列表和笔记列表

Future<List<Map<String, dynamic>>> getNoteListMap() async {
    Database db = await this.database;
    var result = await db.query(noteTable);
    return result;
  }


Future<List<Note>> getNoteList() async {
    var noteMapList = await getNoteListMap();
    int count = noteMapList.length;
    //list of notes, each note consist of their own independent variables
    List<Note> noteList = new List<Note>();
    for (int i = 0; i < count; i++) {
      noteList.add(Note.fromMapObject(noteMapList[i]));
    }
    return noteList;
  }

这是我的主要功能,它使用FutureBuilder创建一个列表。但是,该列表没有更新,仅在每次热重启后才会更新。

FutureBuilder<List<Note>>(
  future: _databaseHelper.getNoteList(),
  builder: (BuildContext context, AsyncSnapshot<List<Note>> snapshot) {
    if (snapshot.hasData) {
      return ListView.builder(
        physics: TargetPlatform.iOS!=null? BouncingScrollPhysics() : ClampingScrollPhysics(),
        itemCount: snapshot.data.length,
        itemBuilder: (BuildContext context, int position) {
          Note note = snapshot.data[position];
          return Card(
            color: Colors.white,
            elevation: 2.0,
            child: new ListTile(
              title: new Text(note.title?? ''),
              subtitle: new Text(note.bodyText ?? ''),
              onTap: () => _navigateToTaskByDatePage(date),
            ),
          );
        }
      );
    } else if (snapshot.hasError) {
      return Container(
        child: Center(
          child: new Text('Error: ${snapshot.error}'),
        ),
      );
    } else {
      return Container(
        width: 0,
        height: 0,
      );
    }
  },
),

2 个答案:

答案 0 :(得分:0)

怎么样?

class ... {
  Future<List<Note>> futureNoteList;

  @override
  void initState() {
    super.initState();
    futureNoteList = _databaseHelper.getNoteList();
  }

  FutureBuilder<List<Note>>(
    future: futureNoteList,
    ...
  ),

  void update() async {
    val newList = await _databaseHelper.getNoteList();
    setState(() {
      futureNoteList = newList;
    });
  }

答案 1 :(得分:0)

感谢提供的所有解决方案来帮助解决我面临的问题!但是,我设法通过快速升级解决了我的问题。显然,我的代码没有任何问题,这只是版本问题。