Разобрать локальный. json синхронно без будущего / асинхронного c? - PullRequest
1 голос
/ 09 июля 2020

Я новичок в флаттере и пытаюсь разобрать локальный. json файл на список объектов. Вот мой код:


    import 'dart:convert';
    import 'dart:async' show Future;
    import 'package:flutter/services.dart';

    class ItemManager {
      List<Item> items;

      ItemManager() {
        loadItems();
      }

      void loadItems() async {
        var tempList = await getItems();
        items = tempList;
      }

      Future<List<Item>> getItems() async {
        String dataString = await loadAsset();
        var json = jsonDecode(dataString)['items'] as List;
        List<Item> parsedList = json.map((i) => Item.fromJson(i)).toList();
        return parsedList;
      }

      Future<String> loadAsset() async {
        String value = await rootBundle.loadString('assets/items.json');
        return value;
      }
    }

    class Item {
      String title = "";
      String subtitle = "";
      int subIcon = 1;
      bool isFavourite = false;
      String html = "";

      Item({this.title, this.subtitle, this.subIcon, this.isFavourite, this.html});

      factory Item.fromJson(Map<String, dynamic> parsedJson) {
        return Item(
          title:  parsedJson['title'].toString(),
          subtitle:  parsedJson['subtitle'].toString(),
          subIcon: parsedJson['subIcon'],
          isFavourite:  parsedJson['isFavourite'],
          html:  parsedJson['html'],
        );
      }
    }

Я видел только парсинг людей. json с asyn c funtcions, но это не то, что я хочу. Может ли кто-нибудь объяснить, как я могу разобрать синхронный файл. json, чтобы в моих элементах списка уже были все элементы сразу после метода loadItems ()? Есть идеи?

1 Ответ

0 голосов
/ 15 июля 2020

Итак, если у кого-то возникнет такой же вопрос, как и у меня: я решил попробовать первый метод по этой ссылке: https://medium.com/@muddassirm / load- json -data-in-flutter-in-different-sizes- e3312e6a317a

У меня возникла проблема, что моя основная функция стала "зонированной". Затем я узнал об этом вопросе: Flutter - Android приложение показывает только пустой экран

Я отредактировал метод 1, вместо «void» я использовал «Future main asyn c "и просто добавил" WidgetsFlutterBinding.ensureInitialized (); " перед командой await. Теперь файл. json загружается в список перед запуском приложения. Обратите внимание, что это приостанавливает приложение до загрузки списка! Так что не пытайтесь загрузить огромный файл. json.

...