【问题标题】:Call widget in Future<Widget> function Flutter在 Future<Widget> 函数 Flutter 中调用小部件
【发布时间】:2021-09-10 11:01:17
【问题描述】:

基本上我有一个按钮(GestureDetector),可以在同一个文件中调用 Future 函数。问题是该函数中的小部件没有按应有的方式显示,但后台进程正在成功运行。

触发器:

showDialog(
context: context,
builder: (context) {
AlertDialog(
  /// Below the button to call function *resetPassword*
  GestureDetector(
   child: Text("Yes"),
   onTap: () async {
   Navigator.of(context).pop();
   resetPassword('manan@gmail.com')}))})

小部件功能:

Future<Widget> resetPassword(email) async {
try{
await FirebaseAuth.instance.sendPasswordResetEmail(email: email)
return AlertDialog(
///the content of dialog)
}on FirebaseAuthException catch (e) {
return AlertDialog(
///the content of dialog)
}}

令人惊讶的是重置密码的电子邮件已成功发送。
免责声明:我是 Flutter 新手,希望 sifus 能体谅一下。

【问题讨论】:

    标签: flutter flutter-widget flutter-future


    【解决方案1】:

    一般来说,当您使用对话框时,您必须使用 showDialog() 方法将其包装起来,例如:

      await showDialog(
       context: context,
       builder: (BuildContext context) {
        return AlertDialog(
          title: Center(child: Text('Reset password')),
          content: Builder(
            builder: (context) {
              return Container(child: ForgotPasswordForm());
            },
          ),
        );
      },
    );
    

    其次,我看到您已经嵌套了警报对话框小部件,我认为您应该重新构建它。

    【讨论】:

    • 实际上我已经用 showDialog 包装了对话框,可能我必须重新编辑我的问题。
    • 我仍然认为问题在于您在另一个 AlertDialog 中返回 AlertDialog 小部件
    • 是的,但我尝试通过替换 Future 来尝试另一种方法。有用。顺便说一句,感谢您的帮助,因为我还没有为后者 AlertDialog 包装 showDialog。
    猜你喜欢
    • 2021-11-11
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    • 2021-05-20
    • 2018-11-06
    相关资源
    最近更新 更多