приняли решение не траить исключения в нижних слоях (работа с сетью, разбор json, и т.д.), а ловить на самом верху, например в обработчиках кнопок виджетов. Но тогда вопрос - как логгировать перехваченные исключения? Было бы идеально переопределить catch(e,s), но я пока так не умею. Пока на ум приходит только что-то вроде:
try {
await context.read<MyFuckModel>().doSomething();
} catch(e, s) {
myCatchProxy(e, s, () {
showSnackBar(e.toString());
});
}
Как-то кривовато выглядит, как бы это красиво и правильно сделать? Может есть стандартное решение?
если делать через блок, то у него есть BlocObserver, куда все ошибки будут сыпаться
Я бы ловил внутри метода
Проехал. Очень неудобно ловить результаты обработчиков кнопок в BlockListener. Проще прямо в обработчике кнопки получить результат, мимо блока.
они хотят сделать так, чтобы не писать в каждом методе try catch, но чтобы все ошибки обрабатывались
я не про BlocListener
Где реализуем там и ловим же
А как иначе снэкбар показать ?
ну и получится копипаста, когда в каждом методе try catch который делает одно и тоже (логгирует или что-то еще)
вопрос был про логгирование ошибок, а тут ты уже на ui перешел
ты можешь ловить разные типы на разных уровнях. Как вариант
Так я перехватываю ошибку уже в виджете, и вывожу ее пользователю. И в этот момент надо логировать.
Логировать не в UI слое нужно
Но тогда нужно траить ошибку по месту ее возникновения. А именно этого и не хочется, ибо таких мест слишком много...
а почему в блоке нельзя ошибку ловить и обрабатывать?
runZoned, BlocOverrides - способы отловить все ошибки в одном месте
Можно, но потом нужно передать ее в виджет, чтоб снэкбаром показать. Для этого нужно модифицировать стейт. А стейтов много. Значит их все нужно наследовать от общего предка, у которого поле ошибки есть. И понеслась...
@freezed class Eather<T> with _$Eather<T> { const factory Eather.success({@required T? data}) = Success<T>; const factory Eather.failure({@required Exceptions? error}) = Failure<T>; }
Черт, спасибо! ))). Идея хорошая, но так радикально... Надо подумать... Хотя все равно рано или поздно составные типы в проект придется затягивать )
внутри блока можно этот метод переопределить
:))
Обсуждают сегодня