如何在继续操作之前等待警报弹出而又无需用户点击继续操作?

时间:2019-08-12 19:24:42

标签: flutter dart flutter-layout

我是Flutter的初学者,在当前(第一个)项目中,我有一个警报,我想在下一行代码运行之前弹出。

如果我使用await,我发现它随后要求用户在屏幕上(警报范围之外)点击才能使程序继续。有什么方法可以确保在继续操作之前无需敲击就可以确保警报存在?

这是我的提醒方法:

myAlert(BuildContext context) {
    return showDialog<void>(
      context: context,
      builder: (BuildContext context) {
        return new AlertDialog(
          title: Text('Some text'),
        );
      },
    );
}

我调用该方法,然后在下一行中调用另一个进行大量计算的方法:

myAlert(context);
compute();

两个方法都可以通过按下按钮来调用(我不知道这是否有任何意义,因此只需将其放在那里即可。)

我希望仅在警报出现后才调用compute()。截至目前,compute()在警报弹出之前开始运行。

谢谢!

1 个答案:

答案 0 :(得分:0)

这有点令人困惑,但是如果要在创建对话框时运行计算,请在构建器中运行它(更好的选择可能是创建一个单独的小部件并在其initState中进行操作)。

myAlert(BuildContext context) {
    return showDialog<void>(
      context: context,
      builder: (BuildContext context) {
        return new MyAlertDialog();
      },
    );
}
  

my_alert_dialog.dart

class MyAlertDialog extends StatefulWidget {
  @override
  _MyAlertDialogState createState() => _MyAlertDialogState();
}

class _MyAlertDialogState extends State<MyAlertDialog> {
  @override
  void initState() {
    compute()//HERE u can du your compute
    super.initState();
  }
  @override
  Widget build(BuildContext context) {
    return //Build here your Dialog Content...
  }
}

如果要等待对话框关闭然后执行计算,请使用await。

myAlert(BuildContext context) async{
    return await showDialog<void>(
      context: context,
      builder: (BuildContext context) {
        return new AlertDialog(
          title: Text('Some text'),
        );
      },
    );
}