热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何仅在从Firebase成功回调时在支架上显示确认小吃栏?

这是一个对话框,用于通过Firebase重设忘记的密码。我想显示Firebase中的错误消息

这是一个对话框,用于通过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);

除了脚手架上的小吃栏外,其他所有东西都可以正常工作-成功时不会显示-对话框就消失了,就是这样。

如何仅在从Firebase成功回调时在支架上显示确认小吃栏?

如何仅在从Firebase成功回调时在支架上显示确认小吃栏?

在此先感谢您的帮助!


我已经解决了它,方法是使用一个简单的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) {...}


  • 一种解决方案是用Builder小部件包装按钮小部件,该小部件的上下文引用父Scaffold。查看Flutter文档中的以下解释:https://api.flutter.dev/flutter/material/Scaffold/of.html#material.Scaffold.of.2


  • 另一种方法是像这样将按钮窗口小部件拆分为自己的StatefulWidgetStatelessWidget


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,


推荐阅读
author-avatar
奋斗的筱清年
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有