这是我的职责
Future<Address> readAddress() async {
database = FirebaseDatabase(app: app);
await database
.reference()
.child(table_name)
.child(uid)
.once()
.then((DataSnapshot snapshot) {
print("address_start");
if (snapshot.value == null) {
print("address_start_value_null");
return null;
} else {
print("address_start_value_not_null");
print(snapshot.value);
Address a = Address().map(snapshot.value);
return a;
// return a;
}
}).catchError((onError) {
print(onError);
return onError;
});
}
这是我的函数调用
readAddress().then((address) {
if (address != null) {
print("address read seucssfully " + address.firstname);
} else {
print(
"address read faield result is null $address"); // + address.toString());
}
}).catchError((onError) {
print("error on read address");
});
但是这里总是返回null。
怎么了?
来自readAddress()函数的消息
[dart]此函数的返回类型为'Future',但是 不以return语句结尾。 [missing_return]
在尝试发布此问题时,我不知道要解释此错误消息的更多StackOverflow信息:“看起来您的帖子主要是代码;请添加更多详细信息。
“
答案 0 :(得分:1)
函数的问题是它没有返回Future,而是返回了Address对象。我会这样重写您的函数,只返回Address对象
Future<Address> readAddress() async {
try{
database = FirebaseDatabase(app: app);
DataSnapshot snapshot = await database
.reference()
.child(table_name)
.child(uid)
.once();
return Address().map(snapshot.value);
}catch(e) {
print(e);
return(e);
}
}
有了这个,您的函数调用就可以是这样:
Address address = readAddress();
很简单,不是吗?我已经注意了函数内部的所有错误处理。