Я пытаюсь обновить определенное значение в файле JSON во внешнем хранилище.
Хотя я могу писать в файл, но он заменяет весь файл JSON одними данными.
// Это замена всего документа одним значением
Future setBookmark(int questionId, String isBookmark) async {
Map<String, dynamic> content = {questionId.toString(): isBookmark};
var dir = await getExternalStorageDirectory();
var testdir = new Io.Directory('${dir.path}/BCS/bcs.json');
File jsonFile = File(dir.path + "/BCS/" + "bcs.json");
Map<String, dynamic> jsonFileContent =
json.decode(jsonFile.readAsStringSync());
jsonFileContent.addAll(content);
jsonFile.writeAsStringSync(json.encode(_listQuestions
.firstWhere((question) => question.id == questionId)
.bookmark = isBookmark));
}
//это временно меняет значение, но не записывает в файл
Future setBookmark(int questionId, String isBookmark) async {
_listQuestions
.firstWhere((question) => question.id == questionId)
.bookmark = isBookmark;
}
Вам нужно написать весь список вопросов. Разбейте его на два утверждения
Future setBookmark(int questionId, String isBookmark) async {
// update the list
_listQuestions
.firstWhere((question) => question.id == questionId)
.bookmark = isBookmark;
// and write it
jsonFile.writeAsStringSync(json.encode(_listQuestions));
}
Нет. Вы должны каждый раз писать весь JSON.
это сработало, но у меня есть другие объекты, которые пусты. можно ли просто редактировать определенные данные без перезаписи всего json?