在Flutter中加载多个JSON文件

时间:2019-06-06 23:14:50

标签: flutter

我正在尝试自学Flutter,并且正在创建一些假想的情况,可以说我有一个JSON文件,其中包含公司的某些成员,其中包含以下信息。例如,约翰来自柏林,我想用柏林的天气加载另一个JSON文件。

[
 {
  "first_name": "John",
  "last_name": "Doe",
  "age": 25,
  "description": "lorem ipsum dolorum",
  "city": "Berlin"
 }
]

这是柏林天气的文件。

[
 {
  "city" : "Berlin",
  "weather" :
    {
      "monday": 23,
      "tuesday": 24 
      ...
    }
 }
]

这是将来的构建器加载我的资产的代码,据我了解,这允许我仅加载一个json文件,这在大多数情况下应该可以,但是我的想象中的情况需要加载另一个文件。

body: Container(
        child: Center(
          child: FutureBuilder(
            future: DefaultAssetBundle.of(context).loadString(
                'assets/file.json'),
            builder: (context, snapshot) {
              if (!snapshot.hasData) {
                return CircularProgressIndicator();
              ...

对于实现此目标的任何帮助,我们将不胜感激。

1 个答案:

答案 0 :(得分:0)

您可以将两个调用包装在异步方法中,然后等待:

Future<Map<String, String>> loadJson() async {
  final jsonA = await DefaultAssetBundle.of(context).loadString('assets/fileA');
  final jsonB = await DefaultAssetBundle.of(context).loadString('assets/fileB');
  return { 
    'fileA': jsonA, 
    'fileB': jsonB,
  };
}

...

FutureBuilder(
  future: loadJson(),
  builder: (context, snapshot) {
    if (!snapshot.hasData) {
      return CircularProgressIndicator();
    }
    var fileA = snapshot.data['fileA'];
    var fileB = snapshot.data['fileB'];
    ...

您可以将其作为列表或自定义类或其他任何形式返回,这只是为了显示想法。