Flutter Circularprogress 표시기를 숨기거나 닫는 방법 [중복]

Dec 18 2020

API가로드 될 때까지 로더를 표시하는 것이 필요한 API에서 일부 데이터를 가져 오는 중입니다. 문제는 로더가 잘 작동하지만 어떻게 닫을 수 있는지 모르겠습니다.

내 코드

   Future<http.Response>  _trySubmit3() async {
      final isValid2 = _formKey3.currentState.validate();
      FocusScope.of(context).unfocus();

      if (isValid2) {
        showDialog(
            context: context,
            builder: (BuildContext context) {
              return Center(child: CircularProgressIndicator(
                valueColor: new AlwaysStoppedAnimation<Color>(Color(0xff00abb5)),

              ),);
            });


        print(smsOTP.text);
        print(userConfirmPassword.text);


        var url = '123/set_password.php?email=${userEmail.text}&password=${userConfirmPassword.text}';
        print(url);
        http.Response res = await http.get(url,
          headers: <String, String>{
            'token': 'my token'
          },

        );
        var data = json.decode(res.body.toString());
        print(data);
        print(data['status']);
        if(data['status'].toString() == "success"){

           // I need to close the loader here


        }
      }

답변

UmaizKhan Dec 18 2020 at 19:02

Stackoverflow에 오신 것을 환영합니다. :)

이 트릭 Navigator.pop (context)로이를 수행 할 수 있습니다. 이런 식으로 할 수 있다면 성공하면 숨겨야 할 것 같아요

    if(data['status'].toString() == "success"){
       Navigator.pop(context)
    }
StefanoA. Dec 18 2020 at 19:00

Dialog를 포함 하는를 닫으려면 CircularProgressIndicator모든 작업이 완료된 직후 다음 코드를 사용할 수 있습니다.

Navigator.pop(context);

귀하의 예에서 구현 된 것은 다음과 같습니다.

Future<http.Response>  _trySubmit3() async {
   final isValid2 = _formKey3.currentState.validate();
   FocusScope.of(context).unfocus();

   if (isValid2) {
     showDialog(
         context: context,
         builder: (BuildContext context) {
           return Center(child: CircularProgressIndicator(
             valueColor: new AlwaysStoppedAnimation<Color>(Color(0xff00abb5)),
           ),);
         });


     print(smsOTP.text);
     print(userConfirmPassword.text);

     var url = '123/set_password.php?email=${userEmail.text}&password=${userConfirmPassword.text}';
     print(url);
     http.Response res = await http.get(url,
       headers: <String, String>{
         'token': 'my token'
       },

     );
     var data = json.decode(res.body.toString());
     print(data);
     print(data['status']);
     if(data['status'].toString() == "success"){
         Navigator.pop(context); // closing the Dialog with the CircularProgressIndicator
     }
   }
 }