这是我的功能
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] This function has a return type of 'Future', but doesn't end with a return statement. [missing_return]
我不知道如何解释更多 StackOverflow 在尝试发布此问题时显示此错误消息“看起来您的帖子主要是代码;请添加更多详细信息。
"
最佳答案
您的函数的问题在于它不返回 Future,而是返回 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();
很简单,不是吗?我已经处理了函数内部的所有错误处理。
关于firebase - flutter 等待结果总是空的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54051307/