簡體   English   中英

在 Flutter FutureBuilder 等待中使用自定義對話框

[英]Use custom dialogs in Flutter FutureBuilder waiting

我對服務器有一個請求,當我使用 FutureBuilder 時,ConnectionState.waiting 部分,我想使用自定義對話框,但是在 ConnectionState.done 之后,這個對話框沒有關閉,它甚至不執行 Navigator.pop(context) . 在此處輸入圖片描述 在此處輸入圖片描述

試試這個

ConnectionState.waiting之前調用這個onLoading(context);

然后

if(ConnectionState. done){
  Navigator.pop();
}



void onLoading(BuildContext context) {
    showDialog(
        context: context,
        barrierDismissible: false,
        builder: (BuildContext context) {
          return Center(child:  CircularProgressIndicator(color: Colors.blue));
        });
  }

不幸的是,無法使用 object 方向禁用警報對話框,並且我在單獨的頁面上設計了對話框,並且 Navigator.pop() 不起作用,但是通過這種方法,我達到了我想要的結果。

  FutureBuilder(
   future: _futureEditName,
   builder: (context,snapshot){
      if(snapshot.connectionState == ConnectionState.waiting){
          ShowWaitingDialog(context,true);

      }else if(snapshot.connectionState == ConnectionState.done && snapshot.hasData){
         ShowWaitingDialog(context,false)
      }
   }

);

顯示和關閉警報對話框

ShowWaitingDialog(BuildContext context,bool show) {
showDialog(
  context: context,
  builder: (context) {
    return show == true ?
    AlertDialog(
      insetPadding: const EdgeInsets.all(20),
      alignment: Alignment.center,
      title: Container(
        width: double.maxFinite,
        child: Column(
          textDirection: TextDirection.rtl,
          children: [
            Row(
              textDirection: TextDirection.rtl,
              children: [
                const SpinKitCircle(
                  color: Colors.lightBlue,
                  size: 35,
                ),
                const SizedBox(width: 20,),
                Container(
                  alignment: Alignment.center,
                  child: const Text(
                    'please wait',
                    style: TextStyle(
                      color: kGraydark,
                      fontSize: 15,
                    ),
                  ),
                ),
              ],
            ),
          ],
        ),
      ),
    )
    : FutureBuilder(builder: (context, snapshot) {
      Navigator.of(context).pop();
      Navigator.of(context).pop();
      return Container();
    },);
},);

}

Navigator.of(context).pop() It must be called twice

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM