【问题标题】:Navigator.push() inside showdialog not workingshowdialog 中的 Navigator.push() 不起作用
【发布时间】:2020-07-28 20:49:00
【问题描述】:

尝试使用 Navigator.push() 导航到新屏幕,但它不起作用。 我创建了一个自定义类来显示 AlertDialog 并使用对象调用该类来显示 alertDialog

_customerAlertDialog.showConfirmAlertDialog(
   context: context,
   title: "Login In",
   subTitle: "You need to login to purchase.",
   onTapResponse: (bool val) async {
     if (val) {
       /// close AlertDialog
       Navigator.of(context).pop();
       Navigator.of(context).push(MaterialPageRoute(builder: (context) => LoginScreen()));
       print("show the login screen");

     } else {
       //TODO : when user click no.
     }
   });

navigator.pop() 正在工作, 打印语句正在工作, 但 Navigator.push 不起作用。也试过这个:

Navigator.push(context,MaterialPageRoute(builder: (context) => LoginScreen())); 

【问题讨论】:

    标签: flutter dart flutter-layout


    【解决方案1】:

    您在Navigator.of(context).pop() 中使用的context 对象不知道该对话框。

    如果您的自定义警报对话框正在调用showDialog,请考虑传递builder 返回的BuildContext 对象:

    showDialog(
      context: context,
      builder: (BuildContext ctx) { 
        // ctx is a context object that will be aware of the dialog
        // consider passing this along to onTapResponse as an argument
      },
    );
    

    然后您可以使用该BuildContext 来获取能够关闭对话框的导航器:

    onTapResponse: (BuildContext ctx, bool val) async {
      if (val) {
        // close AlertDialog
        Navigator.of(ctx).pop();
        Navigator.of(ctx).push(MaterialPageRoute(builder: (context) => LoginScreen()));
        print("show the login screen");
      } else {
        //TODO : when user click no.
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-10
      • 2023-03-09
      • 2015-03-04
      • 2021-05-26
      • 1970-01-01
      相关资源
      最近更新 更多