Updated Settings Page #118

Closed
protuberanets wants to merge 1 commits from SEND010 into main
Collaborator
No description provided.
protuberanets self-assigned this 2025-12-18 12:16:29 +00:00
protuberanets added 1 commit 2025-12-18 12:16:30 +00:00
protuberanets requested review from tech 2025-12-18 12:16:30 +00:00
tech reviewed 2025-12-18 14:58:14 +00:00
@@ -228,6 +228,19 @@ class AccountProvider extends ChangeNotifier {
}
}
Future<Account> resetUsername(String userName) async {
Owner

Проще завести на уровне провайдера один метод update, который будет вызывать метод update сервиса, и организовывать всю обвязку вроде try / catch и управления ресурсом. А соответственно, из метода resetUserName делать copyWith (кстати, в описании describable есть хелпер, который аккуратно с копированием работает), и передавать скопированный объект уже в update.
Идея сервиса состоит в том, чтобы управлять работой с бэкендом: готовить класс запроса и обращаться в сеть, обрабатывать ответ и возвращать очищенные от обертки данные. А вот с данными работает провайдер. Поэтому в два шага: 1) готовим данные 2) отдаем их методу update внутри провайдера 3) провайдер внутри update управляет ресурсом и делегирует обращение к бэку сервису.

Проще завести на уровне провайдера один метод update, который будет вызывать метод update сервиса, и организовывать всю обвязку вроде try / catch и управления ресурсом. А соответственно, из метода resetUserName делать copyWith (кстати, в описании describable есть хелпер, который аккуратно с копированием работает), и передавать скопированный объект уже в update. Идея сервиса состоит в том, чтобы управлять работой с бэкендом: готовить класс запроса и обращаться в сеть, обрабатывать ответ и возвращать очищенные от обертки данные. А вот с данными работает провайдер. Поэтому в два шага: 1) готовим данные 2) отдаем их методу update внутри провайдера 3) провайдер внутри update управляет ресурсом и делегирует обращение к бэку сервису.
tech requested changes 2025-12-18 15:08:28 +00:00
tech left a comment
Owner

Нужны правки

Нужны правки
@@ -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(
Owner

не нужно в сервис непосредственную работу с данными засовывать.

не нужно в сервис непосредственную работу с данными засовывать.
@@ -0,0 +42,4 @@
final theme = Theme.of(context);
final isFormBusy = isBusy || formProvider.isSaving;
return Column(
Owner

вот любишь ты километровые виджеты! можно не править, но писать лучше структурировано.

вот любишь ты километровые виджеты! можно не править, но писать лучше структурировано.
@@ -0,0 +73,4 @@
_oldPasswordController.clear();
_newPasswordController.clear();
_confirmPasswordController.clear();
notifyUser(context, widget.successText);
Owner

контекст после await'а лучше не совать. лучше заранее из контекста восстановить нужные штуки и взять notifyUserX. А еще лучше длительные вызовы засовывать внутрь executeAndNotify.

контекст после await'а лучше не совать. лучше заранее из контекста восстановить нужные штуки и взять notifyUserX. А еще лучше длительные вызовы засовывать внутрь executeAndNotify.
@@ -0,0 +76,4 @@
notifyUser(context, widget.successText);
} catch (e) {
if (!mounted) return;
setState(() => _errorText = widget.errorText);
Owner

вот это не очень понимаю. Почему errorText идет из виджета, а не из провайдера или локализаций?

вот это не очень понимаю. Почему errorText идет из виджета, а не из провайдера или локализаций?
@@ -49,0 +40,4 @@
spacing: _itemSpacing,
children: [
AvatarTile(
avatarUrl: 'https://avatars.githubusercontent.com/u/65651201',
Owner

а чего гвоздями приколочено? Может, взять нормально из аккаунта, а если пусто - то дефолтный подставлять?

а чего гвоздями приколочено? Может, взять нормально из аккаунта, а если пусто - то дефолтный подставлять?
@@ -55,2 +51,2 @@
_EditState _state = _EditState.view;
bool get _isSaving => _state == _EditState.saving;
EditState _state = EditState.view;
bool get _isSaving => _state == EditState.saving;
Owner

ты в виджете зачем-то таскаешь стейт, который должен браться из провайдера. Реально надо дублировать вот эту всю петрушку? Нельзя просто первоисточником данных пользоваться?

ты в виджете зачем-то таскаешь стейт, который должен браться из провайдера. Реально надо дублировать вот эту всю петрушку? Нельзя просто первоисточником данных пользоваться?
@@ -0,0 +28,4 @@
_setError('');
}
Future<void> submit({
Owner

Арсений, провайдер не должен взаимодействовать с UI никак. Может только данные давать. Всякие нотификации должны идти снаружи. Либо проверкой ошибки после await, либо ожиданием выброса исключения из самого await. Идея провайдера в том, что он работает с данными, и только с ними. А виджет, пользующийся провайдером использует провайдер как источник данных ( и не держит данных у себя, а берет из провайдера) и по данным провайдера организует взаимодействие с пользователем. Категорически нельзя из провайдера делать нотификации. Если я где-то такую хератень сделал, то мне надо поставить на вид и призвать к разделению ответственности: кто-то только про отображение, а кто-то только про данные, но не миксовать ответственность ни в коем случае.

Арсений, провайдер не должен взаимодействовать с UI никак. Может только данные давать. Всякие нотификации должны идти снаружи. Либо проверкой ошибки после await, либо ожиданием выброса исключения из самого await. Идея провайдера в том, что он работает с данными, и только с ними. А виджет, пользующийся провайдером использует провайдер как источник данных ( и не держит данных у себя, а берет из провайдера) и по данным провайдера организует взаимодействие с пользователем. Категорически нельзя из провайдера делать нотификации. Если я где-то такую хератень сделал, то мне надо поставить на вид и призвать к разделению ответственности: кто-то только про отображение, а кто-то только про данные, но не миксовать ответственность ни в коем случае.
@@ -66,3 +66,3 @@
pin_code_fields: ^8.0.1
fl_chart: ^1.0.0
syncfusion_flutter_charts: ^32.1.19
syncfusion_flutter_charts: ^31.2.10
Owner

почему версию понижаем?

почему версию понижаем?
protuberanets closed this pull request 2025-12-22 19:51:37 +00:00

Pull request closed

Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: tech/sendico#118