Как редактировать (обновлять) данные в файле JSON flutter

Я пытаюсь обновить определенное значение в файле 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;
 }
0
0
4 888
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно написать весь список вопросов. Разбейте его на два утверждения

 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?

MEHEDI HASAN 29.06.2019 15:25

Нет. Вы должны каждый раз писать весь JSON.

Richard Heap 29.06.2019 20:15

Другие вопросы по теме