向更有經驗的同事提問。在我的應用程式中,我有一個從 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);
}
這幾乎可以完美地作業,但有時檔案的內容不會加載,在操作單擊或加載空表后。重繪 后一切正常。看起來在執行下一個操作之前無法加載檔案。
是否只有在驗證檔案已保存后才能執行該功能?然后才設定setState?
我考慮使用 sharedPreferrences 或本地資料庫,但對于這么小的資料陣列來說,這可能太多了。
uj5u.com熱心網友回復:
更改onPressing為異步功能,以便_readData僅在_writeDataFav完成后執行。
onPressing: () async {
await _writeDataFav(articles[index].id.toString(), _content);
await _readData();
}),
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/450055.html
