【问题标题】:type 'Future<List<Data>>' is not a subtype of type 'List<Data>' in type cast类型“Future<List<Data>>”不是类型转换中“List<Data>”类型的子类型
【发布时间】:2019-12-03 04:53:31
【问题描述】:

我正在从服务器获取数据并尝试在网格视图中进行设置,但出现错误:

type 'Future<List<Data>>' is not a subtype of type 'List<Data>' in type cast

这是我的数据类:

class Data with ChangeNotifier {
Data({
  this.name,
  this.image,
});

final String image;
final String name;


factory Data.fromJson(Map<String, dynamic> json) {
print(json['title'].toString());
return Data(
  name: json['title'].toString(),
  image: json['image'].toString(),
 );

}
}

这是我的 Data_screen,我称之为:

 var datas= Provider.of<Datas>(context).fetchData() as List<Data>;
 var datalength = datas.length;

小部件:

 Expanded(
            child: GridView.builder(
              gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(

                crossAxisSpacing: 10,
                mainAxisSpacing: 10,
              ),
              padding: EdgeInsets.only(left: 28, right: 28, bottom: 58),
              itemCount: datas.length,

              itemBuilder: (context, index) => DataCard(
                datas[index],
                index: index,
                onPress: () {
                },
              ),
            ),
          ),

在 Datas.dart 中:

 Future<List<Data>> fetchData() async {
 var response = await http.get(url);
 var responseJson = json.decode(response.body);
 print(responseJson);
 return (responseJson['datas'])
    .map<Data>((p) => Data.fromJson(p))
  .toList();

}

【问题讨论】:

  • var datas= Provider.of(context).fetchData() as Future>;尝试这个。因为 fetchData 函数返回类型。
  • @VirenVVarasadiya 我试过这个,但后来我在 datas[index] 和 datas.length 的小部件中收到错误

标签: android ios flutter dart


【解决方案1】:

信息很清楚。您不能从 List&lt;Data&gt; 转换为 Future&lt;List&lt;Data&gt;&gt;。尝试使用:

List<Data> fetchData() async {
 var response = await http.get(url);
 var responseJson = json.decode(response.body);
 print(responseJson);
 return (responseJson['datas'])
    .map<Data>((p) => Data.fromJson(p))
  .toList();
}

或者用List&lt;Data&gt;返回一个新的Future

Future<List<Data>> fetchData() async {
 var response = await http.get(url);
 var responseJson = json.decode(response.body);
 print(responseJson);
 var response = (responseJson['datas'])
    .map<Data>((p) => Data.fromJson(p))
  .toList();
 return Future.value(response)
}

这只是一个想法(未经测试)

【讨论】:

  • 当我更改为您提供的代码时,返回语句中出现错误:返回类型 'dynamic' 不是 'List',由方法 'fetchData' 定义.dart(return_of_invalid_type) .
  • 当我调试时我发现我在这一行收到错误:var response = await http.get(url);
  • 你试过Future.value() 吗?我编辑了我的答案(在 OR 部分)
猜你喜欢
  • 2021-12-08
  • 1970-01-01
  • 2021-10-20
  • 2020-09-20
  • 2019-12-31
  • 2020-09-10
  • 2021-12-30
  • 2020-04-07
  • 1970-01-01
相关资源
最近更新 更多