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

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

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

22 ответов

17 просмотров

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

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

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

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

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

:))

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

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

Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
48
Всем привет! Скажите, никто не пытался уменьшить размер процесса ssl, которые ассоциируется с открытым соединением (не помню точное название этого процесса, но там была какая-...
Алексей
20
а проверьте, собирается ли у кого сейчас транк лазаря через делюкс? у меня вот: fpcupdeluxe: info: Lazarus Native Installer (BuildModuleCustom: UserIDE): LazBuild: building Us...
Iluha Companets
20
Мне тут приспичило встроить в программу форматировние текста SQL, расставить переносы строк и отступы так, чтобы лучше читалось. Я что-то свое изобразил, оно после ключевых сл...
Sergey Bodrov
11
This is a big issue. Just by being a citizen of a country, you are denied to contribute to Open Source software: https://youtu.be/L5Ec5jrpLVk?si=1iIuHnMPbCB4anV-
Sharuzzaman Ahmat Raslan
72
добрый день. возможно ли изменить цвет окон лазаруса? Как?
Budemposmotret
35
Господа, а кто-нибудь сталкивался с размещением на TTabControl/TTabSheet множества контролов (> 100) с последующими External: Access violation? Вот буквально на ровном месте. ...
Dmitry
29
А какие существуют способы обработки ошибок выделения памяти в ядре? Т.е., допустим, есть функция, которая возвращает адрес свободной страницы в физической памяти и диапазон в...
disba1ancer
51
Добрый день. Опять снова хочу обратиться к вам за помощью. После создания проэкта stack new, lazy.nvim + nvim-lspconfig/haskell-tools + hlint, ormolu из mason + hls из ghcup ...
Nannk
8
Does anyone have some zeroday's left?
Wito!d ♥️🩷
44
Карта сайта