Арсений, провайдер не должен взаимодействовать с UI никак. Может только данные давать. Всякие нотификации должны идти снаружи. Либо проверкой ошибки после await, либо ожиданием выброса исключения из самого await. Идея провайдера в том, что он работает с данными, и только с ними. А виджет, пользующийся провайдером использует провайдер как источник данных ( и не держит данных у себя, а берет из провайдера) и по данным провайдера организует взаимодействие с пользователем. Категорически нельзя из провайдера делать нотификации. Если я где-то такую хератень сделал, то мне надо поставить на вид и призвать к разделению ответственности: кто-то только про отображение, а кто-то только про данные, но не миксовать ответственность ни в коем случае.
ты в виджете зачем-то таскаешь стейт, который должен браться из провайдера. Реально надо дублировать вот эту всю петрушку? Нельзя просто первоисточником данных пользоваться?
а чего гвоздями приколочено? Может, взять нормально из аккаунта, а если пусто - то дефолтный подставлять?
вот это не очень понимаю. Почему errorText идет из виджета, а не из провайдера или локализаций?
контекст после await'а лучше не совать. лучше заранее из контекста восстановить нужные штуки и взять notifyUserX. А еще лучше длительные вызовы засовывать внутрь executeAndNotify.
вот любишь ты километровые виджеты! можно не править, но писать лучше структурировано.
Проще завести на уровне провайдера один метод update, который будет вызывать метод update сервиса, и организовывать всю обвязку вроде try / catch и управления ресурсом. А соответственно, из метода resetUserName делать copyWith (кстати, в описании describable есть хелпер, который аккуратно с копированием работает), и передавать скопированный объект уже в update.