作者:奋斗的筱清年 | 来源:互联网 | 2023-07-07 13:56
这是一个对话框,用于通过Firebase重设忘记的密码。我想显示Firebase中的错误消息(如果存在),然后关闭forgotPassword
对话框,并在成功时在Scaffold上显示确认snackbar。我无法弄清楚如何仅在Firebase的成功回调中显示小吃栏。
这是forgotPassword
对话框的onpressed方法:
onpressed: () {
if (_resetPasswordController.text.isnotEmpty) {
widget.auth.resetPassword(_resetPasswordController.text)
..catchError((e) {
_buildErrorDialog(context,e.toString());
return;
}).then((_) {
Scaffold.of(context).showsnackBar(
snackBar(
content: Text('PASSWORD RESET EMAIL SENT'),),);
Navigator.of(context).pop();
});
}
}
我知道我误会了catchError回调的用法...
作为参考,这是resetPassword方法:
Future resetPassword(String email) async =>
await _firebaseAuth.sendPasswordResetEmail(email: email);
除了脚手架上的小吃栏外,其他所有东西都可以正常工作-成功时不会显示-对话框就消失了,就是这样。
在此先感谢您的帮助!
我已经解决了它,方法是使用一个简单的try catch块,而不是使用_loginScreenKey全局键调用点心栏。
onPressed: () async {
if (_resetPasswordController.text.isNotEmpty) {
try {
await widget.auth
.resetPassword(_resetPasswordController.text);
} on PlatformException catch (e) {
await _buildErrorDialog(context,e.message);
return;
}
_loginScaffoldKey.currentState.showSnackBar(
SnackBar(
content: Text('PASSWORD RESET EMAIL SENT'),),);
Navigator.of(context).pop();
}
})
,
除了脚手架上的小吃栏外,其他所有东西都可以正常工作-成功时不会显示-对话框就消失了,就是这样。
在这种情况下,是因为方法中使用了BuildContext
Scaffold.of(context).showSnackBar(...)
没有Scaffold
小部件作为父级。这意味着您需要在BuildContext
小部件树中包含Scaffold
,因为您在函数
中返回了
Scaffold
Widget build(BuildContext context) {...}
class SeparateButtonWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return RaisedButton(
child: const Text('Show SnackBar'),onPressed: () {
Scaffold.of(context).showSnackBar(
const SnackBar(
content: Text('Success/Fail message...'),duration: Duration(seconds: 3),);
},);
}
}
- 不建议使用
GlobalKey()
,因为根据https://api.flutter.dev/flutter/widgets/GlobalKey-class.html,