Flutter 如何在flatter中自动关闭对话框警报小部件?

Flutter 如何在flatter中自动关闭对话框警报小部件?,flutter,flutter-dialog,Flutter,Flutter Dialog,请原谅我,如果这是一个noob问题,或者代码似乎太基本,我是新手。 我已经在谷歌上做了我应得的一份工作,但我还没有找到解决办法 一旦future函数启动,我想显示加载警报。在处理API请求/响应时,如果发生错误,则应在对话框中显示该错误,并应自动取消加载对话框 现在,ErrorDialog显示并可以通过其按钮解除,但LoadingDialog不会解除 我可以用未来来做,但这只是一个工作,有太多的可变结果。以下是虚拟代码: import 'package:flutter/material.dart

请原谅我,如果这是一个noob问题,或者代码似乎太基本,我是新手。 我已经在谷歌上做了我应得的一份工作,但我还没有找到解决办法

一旦future函数启动,我想显示加载警报。在处理API请求/响应时,如果发生错误,则应在对话框中显示该错误,并应自动取消加载对话框

现在,ErrorDialog显示并可以通过其按钮解除,但LoadingDialog不会解除

我可以用未来来做,但这只是一个工作,有太多的可变结果。以下是虚拟代码:

import 'package:flutter/material.dart';

class RandomScreen extends StatefulWidget {
  @override
  _RandomScreenState createState() => _RandomScreenState();
}

class _RandomScreenState extends State<RandomScreen> {

  Future<void> _submitApiRequest() async {
    try {
      _showLoadingAlert();

      //processing the API request/response here.

    } catch (error) {
      _showErrorDialogue(error.toString());
    }
  }

  void _showErrorDialogue(String errorMessage) {
    showDialog(
      context: context,
      builder: (ctx) => Dialog(
        shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.circular(20.0),
        ),
        child: Column(
          children: <Widget>[
            Text(errorMessage),
            FlatButton(
              onPressed: () => Navigator.of(context).pop(),
              child: Text(
                'Dismiss',
              ),
            ),
          ],
        ),
      ),
    );
  }

  void _showLoadingAlert() {
    showDialog(
      context: context,
      builder: (ctx) => CircularProgressIndicator(),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Random Screen'),
      ),
      body: Center(
        child: RaisedButton(
          onPressed: _submitApiRequest,
          child: Text('Submit'),
        ),
      ),
    );
  }
}
导入“包装:颤振/材料.省道”;
类RandomScreen扩展StatefulWidget{
@凌驾
_RandomScreenState createState()=>\u RandomScreenState();
}
类_RandomScreenState扩展状态{
Future\u submitApiRequest()异步{
试一试{
_showLoadingAlert();
//在此处处理API请求/响应。
}捕获(错误){
_对话(error.toString());
}
}
无效对话(字符串错误消息){
显示对话框(
上下文:上下文,
生成器:(ctx)=>对话框(
形状:圆形矩形边框(
边界半径:边界半径。圆形(20.0),
),
子:列(
儿童:[
文本(错误消息),
扁平按钮(
onPressed:()=>Navigator.of(context.pop(),
子:文本(
“解雇”,
),
),
],
),
),
);
}
void _showLoadingAlert(){
显示对话框(
上下文:上下文,
生成器:(ctx)=>CircularProgressIndicator(),
);
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“随机屏幕”),
),
正文:中(
孩子:升起按钮(
onPressed:_submitApiRequest,
子项:文本('Submit'),
),
),
);
}
}

如果您试图调用API并显示加载屏幕,您尝试的方式可能不是最好的方式。我建议你使用

这将在您尝试执行API调用时显示加载程序,一旦收到API响应,您就可以使用状态变量隐藏加载程序

如果您仍然想使用警报框执行此操作, 您需要调用中提到的Navigator.pop


如果应用程序有多个导航器对象,则可能需要调用
Navigator.of(context,rootNavigator:true).pop(result)
来关闭对话框,而不仅仅是
Navigator.pop(context,result)

如果您试图调用API并显示加载屏幕,您尝试的方式可能不是最好的方式。我建议你使用

这将在您尝试执行API调用时显示加载程序,一旦收到API响应,您就可以使用状态变量隐藏加载程序

如果您仍然想使用警报框执行此操作, 您需要调用中提到的Navigator.pop


如果应用程序有多个导航器对象,可能需要调用
Navigator.of(context,rootNavigator:true).pop(result)
来关闭对话框,而不仅仅是
Navigator.pop(context,result)

关系表,请检查答案。哇,我所要做的就是在显示下一个对话框之前弹出它。很高兴看到我只是想得太多了。谢谢@SumanMaharjan,这解决了我的问题。如果问题解决了,请接受这个答案:当然,我这么做了,但我的声誉还很低,所以它不会显示出相关性,请检查答案。哇,我所要做的就是在显示下一个对话框之前弹出它。很高兴看到我只是想得太多了。谢谢@SumanMaharjan,这解决了我的问题。如果问题解决了,请接受这个答案:当然,我这么做了,但我的声誉还很低,所以这不会表明我在什么地方见过这个答案,而且这个方法似乎有点太复杂了。@Suman Maharjan对我问题的评论为我的案例提供了最佳解决方案。谢谢你花时间回复:)我已经在某个地方看到了这个答案,它看起来有点太复杂了。@Suman Maharjan对我问题的评论为我的案例提供了最佳解决方案。感谢您抽出时间回复:)