如何在 flutter 中关闭 Get 覆盖?

问题描述 投票:0回答:1

我的应用程序中有一个异步功能,用户应该等待操作完成,但应该有一个按钮可以取消操作并在应用程序中重新测试操作 问题是,当我使用 getx 的 overley 时,它很好,但是取消 btn 不起作用,我搜索了所有地方,但仍然一无所获

await Get.showOverlay(asyncFunction: () async {
      //-------------------Example for the operation----------
      await Future.delayed(Duration(seconds: 5));
    }, loadingWidget: Material(
      color: Colors.transparent,
      type: MaterialType.transparency,
      elevation: 0,
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Text('working on...',style: TextStyle(color: Colors.white,fontSize: 20,fontFamily: 'Sans',),),
          SizedBox(height: 10.0,),
          CircularProgressIndicator(color: Colors.blue),
          BtnWidget(text: 'cancle', icon: Assets.svg.cancelSvgrepoCom, onPressed: () {
            Get.back();
            restartsteps();
          })
        ],
      ),
    ));

我很感激任何帮助

我使用了 Get.back() 但它会转到上一页并且覆盖层仍然打开直到操作完成 我用过

Get.back(closeOverlays: true)
;和
Get.close(1)
, 还没有任何效果

flutter dart async-await flutter-getx get-cli
1个回答
0
投票

未来不会在执行中停止。

您可以将 Timer 与 Completer 结合起来,从 Timer 中完成它并在 Completer.future 上等待,如下所示:

final Completer<bool> completer = Completer();
late Timer timer;
    
await Get.showOverlay(asyncFunction: () 
         async {
          timer = Timer(Duration(seconds: 10), () {
          completer.complete(true);
          });
          await completer.future;
        },
        loadingWidget: Material(
          color: Colors.transparent,
          type: MaterialType.transparency,
          elevation: 0,
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text(
                'working on...',
                style: TextStyle(
                  color: Colors.white,
                  fontSize: 20,
                  fontFamily: 'Sans',
                ),
              ),
              SizedBox(
                height: 10.0,
              ),
              CircularProgressIndicator(color: Colors.blue),
              ElevatedButton(
                onPressed: () {
                  timer.cancel();
                  completer.complete(true);
                },
                child: Text("cancel"),
              )
            ],
          ),
        ));
© www.soinside.com 2019 - 2024. All rights reserved.