从文件中写入 to/read 和 setState - flutter

Write to/read from file and setState - flutter

请教更有经验的同仁。在我的应用程序中,我有一个从 json 文件加载的项目的列表视图。

itemBuilder: (context, index) => allRadioList(articles[index], context, _content, onPressing: () {
_writeDataFav(articles[index].id.toString(), _content);
_readData();
}),
          

用户可以通过点击按钮将项目添加到收藏夹,方法是将带有 ID 号的数组写入本地文件,然后加载文件的内容并将其保存到 setState。

IconButton(
icon: Icon(LineIcons.heartAlt, size: 20, color: Colors.yellow),
onPressed: onPressing,
),

当用户从收藏夹中删除一个项目时,我加载文件的内容,修改并保存到文件中,然后加载并保存到setState。

    Future<void> _readData() async {
    final dirPath = await _getDirPath();
    final myFile = await File('$dirPath/fav.txt');
    final data = await myFile.readAsString(encoding: utf8);
    setState(() {
      _content = data;
    });
  }
    Future<void> _writeDataFav(newString, _content) async {
    final _dirPath = await _getDirPath();
    final _myFile = File('$_dirPath/fav.txt');
      String res = '${_content}|${newString}|';
      await _myFile.writeAsString(res);
  }

这工作几乎完美,但有时文件内容不会加载,点击操作或加载空 table 后。刷新后一切正常。在执行下一个操作之前,似乎无法加载文件。

是否可以在验证文件已保存后才执行该功能?然后才设置setState?

我考虑过使用 sharedPreferrences 或本地数据库,但这对于这么小的数据阵列来说可能太多了。

onPressing 更改为异步函数,这样 _readData 将仅在 _writeDataFav 完成后执行。

onPressing: () async {
  await _writeDataFav(articles[index].id.toString(), _content);
  await _readData();
}),