Dart 如何将一个对象从未来的类加载到另一个对象/类中?
我有两个期货,它们为我从JSON文件加载字符串。我的目标是拥有一个类数据,我可以在其中保存不同的对象(例如Feed)。我现在不明白的是,我如何编写一个类数据来保存对象提要,以及从将来加载提要对象Dart 如何将一个对象从未来的类加载到另一个对象/类中?,dart,flutter,Dart,Flutter,我有两个期货,它们为我从JSON文件加载字符串。我的目标是拥有一个类数据,我可以在其中保存不同的对象(例如Feed)。我现在不明白的是,我如何编写一个类数据来保存对象提要,以及从将来加载提要对象 import 'dart:async' show Future; import 'package:flutter/services.dart' show rootBundle; import 'dart:convert'; import 'package:freeletics_insights/feed
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);
}
导入'dart:async'显示未来;
导入“包:flatter/services.dart”显示根包;
导入“dart:convert”;
导入“package:freeletics_insights/feed.dart”;
Future\u loadFeedAsset()异步{
return wait-rootBundle.loadString('assets/json/userfeed1.json');
}
Future loadFeed()异步{
字符串jsonFeed=await_loadFeedAsset();
final jsonResponse=json.decode(jsonFeed);
Feed=new Feed.fromJson(jsonResponse);
//打印(feed.feedEntries.length);
回馈;
}
类数据{
饲料;
Data.loadData(){
this.feed=loadFeed();
}
}
真空总管{
var data=data.loadData();
打印(data.feed.feedEntries.length);
}
我总是得到一个错误,类型
未来饲料
无法分配给类型提要。当我第一次开始使用“飞镖”和“颤振”时,这是我经常犯的错误。您的
loadFeed()
方法返回一种类型的Future
,但您的Data
类成员feed
的类型是feed
,这是两种不同的类型。您要做的是“展开”从loadFeed()
方法返回的Future
,以便访问Feed
对象
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(this.feed);
}
void main async {
var feed = await loadFeed();
var data = Data(feed);
print(data.feed.feedEntries.length);
}
您可以使用async/await
语法“展开”Future
对象
看起来您可以做的是:
class Data {
Feed feed;
Data.loadData() async {
this.feed = await loadFeed();
}
}
。。。但是您loadData()
是Data
的构造函数,不能将构造函数方法标记为async
。但是,您可以将main()
方法标记为async
以使用async/await
语法来展开您的未来
我在代码中唯一更改的是将Data
的feed
成员添加到构造函数中,并调整main()
方法以异步加载feed,并将结果传递到Data
对象的构造函数中
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(this.feed);
}
void main async {
var feed = await loadFeed();
var data = Data(feed);
print(data.feed.feedEntries.length);
}
Future\u loadFeedAsset()异步{
return wait-rootBundle.loadString('assets/json/userfeed1.json');
}
Future loadFeed()异步{
字符串jsonFeed=await_loadFeedAsset();
final jsonResponse=json.decode(jsonFeed);
Feed=new Feed.fromJson(jsonResponse);
//打印(feed.feedEntries.length);
回馈;
}
类数据{
饲料;
数据(此.feed);
}
无效主异步{
var feed=await loadFeed();
var数据=数据(feed);
打印(data.feed.feedEntries.length);
}