这是我的异常类。异常类已经由flutter的抽象异常类实现。我错过了什么吗?
class FetchDataException implements Exception { final _message; FetchDataException([this._message]); String toString() { if (_message == null) return "Exception"; return "Exception: $_message"; } } void loginUser(String email, String password) { _data .userLogin(email, password) .then((user) => _view.onLoginComplete(user)) .catchError((onError) => { print('error caught'); _view.onLoginError(); }); } Future < User > userLogin(email, password) async { Map body = { 'username': email, 'password': password }; http.Response response = await http.post(apiUrl, body: body); final responseBody = json.decode(response.body); final statusCode = response.statusCode; if (statusCode != HTTP_200_OK || responseBody == null) { throw new FetchDataException( "An error occured : [Status Code : $statusCode]"); } return new User.fromMap(responseBody); }
当状态不是200时,CatchError不会捕获错误。不会打印捕获的Inshort错误。
尝试
void loginUser(String email, String password) async { try { var user = await _data .userLogin(email, password); _view.onLoginComplete(user); }); } on FetchDataException catch(e) { print('error caught: $e'); _view.onLoginError(); } }
catchError有时候做起来有点棘手。使用async/,await您可以将try/ catch喜欢与同步代码配合使用,通常更容易正确。
catchError
async
await
try
catch