В этом коде я отобразил диалоговое окно двумя способами:
В методе публикации
2.Другой при нажатии кнопки входа в систему
с помощью setstate либо true, либо false.
Теперь, пока код состояния = 200, диалоговое окно открывается и закрывается в случае успеха. но если произойдет другая ошибка; например: если идентификатор пароля не совпадает, на панели закусок отображается сообщение об ошибке, но диалоговое окно не закрывается. Какие изменения мне следует внести в приведенный ниже код и любые другие простые способы реализации диалогового окна, пока оно не обработает метод post. (я пытаюсь показать индикатор прогресса/загрузки).
Оно должно закрываться автоматически когда метод завершается, пользователь никуда не нажимает
В этом коде я отобразил диалоговое окно двумя способами: [list] [*]В методе публикации 2.Другой при нажатии кнопки входа в систему с помощью setstate либо true, либо false. [/list] Теперь, пока код состояния = 200, диалоговое окно открывается и закрывается в случае успеха. но если произойдет другая ошибка; например: если идентификатор пароля не совпадает, на панели закусок отображается сообщение об ошибке, но диалоговое окно не закрывается. Какие изменения мне следует внести в приведенный ниже код и любые другие простые способы реализации диалогового окна, пока оно не обработает метод post. (я пытаюсь показать индикатор прогресса/загрузки). Оно должно закрываться автоматически когда метод завершается, пользователь никуда не нажимает [code]//imports
class Login extends StatefulWidget { const Login({super.key});
@override State createState() => _LoginState(); }
class _LoginState extends State { //other intilizations bool isLoading = false;
@override void initState() { super.initState();
}
Future postUser() async { if (!_formKey.currentState!.validate()) return; setState(() { isLoading = true; }); showAlertDialog(context); final encodedUser = Uri.encodeComponent(_usernameController.text); final encodedPassword = Uri.encodeComponent(_passwordController.text); var url = Uri.parse( '${Config.baseUrl}/token', ); var bodyData = { 'username': encodedUser, 'password': encodedPassword, 'grant_type': "password" }; try { final response = await http.post(url, body: bodyData); if (response.statusCode == 200) { final responseBody = jsonDecode(response.body); if (responseBody.containsKey('access_token')) { Token user = Token.fromJson(responseBody); if (user.accessToken.isNotEmpty) { await _storeToken(user.accessToken); Navigator.pushNamed(context, '/Home'); } else { _showSnackBar('Authentication failed. Please try again.'); } } else { _showSnackBar('Authentication failed. No access token received.'); } } else if (response.statusCode == 400) { _showSnackBar('Credentials did not match !: ${response.statusCode}'); } } on SocketException catch (_) { _showSnackBar( 'No internet connection. Please check your connection and try again.'); } on HttpException catch (_) { _showSnackBar('Could not connect to the server. Please try again later.'); } catch (e, stackTrace) { print('Exception occurred: $e'); print('Stack trace: $stackTrace'); _showSnackBar('An unexpected error occurred. Please try again.'); } finally {} setState(() { isLoading = false; }); }
[/code] Я пытался показать индикатор загрузки, когда isLoading==true, и закрывается, когда isloading==false, либо при успешном или неудачном методе сообщения