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

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

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

22 ответов

19 просмотров

если делать через блок, то у него есть 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...

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

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

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

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

:))

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта