解析本地.json同步而没有未来/异步吗?

时间:2020-07-09 10:06:43

标签: json flutter parsing asynchronous

对于扑朔迷离来说我是一个新手,我试图将本地.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,但这并不是我想要的那样。谁能解释我如何同步解析.json,所以我的List项目在loadItems()方法之后已经具有所有项目了? 有什么想法吗?

1 个答案:

答案 0 :(得分:0)

因此,如果有人遇到与我相同的问题: 我决定尝试在此链接下尝试第一种方法: https://medium.com/@muddassirm/load-json-data-in-flutter-in-different-ways-e3312e6a317a

我遇到了问题,我的主要功能被“分区”了。然后我发现了这个问题:Flutter - Android app shows just a blank screen

我编辑了方法1,而不是“ void”,而是使用了“ Future main async”,并简单地添加了“ WidgetsFlutterBinding.ensureInitialized();”在等待命令之前。 现在,在应用启动之前,.json文件已加载到列表中。请注意,这会暂停应用程序,直到加载列表!因此,请勿尝试加载巨大的.json文件。