Я создал метод http во флаттере, как показано ниже:
Future<void> addProduct(Product product) {
const url = 'https://flutter-shop-3de16.firebaseio.com/products';
return http
.post(
url,
body: json.encode({
'title': product.title,
'description': product.description,
'imageUrl': product.imageUrl,
'price': product.price,
'isFavorite': product.isFavorite,
}),
)
.then((response) {
...
notifyListeners();
}).catchError((error) {
print(error);
throw error;
});
}
Я знаю, что мой url
неверен, потому что я хочу получить ошибку.
В .catchError я выдаю ошибку, а на главной странице провайдера я использовал addProduct
, например:
Provider.of<Products>(context, listen: false)
.addProduct(_editedProduct)
.catchError((error) {
return showDialog(
context: context,
builder: (ctx) => AlertDialog(
title: Text('An error occurred!'),
content: Text('Something went wrong.'),
actions: <Widget>[
FlatButton(
child: Text('Okay'),
onPressed: () {
Navigator.of(ctx).pop();
},
)
],
),
);
}).then((_) {
print('after catch accoured');
setState(() {
_isLoading = false;
});
Navigator.of(context).pop();
});
}
}
I catchError
Я получил ошибку, и я показываю диалоговое окно с предупреждением . После нажатия на кнопку Okay
я хочу выполнить then
блок, поэтому я вернул showDialog
, потому что он возвращает будущее.
Но я не знаю, почему
.then((_) {
print('after catch accoured');
setState(() {
_isLoading = false;
});
Navigator.of(context).pop();
});
}
Нет запустить после закрытия диалогового окна с предупреждением?