您好,我想弄清楚工厂构造函数如何在 dart 中工作
Hello, I'm trying to figure out how factory constructor working in dart
我从 flutter.dev 中获取了代码,它使用工厂从 Internet 获取数据。
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'],
id: json['id'],
)`
}
}
它告诉我:“'Album' 类型的值不能从函数 'fetchAlbum' 中被 return 编辑,因为它有一个 return 类型的 'Future'."
问题不在 factory
构造函数本身。问题是你声明你的函数 fetchAlbum
是 Future<Album>
类型,而实际上它 return 只是一个同步 Album
...
Flutter 文档中的示例有一个 return 类型的 Future<T>
因为它在处理网络请求时使用了 async
和 await
关键字所以它 returns Future
.
变化:
Album fetchAlbum() {
Map<String, dynamic> map = {
"photo": "another data",
"id": "dsiid1dsaq",
};
return Album.fromJson(map);
}
希望对您有所帮助。
Future<Album> fetchAlbum() async {
Map<String, dynamic> map = {
"photo": "another data",
"id": "dsiid1dsaq",
};
return Album.fromJson(map);
}
或者像这样
Album fetchAlbum() {
Map<String, dynamic> map = {
"photo": "another data",
"id": "dsiid1dsaq",
};
return Album.fromJson(map);
}
我从 flutter.dev 中获取了代码,它使用工厂从 Internet 获取数据。
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'],
id: json['id'],
)`
}
}
它告诉我:“'Album' 类型的值不能从函数 'fetchAlbum' 中被 return 编辑,因为它有一个 return 类型的 'Future'."
问题不在 factory
构造函数本身。问题是你声明你的函数 fetchAlbum
是 Future<Album>
类型,而实际上它 return 只是一个同步 Album
...
Flutter 文档中的示例有一个 return 类型的 Future<T>
因为它在处理网络请求时使用了 async
和 await
关键字所以它 returns Future
.
变化:
Album fetchAlbum() {
Map<String, dynamic> map = {
"photo": "another data",
"id": "dsiid1dsaq",
};
return Album.fromJson(map);
}
希望对您有所帮助。
Future<Album> fetchAlbum() async {
Map<String, dynamic> map = {
"photo": "another data",
"id": "dsiid1dsaq",
};
return Album.fromJson(map);
}
或者像这样
Album fetchAlbum() {
Map<String, dynamic> map = {
"photo": "another data",
"id": "dsiid1dsaq",
};
return Album.fromJson(map);
}