флаттер ввода/вывода ( 4140): тип ‘_InternalLinkedHashMap’ не является подтипом типа ‘Карта’

#flutter #dictionary #dart #statefulwidget #dynamic-mapping

Вопрос:

   late File jsonFile;
  late Directory dir;
  String fileName = "myJSONfile.json";
  bool fileExists = false;
  Map fileContent = <String, String>{};
  //late Map<String, String> fileContent;
  //late Map<String, String> fileContent = {};
  //var fileContent = <String, String>{};

  @override
  void initState() {
    super.initState();

    getApplicationDocumentsDirectory().then((Directory directory) {
      dir = directory;
      jsonFile = new File(dir.path   "/"   fileName);

      fileExists = jsonFile.existsSync();
      if (fileExists)
        this.setState(
            () => fileContent = json.decode(jsonFile.readAsStringSync()));
    });
  }

  void createFile(Map<String, String> content, Directory dir, String fileName) {
    print("Creating file!");
    File file = new File(dir.path   "/"   fileName);
    file.createSync();
    fileExists = true;
    file.writeAsStringSync(json.encode(content));
  }

  void writeFile(String key, String value) {
    print("Writing to file!");
    Map<String, String> content = {key: value};
    if (fileExists) {
      print("File exists");

      Map<String, String> jsonFIleContent =
          json.decode(jsonFile.readAsStringSync());
      jsonFIleContent.addAll(content);
      jsonFile.writeAsStringSync(json.encode(jsonFIleContent));
    } else {
      print("FIle does not exists!");
      createFile(content, dir, fileName);
    }
    this.setState(() => fileContent = json.decode(jsonFile.readAsStringSync()));
  }
 

Эй, я новичок в flutter, и я пытаюсь сохранить данные с помощью файла JSON и прочитать его снова, но это не работает

Это ошибка: (flutter I/flutter ( 4140): тип «_InternalLinkedHashMap<Строка, динамическая>» не является подтипом типа » Карта<Строка, динамическая><Строка, строка>»)

Я искал в Интернете, но не нашел никакого ответа, может кто-нибудь сказать, что это за ошибка и как я могу ее решить?

Комментарии:

1. попробуйте объявить Map fileContent = <String, String>{}; вот так Map fileContent = <String, dynamic>{};

2. да, это работает, спасибо! но почему я должен говорить об этом динамично?

3. это тип карты, которую вы сохраняете… проверьте значение функции json.decode.

4. ну ладно, хорошо видно!