dart – 如何将JSON资产加载到Flutter App中

前端之家收集整理的这篇文章主要介绍了dart – 如何将JSON资产加载到Flutter App中前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何将 JSON资产加载到我的Flutter应用程序中?

我的pubspec.yaml文件包含以下内容

assets:
    - assets/data.json

我一直在试图加载数据.我试过了

final json = JSON.decode(
    DefaultAssetBundle.of(context).loadString("assets/data.json")
);

但是我得到了错误

The argument type ‘Future< String>’ can’t be assigned to the parameter type ‘String’.

谢谢!

解决方法

@Alexandre Beaudet的回答是正确的,但没有提供很多有关正在发生的事情的背景信息.

当你调用loadString时,它实际上是一个异步方法调用.你可以告诉它,因为它返回一个Future< value>而不仅仅是一个价值.这意味着它不会立即产生String的结果,但会在将来的某个时刻产生.

在Dart中处理异步性有两种主要方式;第一个是使用异步和等待,第二个是直接使用期货.见dart guide on Asynchronous Programming.

如果你直接使用future.then,你可以从普通函数(即从initState等)开始.您只需指定回调,并在回调中指定如何处理结果.

void printDailyNewsDigest() {
  final future = gatherNewsReports();
  future.then((news) => print(news));
}

如果你想使用await,如@Alexandre所示,你需要将你正在使用它的函数标记为async,即:

Future<Void> printDailyNewsDigest() async {
  String news = await gatherNewsReports();
  print(news);
}

如果覆盖函数(即initState),还需要确保不更改返回值.大部分时间都应该被dart 2打字抓住,但是无效 – >未来似乎不是.

最后要注意的一点是 – 如果您使用数据结果来构建小部件,您可能希望查看使用FutureBuilder.

猜你在找的JavaScript相关文章