类型 'Future<List<Data>>' 不是类型转换中类型 'List<Data>' 的子类型



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

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();

}

信息非常明确。您不能从List<Data>投射到Future<List<Data>>。尝试使用:

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<Data>的新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)
}

这只是一个想法(无需测试(

最新更新