如何解决你好,我想弄清楚工厂构造函数在 dart 中是如何工作的
我从 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);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。