Flutter 显示和隐藏 AlertDialog 取决于动态值

Posted

技术标签:

【中文标题】Flutter 显示和隐藏 AlertDialog 取决于动态值【英文标题】:Flutter show and hide AlertDialog depend on dynamic value 【发布时间】:2020-10-13 06:54:50 【问题描述】:

在这个 sn-p 事件中,值是可以动态变化的流值。

LocationPermissions().serviceStatus.listen((event) 
    if(event == ServiceStatus.disabled)
      print('Location Disabled');
      testAlert(context); // Show dialog
    else
      testAlert(context); //I want hide dialog when user enable location.How do?
      print('Location Enabled');
         
   

这是我的对话代码。

void testAlert(BuildContext context)
  showDialog(
    context: context,
    builder: (BuildContext context) 
      // return object of type Dialog
      return AlertDialog(
        title: new Text("Location service disable"),
        content: new Text("You must enable your location access"),
        actions: <Widget>[
          // usually buttons at the bottom of the dialog
          new FlatButton(
            child: new Text("Go Setting"),
            onPressed: () 
              openLocationSetting();
              //visible ?Navigator.pop(context , true): Navigator.pop(context, false);

            ,
          ),
        ],
      );
    ,
  );

如何显示和隐藏取决于事件值。谢谢。

【问题讨论】:

使用Navigator.pop(context)隐藏对话框 在哪里添加?那个代码兄弟@Jide 我写了一个答案。检查一下 【参考方案1】:

当用户启用location 时,不要调用对话框方法,只需删除此行testAlert(context);

LocationPermissions().serviceStatus.listen((event) 
    if(event == ServiceStatus.disabled)
      print('Location Disabled');
      testAlert(context); // Show dialog
    else
     // testAlert(context); //remove or just comment this line 
      print('Location Enabled');
         

更新:-

通过在此调用 Navigator.pop() 来关闭平面按钮上的警报 对话框将被关闭

示例:-

void testAlert(BuildContext context)
  showDialog(
    context: context,
    builder: (BuildContext context) 
      // return object of type Dialog
      return AlertDialog(
        title: new Text("Location service disable"),
        content: new Text("You must enable your location access"),
        actions: <Widget>[
          // usually buttons at the bottom of the dialog
          new FlatButton(
            child: new Text("Go Setting"),
            onPressed: () 
              Navigator.pop(context)
              openLocationSetting();
              

            ,
          ),
        ],
      );
    ,
  );

当用户再次返回应用程序时,在生命周期中调用此方法,即 didChangeAppLifecycleState() 方法

@override
void didChangeAppLifecycleState(AppLifecycleState state) 
  // If user resumed to this app, check permission
  if(state == AppLifecycleState.resumed) 
   LocationPermissions().serviceStatus.listen((event) 
    if(event == ServiceStatus.disabled)
      print('Location Disabled');
      testAlert(context); // Show dialog
    else
      testAlert(context); //I want hide dialog when user enable location.How do?
      print('Location Enabled');
         
      
  

【讨论】:

先生,我做到了。如果我在用户启用定位服务时删除该行,如何显示检测对话框。 您的回答意味着当用户单击 GoSetting 按钮对话框将关闭但用户不选择位置。我想关闭并显示取决于异步值 更新了我的答案,当用户返回应用程序时,您需要检查恢复生命周期方法,再次检查位置是否启用,如果不显示对话框 让我们continue this discussion in chat。

以上是关于Flutter 显示和隐藏 AlertDialog 取决于动态值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter 中刷新 AlertDialog?

带有 ListView 和底部 TextField 的 Flutter AlertDialog

如何在 Flutter 中制作 AlertDialog?

如何在Flutter中刷新AlertDialog?

如何获取 AlertDialog 的宽高 - Flutter Web

如何在 Flutter 中将 AlertDialog FlatButton 居中