Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 如何将一个对象从未来的类加载到另一个对象/类中?_Dart_Flutter - Fatal编程技术网

Dart 如何将一个对象从未来的类加载到另一个对象/类中?

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

我有两个期货,它们为我从JSON文件加载字符串。我的目标是拥有一个类数据,我可以在其中保存不同的对象(例如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);
}