169 похожих чатов

Всем привет. Вопрос про обработку исключений. В своем проекте мы

приняли решение не траить исключения в нижних слоях (работа с сетью, разбор json, и т.д.), а ловить на самом верху, например в обработчиках кнопок виджетов. Но тогда вопрос - как логгировать перехваченные исключения? Было бы идеально переопределить catch(e,s), но я пока так не умею. Пока на ум приходит только что-то вроде:
try {
await context.read<MyFuckModel>().doSomething();
} catch(e, s) {
myCatchProxy(e, s, () {
showSnackBar(e.toString());
});
}
Как-то кривовато выглядит, как бы это красиво и правильно сделать? Может есть стандартное решение?

22 ответов

24 просмотра

если делать через блок, то у него есть BlocObserver, куда все ошибки будут сыпаться

Я бы ловил внутри метода

Юджин Флаттер- Автор вопроса
Kirill Fokin
если делать через блок, то у него есть BlocObserve...

Проехал. Очень неудобно ловить результаты обработчиков кнопок в BlockListener. Проще прямо в обработчике кнопки получить результат, мимо блока.

ManBearPig
Я бы ловил внутри метода

они хотят сделать так, чтобы не писать в каждом методе try catch, но чтобы все ошибки обрабатывались

Юджин Флаттер- Автор вопроса
Kirill Fokin
я не про BlocListener

А как иначе снэкбар показать ?

ManBearPig
Где реализуем там и ловим же

ну и получится копипаста, когда в каждом методе try catch который делает одно и тоже (логгирует или что-то еще)

Юджин Флаттер
А как иначе снэкбар показать ?

вопрос был про логгирование ошибок, а тут ты уже на ui перешел

ты можешь ловить разные типы на разных уровнях. Как вариант

Юджин Флаттер- Автор вопроса
Kirill Fokin
вопрос был про логгирование ошибок, а тут ты уже н...

Так я перехватываю ошибку уже в виджете, и вывожу ее пользователю. И в этот момент надо логировать.

Логировать не в UI слое нужно

Юджин Флаттер- Автор вопроса
Daniil Koliasnikov
Логировать не в UI слое нужно

Но тогда нужно траить ошибку по месту ее возникновения. А именно этого и не хочется, ибо таких мест слишком много...

Юджин Флаттер
Но тогда нужно траить ошибку по месту ее возникнов...

а почему в блоке нельзя ошибку ловить и обрабатывать?

Юджин Флаттер
Но тогда нужно траить ошибку по месту ее возникнов...

runZoned, BlocOverrides - способы отловить все ошибки в одном месте

Юджин Флаттер- Автор вопроса
Timur M.
а почему в блоке нельзя ошибку ловить и обрабатыва...

Можно, но потом нужно передать ее в виджет, чтоб снэкбаром показать. Для этого нужно модифицировать стейт. А стейтов много. Значит их все нужно наследовать от общего предка, у которого поле ошибки есть. И понеслась...

Юджин Флаттер
Но тогда нужно траить ошибку по месту ее возникнов...

@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>; }

Юджин Флаттер- Автор вопроса
ManBearPig
@freezed class Eather<T> with _$Eather<T> { cons...

Черт, спасибо! ))). Идея хорошая, но так радикально... Надо подумать... Хотя все равно рано или поздно составные типы в проект придется затягивать )

Юджин Флаттер
Можно, но потом нужно передать ее в виджет, чтоб с...

внутри блока можно этот метод переопределить

Юджин Флаттер- Автор вопроса

:))

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта