在使用 API 时,建议根据我们期望接收的数据创建 Class:
class Article {
String id;
String caption;
Article({
this.id,
this.caption,
});
}
由于我们使用的是返回 JSON 对象的 API,我们可以实现 toJson 函数和 fromJson 工厂:
class Article {
String id;
String caption;
Article({
this.id,
this.caption,
});
factory Article.fromJson(Map<String, dynamic> json) => new Article(
id: json["id"] == null ? null : json["id"],
caption: json["caption"] == null ? null : json["caption"],
);
Map<String, dynamic> toJson() => {
"id": id == null ? null : id,
"caption": caption == null ? null : caption,
};
}
通过这样做,我们可以从 HTTP 响应创建一个Article 类:
FormData formData = new FormData.fromMap({
'author' : author.toString(),
'caption' : caption,
});
Response response = await Dio().post("$SERVER_IP/api/articlecreate/", data: formData);
print(response.toString());
final jsonData = json.decode(response.body);
Article article = Article.fromJson(Map<String, String>.from(jsonData));
以下 sn-p 根据您指定的场景包装了一个完整示例:
import 'dart:convert';
void getArticle(var user, var caption) async {
Future<dynamic> futureArticle;
String articleid;
futureArticle = await createArticle(user.id, caption.text);
print(futureArticle.id);
print(futureArticle.caption);
articleid = futureArticle.id;
}
Future<Article> createArticleImage(String author,String caption,) async {
try {
FormData formData = new FormData.fromMap({
'author' : author.toString(),
'caption' : caption,
});
Response response = await Dio().post("$SERVER_IP/api/articlecreate/", data: formData);
print(response.toString());
final jsonData = json.decode(response.body);
Article article = Article.fromJson(Map<String, String>.from(jsonData));
return article;
} catch (e) {
print(e);
}
}
class Article {
String id;
String caption;
Article({
this.id,
this.caption,
});
factory Article.fromJson(Map<String, dynamic> json) => new Article(
id: json["id"] == null ? null : json["id"],
caption: json["caption"] == null ? null : json["caption"],
);
Map<String, dynamic> toJson() => {
"id": id == null ? null : id,
"caption": caption == null ? null : caption,
};
}