我有两个Future,它们为我从JSON文件加载字符串。我的目标是拥有一个数据类,在其中可以容纳不同的对象(例如Feed)。我现在不了解的是如何编写一个类数据来保存对象提要,以及如何从Future加载提要对象。
import 'dart:async' show Future;
import 'package:flutter/services.dart' show rootBundle;
import 'dart:convert';
import 'package:freeletics_insights/feed.dart';
Future<String> _loadFeedAsset() async {
return await rootBundle.loadString('assets/json/userfeed1.json');
}
Future<Feed> loadFeed() async {
String jsonFeed = await _loadFeedAsset();
final jsonResponse = json.decode(jsonFeed);
Feed feed = new Feed.fromJson(jsonResponse);
//print(feed.feedEntries.length);
return feed;
}
class Data {
Feed feed;
Data.loadData(){
this.feed = loadFeed();
}
}
void main{
var data = Data.loadData();
print(data.feed.feedEntries.length);
}
我总是得到一个错误,即类型 未来饲料 无法分配给Feed类型。
答案 0 :(得分:0)
当我第一次开始使用Dart和Flutter时,这曾经使我有些失落。您的loadFeed()
方法返回的类型为Future<Feed>
,但是您的Data
类成员feed
的类型为Feed
,这是两种不同的类型。您要做的是“解包”从您的Future<Feed>
方法返回的loadFeed()
,以便访问Feed
对象。
您使用Future
语法“解包” async/await
对象。
看起来可以做的是:
class Data {
Feed feed;
Data.loadData() async {
this.feed = await loadFeed();
}
}
...但是您loadData()
是Data
的构造函数,并且不能将构造方法标记为async
。不过,您可以将main()
方法标记为async
,以使用async/await
语法解开Future<Feed>
。
我在代码中所做的唯一更改是将feed
的{{1}}成员添加到构造函数中,并修改了Data
方法以异步加载您的供稿并将结果传递到main()
对象的构造函数。
Data