簡體   English   中英

在 flutter 中的 Firestore 響應后自動關閉對話框

[英]Closing dialog automatically, after firestore response in flutter

我創建了一個對話框,其中我正在為 CircularProgressIndicator 設置動畫,它在執行 firebase 身份驗證時加載。 一切都很好,除非由於某種原因登錄失敗,例如(沒有互聯網,錯誤的電子郵件/密碼),應用程序顯示錯誤對話框然后這個對話框一直顯示,除非我在框外點擊。 如果出現另一個對話框或錯誤框,我希望它自動關閉。

Future signIn()async{

try {
    showDialog(context: context, builder: (context) =>
        AlertDialog(
          title: Center(
            child: CircularProgressIndicator(
              color: Colors.deepOrange,
            ),
          ),
        )
    );

  await FirebaseAuth.instance.signInWithEmailAndPassword(
    email: emailController.text,
    password: passwordController.text,
  );

  fetchData();
  // print(role_firestore);
  if ( role_firestore == 'Admin'){

    return Navigator.push(
        context,
        MaterialPageRoute(builder: (context) => AdminHomePage()));
  }else if (role_firestore == 'User'){
    return Navigator.push(
      context,
      MaterialPageRoute(builder: (context) =>  MainPage()));
  }else if (role_firestore == 'Restaurant'){
    return Navigator.push(context, MaterialPageRoute(builder: (context) => 
   Restaurants()));
  }else {
    Navigator.pop(context);
  }
} on FirebaseAuthException catch (e) {
  final result = await Connectivity().checkConnectivity();
  showConnectivitySnackBar(result);
  handleLoginError (e);

}

}

這是顯示firestore錯誤的對話框

showDialog(context: context, builder: (context)=> AlertDialog(
  title: const Text("Log In Failed",style: TextStyle(color: Colors.deepOrange)),
  content: Text(messageToDisplay,style: TextStyle(color: Colors.deepOrange)),
  actions: [TextButton( onPressed: () {Navigator.of(context, rootNavigator: 
  true).pop();},
    child: const Text("Ok",style: TextStyle(color: Colors.deepOrange)),)],
));

您可以通過調用關閉/彈出對話框:

Navigator.of(context).pop();

只需將其放在嘗試成功時加載數據的方法的末尾,如果捕獲到錯誤,則將其放在 catch 的開頭

暫無
暫無

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

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