Я пытаюсь создать приложение REST, которое использует связь HTTP Get для входа во Flutter.Хотя у меня не было проблем с импортом пакета "http / http.dart" и запуском методов класса http, я столкнулся с проблемой обработки исключений в Dart / Flutter.Я создал метод для вызова http, но если соединение по какой-либо причине не работает, оно, естественно, выдаст исключение «SocketException».У меня нет проблем с обработкой исключения в том же методе, который сделал запрос get, но если я попытаюсь передать его в стеке метода вызывающей функции родительскому методу, я просто не смогу его перехватить снова.Я нашел ключевое слово «rethrow», но до сих пор не удалось перебросить исключение.Ниже приведены некоторые методы, которые я использую в своем коде, как метод входа в систему и метод вызова:
static Future<JsonEnvelop> loginUser(String email, String passwd) async {
List<int> content = Utf8Encoder().convert(passwd);
crypto.Digest digest = crypto.md5.convert(content);
String url = _baseUrl + _loginUrl + email + "/" + digest.toString();
http.Response response;
try {
response = await http.get(url);
} on SocketException catch(e) {
rethrow;
}
if(response != null && response.statusCode == 200) {
return JsonEnvelop.fromJson(json.decode(response.body));
} else {
throw Exception('Failed to login');
}
}
void onVerifyCodeBtnPressed(BuildContext context) {
if (_formKey.currentState.validate()) {
String email = _emailController.text;
String passwd = _passwdController.text;
Future<JsonEnvelop> envelop;
try {
envelop = RemoteUserServices.loginUser(
email, passwd);
} on SocketException {
throw Exception('Internet is down');
}
Scaffold.of(context).showSnackBar(SnackBar(content: Text('Login to your account')));
envelop.then((JsonEnvelop envelop) {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: new Text("Login"),
content: new Text("Login Successful"),
actions: <Widget>[
new FlatButton(
child: new Text("OK"),
onPressed: () {
Navigator.of(context).pop();
},
)
],
);
}
);
});
} else {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: new Text("Missing data"),
content: new Text("Type your email and password in the fields"),
actions: <Widget>[
new FlatButton(
child: new Text("OK"),
onPressed: () {
Navigator.of(context).pop();
},
)
],
);
}
);
}
}
В чем может быть проблема в этой ситуации?Я надеюсь создать диалоговое окно, предупреждающее пользователя, что Интернет не работает.