Updated Settings Page #118
Reference in New Issue
Block a user
Delete Branch "SEND010"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
@@ -228,6 +228,19 @@ class AccountProvider extends ChangeNotifier {}}Future<Account> resetUsername(String userName) async {Проще завести на уровне провайдера один метод update, который будет вызывать метод update сервиса, и организовывать всю обвязку вроде try / catch и управления ресурсом. А соответственно, из метода resetUserName делать copyWith (кстати, в описании describable есть хелпер, который аккуратно с копированием работает), и передавать скопированный объект уже в update.
Идея сервиса состоит в том, чтобы управлять работой с бэкендом: готовить класс запроса и обращаться в сеть, обрабатывать ответ и возвращать очищенные от обертки данные. А вот с данными работает провайдер. Поэтому в два шага: 1) готовим данные 2) отдаем их методу update внутри провайдера 3) провайдер внутри update управляет ресурсом и делегирует обращение к бэку сервису.
Нужны правки
@@ -63,1 +63,4 @@static Future<Account> resetUsername(Account account, String userName) async {_logger.fine('Updating username for account: ${account.id}');final updatedAccount = account.copyWith(не нужно в сервис непосредственную работу с данными засовывать.
@@ -0,0 +42,4 @@final theme = Theme.of(context);final isFormBusy = isBusy || formProvider.isSaving;return Column(вот любишь ты километровые виджеты! можно не править, но писать лучше структурировано.
@@ -0,0 +73,4 @@_oldPasswordController.clear();_newPasswordController.clear();_confirmPasswordController.clear();notifyUser(context, widget.successText);контекст после await'а лучше не совать. лучше заранее из контекста восстановить нужные штуки и взять notifyUserX. А еще лучше длительные вызовы засовывать внутрь executeAndNotify.
@@ -0,0 +76,4 @@notifyUser(context, widget.successText);} catch (e) {if (!mounted) return;setState(() => _errorText = widget.errorText);вот это не очень понимаю. Почему errorText идет из виджета, а не из провайдера или локализаций?
@@ -49,0 +40,4 @@spacing: _itemSpacing,children: [AvatarTile(avatarUrl: 'https://avatars.githubusercontent.com/u/65651201',а чего гвоздями приколочено? Может, взять нормально из аккаунта, а если пусто - то дефолтный подставлять?
@@ -55,2 +51,2 @@_EditState _state = _EditState.view;bool get _isSaving => _state == _EditState.saving;EditState _state = EditState.view;bool get _isSaving => _state == EditState.saving;ты в виджете зачем-то таскаешь стейт, который должен браться из провайдера. Реально надо дублировать вот эту всю петрушку? Нельзя просто первоисточником данных пользоваться?
@@ -0,0 +28,4 @@_setError('');}Future<void> submit({Арсений, провайдер не должен взаимодействовать с UI никак. Может только данные давать. Всякие нотификации должны идти снаружи. Либо проверкой ошибки после await, либо ожиданием выброса исключения из самого await. Идея провайдера в том, что он работает с данными, и только с ними. А виджет, пользующийся провайдером использует провайдер как источник данных ( и не держит данных у себя, а берет из провайдера) и по данным провайдера организует взаимодействие с пользователем. Категорически нельзя из провайдера делать нотификации. Если я где-то такую хератень сделал, то мне надо поставить на вид и призвать к разделению ответственности: кто-то только про отображение, а кто-то только про данные, но не миксовать ответственность ни в коем случае.
@@ -66,3 +66,3 @@pin_code_fields: ^8.0.1fl_chart: ^1.0.0syncfusion_flutter_charts: ^32.1.19syncfusion_flutter_charts: ^31.2.10почему версию понижаем?
Pull request closed