所以對于一些背景,我實作了一個從 Firebase 的實時資料庫中讀取并回傳一個子節點的函式。我已經構建了一個按鈕,用于檢查該函式是否回傳該物件,或者如果該函式回傳一個我希望小吃店顯示訊息的物件,則回傳 null。
ElevatedButton(
onPressed: () {
if (validateUsername() != null) {
print("conditional: test");
ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
content: Text(
"Username has been taken please try a different one"),
duration: Duration(seconds: 5)));
} else {
return null;
}
},
通過將其轉換為異步函式,我在該函式上取得了一些成功
validateUsername() async {
final database = FirebaseDatabase.instance.ref().child("/takenUsernames");
await database
.child(_usernameController.text.trim())
.once()
.then((DatabaseEvent event) {
final snapShot = event.snapshot;
final value = snapShot.value;
print("function result: $value");
return value;
});
當我將它轉換為異步函式時,小吃店會顯示訊息,但不幸的是,即使條件等于 null,它出于某種原因仍會繼續顯示訊息并列印“測驗”輸出。但是,如果我要嘗試取消異步,則小吃店不會列印,并且條件中的“測驗”也不會列印。非異步輸出
任何幫助將不勝感激,并感謝您的時間。
uj5u.com熱心網友回復:
添加嘗試/捕獲
validateUsername() async {
try {
final database = FirebaseDatabase.instance.ref().child("/takenUsernames");
await database
.child(_usernameController.text.trim())
.once()
.then((DatabaseEvent event) {
final snapShot = event.snapshot;
final value = snapShot.value;
print("function result: $value");
return value;
});
} catch(e) {
print("err $e");
return null;
}
}
uj5u.com熱心網友回復:
嘗試這種方法,在變數中使用 await 將等待該值,然后 if 將評估結果。
ElevatedButton(
onPressed: () async {
String validation = await validateUsername(); // I used type String but you should use the type that will be return.
if (validation != null) {
print("conditional: test");
ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
content: Text(
"Username has been taken please try a different one"),
duration: Duration(seconds: 5)));
} else {
return;
}
},
)
uj5u.com熱心網友回復:
感謝@WilsonToribio 的幫助,我能夠使用他提供的資訊并對validateUsername()函式進行一些更改,如此處所示
validateUsername() async {
try {
final database = FirebaseDatabase.instance.ref().child("/usernames");
final response = await database
.child(_usernameController.text.trim())
.once()
.then((event) {
final dataSnapshot = event.snapshot;
if (dataSnapshot.value != null) {
return dataSnapshot.value;
}
});
return response;
} catch (e) {
print("err $e");
return null;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/460417.html
上一篇:根據最佳分數查找等級
