问题描述
我从 Flutter.dev 中获取了使用工厂从互联网获取数据的代码。
import 'dart:convert';
Future<Album> fetchAlbum() async {
final response = await http.get('https://jsonplaceholder.typicode.com/albums/1');
if (response.statusCode == 200) {
// If the server did return a 200 OK response,// then parse the JSON.
return Album.fromJson(jsonDecode(response.body));
} else {
// If the server did not return a 200 OK response,// then throw an exception.
throw Exception('Failed to load album');
}
}
class Album {
final int userId;
final int id;
final String title;
Album({this.userId,this.id,this.title});
factory Album.fromJson(Map<String,dynamic> json) {
return Album(
userId: json['userId'],id: json['id'],title: json['title'],);
}
}
我曾尝试在我的代码中重复它,但没有奏效。我很困惑为什么它不起作用,因为我和示例中的一样。
Future<Album> fetchAlbum() {
Map<String,dynamic> map = {
"photo": "another data","id": "dsiid1dsaq",};
return Album.fromJson(map);
}
class Album {
String photo;
String id;
Album({this.photo,this.id});
factory Album.fromJson(Map<String,dynamic> json) {
return Album(
photo: json['photo'],)`
}
}
它告诉我:“无法从函数 'fetchAlbum' 返回类型为 'Album' 的值,因为它的返回类型为 'Future'。”
解决方法
问题不在于 factory
构造函数本身。问题是您将函数 fetchAlbum
声明为 Future<Album>
类型,而实际上它仅返回同步 Album
...
Flutter 文档中的示例的返回类型为 Future<T>
,因为它在处理网络请求时使用了 async
和 await
关键字,因此它返回 Future
。
变化:
Album fetchAlbum() {
Map<String,dynamic> map = {
"photo": "another data","id": "dsiid1dsaq",};
return Album.fromJson(map);
}
,
希望可以帮到你。
Future<Album> fetchAlbum() async {
Map<String,};
return Album.fromJson(map);
}
或者像这样
Album fetchAlbum() {
Map<String,};
return Album.fromJson(map);
}