同步解析本地json文件,无需future/async

use*_*858 5 parsing json asynchronous synchronous flutter

我对 Flutter 还很陌生,我正在尝试将本地json文件解析为List对象。到目前为止,这是我的代码:

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'],
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

我只看到人们jsonasync函数进行解析,但这不是我想要的。谁能解释一下我如何同步解析 json,以便我的List<Item>项目在该方法之后已经拥有所有项目loadItems()?有任何想法吗?

use*_*858 1

因此,如果有人和我有同样的问题,我决定尝试本页中提到的第一种方法:使用 Flutter 以不同方式加载 JSON 数据

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

我编辑了方法 1,而不是void,我使用Future<void> main async并简单地添加在命令行/行WidgetsFlutterBinding.ensureInitialized();之前await

现在,json 文件会在应用程序启动之前加载到列表中。请注意,这会暂停应用程序,直到加载列表!所以不要尝试加载巨大的 json 文件。