【发布时间】:2018-04-27 22:30:17
【问题描述】:
作为 Dart/Flutter 的新手,我正在使用这个 sn-p 尝试加载我存储在资产文件夹中的 config.json 文件。在尝试读取此文件时,我使用 Dart 语言 Futures documentation 和 Flutter docs on reading local text files 上的模型:
import 'dart:async' show Future;
import 'package:flutter/services.dart' show rootBundle;
import 'dart:convert';
Future<List> loadAsset() async {
String raw = await rootBundle.loadString('assets/config.json');
List configData = json.decode(raw);
return configData;
}
然后,在我的班级中,我尝试将配置加载到列表中,如下所示:
Future<List> configData = loadAsset();
print(configData.toString());
// prints out: Instance of 'Future<List<dynamic>>'
这一切的结果似乎奏效了。然而我找不到使用我加载的数据的方法。访问列表中元素的任何努力,例如configData[0] 导致错误:
The following _CompileTimeError was thrown building
HomePage(dirty, state: HomePageState#b1af8):
'package:myapp/pages/home_page.dart': error:
line 64 pos 19: lib/pages/home_page.dart:64:19:
Error: The method '[]' isn't defined for the class
'dart.async::Future<dart.core::List<dynamic>>'.
Try correcting the name to the name of an existing method,
or defining a method named '[]'.
我想将configDataFuture 转换为我可以读取并在我的应用程序中传递的普通对象。我可以做一些非常相似的事情,并让它在一个小部件的构建方法中工作,使用 FutureBuilder 和 DefaultAssetBundle 因此......
DefaultAssetBundle
.of(context)
.loadString('assets/config.json')
...但我不希望在所有需要它的小部件中重新加载数据的开销。我想在一个单独的 Dart 包中加载,并将其作为全局配置提供给我的所有应用程序。任何指针将不胜感激。
我已经尝试过 Rémi Rousselet 的建议:
List configData = await loadAsset();
print(configData[0]);
在这种情况下,我得到一个编译器错误:
compiler message: lib/pages/home_page.dart:55:21: Error: Getter not found: 'await'.
compiler message: List configData = await loadAsset();
compiler message: ^^^^^
【问题讨论】: