From 41b22ad4578ab316e1f2489f3a786182bbf3379e Mon Sep 17 00:00:00 2001 From: JulianAlcala Date: Wed, 22 Apr 2026 00:10:43 +0200 Subject: [PATCH] refactor(legacy-account): move change_password local error to provider (no setState) --- .../presentation/change_password_screen.dart | 14 ++-- .../change_password_local_error_provider.dart | 11 ++++ ...hange_password_local_error_provider.g.dart | 64 +++++++++++++++++++ 3 files changed, 81 insertions(+), 8 deletions(-) create mode 100644 modules/legacy/modules/account/lib/src/features/change_password/presentation/providers/change_password_local_error_provider.dart create mode 100644 modules/legacy/modules/account/lib/src/features/change_password/presentation/providers/change_password_local_error_provider.g.dart diff --git a/modules/legacy/modules/account/lib/src/features/change_password/presentation/change_password_screen.dart b/modules/legacy/modules/account/lib/src/features/change_password/presentation/change_password_screen.dart index ea4fd005..0ffdd484 100644 --- a/modules/legacy/modules/account/lib/src/features/change_password/presentation/change_password_screen.dart +++ b/modules/legacy/modules/account/lib/src/features/change_password/presentation/change_password_screen.dart @@ -1,5 +1,6 @@ import 'package:account/src/features/change_password/domain/password_validator.dart'; import 'package:account/src/features/change_password/presentation/providers/change_password_controller.dart'; +import 'package:account/src/features/change_password/presentation/providers/change_password_local_error_provider.dart'; import 'package:account/src/features/change_password/presentation/providers/change_password_visibility_provider.dart'; import 'package:design_system/design_system.dart'; import 'package:flutter/material.dart'; @@ -24,7 +25,6 @@ class ChangePasswordScreen extends ConsumerStatefulWidget { class _ChangePasswordScreenState extends ConsumerState { late final TextEditingController _newPasswordController; late final TextEditingController _repeatPasswordController; - String? _localError; @override void initState() { @@ -45,11 +45,8 @@ class _ChangePasswordScreenState extends ConsumerState { password: _newPasswordController.text, repeat: _repeatPasswordController.text, ); - if (error != null) { - setState(() => _localError = error); - return; - } - setState(() => _localError = null); + ref.read(changePasswordLocalErrorProvider.notifier).set(error); + if (error != null) return; ref .read(changePasswordControllerProvider.notifier) .submit(password: _newPasswordController.text.trim()); @@ -71,6 +68,7 @@ class _ChangePasswordScreenState extends ConsumerState { final isLoading = ref.watch( changePasswordControllerProvider.select((s) => s.isLoading), ); + final localError = ref.watch(changePasswordLocalErrorProvider); return LegacyPageLayout( title: context.translate(I18n.changePassword), @@ -91,11 +89,11 @@ class _ChangePasswordScreenState extends ConsumerState { newController: _newPasswordController, repeatController: _repeatPasswordController, ), - if (_localError != null) + if (localError != null) Padding( padding: const EdgeInsets.only(top: 8), child: Text( - context.translate(_localError!), + context.translate(localError), textAlign: TextAlign.center, style: TextStyle( color: Theme.of(context).colorScheme.error, diff --git a/modules/legacy/modules/account/lib/src/features/change_password/presentation/providers/change_password_local_error_provider.dart b/modules/legacy/modules/account/lib/src/features/change_password/presentation/providers/change_password_local_error_provider.dart new file mode 100644 index 00000000..36170bf1 --- /dev/null +++ b/modules/legacy/modules/account/lib/src/features/change_password/presentation/providers/change_password_local_error_provider.dart @@ -0,0 +1,11 @@ +import 'package:riverpod_annotation/riverpod_annotation.dart'; + +part 'change_password_local_error_provider.g.dart'; + +@riverpod +class ChangePasswordLocalError extends _$ChangePasswordLocalError { + @override + String? build() => null; + + void set(String? value) => state = value; +} diff --git a/modules/legacy/modules/account/lib/src/features/change_password/presentation/providers/change_password_local_error_provider.g.dart b/modules/legacy/modules/account/lib/src/features/change_password/presentation/providers/change_password_local_error_provider.g.dart new file mode 100644 index 00000000..139df646 --- /dev/null +++ b/modules/legacy/modules/account/lib/src/features/change_password/presentation/providers/change_password_local_error_provider.g.dart @@ -0,0 +1,64 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'change_password_local_error_provider.dart'; + +// ************************************************************************** +// RiverpodGenerator +// ************************************************************************** + +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, type=warning + +@ProviderFor(ChangePasswordLocalError) +const changePasswordLocalErrorProvider = ChangePasswordLocalErrorProvider._(); + +final class ChangePasswordLocalErrorProvider + extends $NotifierProvider { + const ChangePasswordLocalErrorProvider._() + : super( + from: null, + argument: null, + retry: null, + name: r'changePasswordLocalErrorProvider', + isAutoDispose: true, + dependencies: null, + $allTransitiveDependencies: null, + ); + + @override + String debugGetCreateSourceHash() => _$changePasswordLocalErrorHash(); + + @$internal + @override + ChangePasswordLocalError create() => ChangePasswordLocalError(); + + /// {@macro riverpod.override_with_value} + Override overrideWithValue(String? value) { + return $ProviderOverride( + origin: this, + providerOverride: $SyncValueProvider(value), + ); + } +} + +String _$changePasswordLocalErrorHash() => + r'a8cc23f326988bbdc13b058e055daaa8c684a8c8'; + +abstract class _$ChangePasswordLocalError extends $Notifier { + String? build(); + @$mustCallSuper + @override + void runBuild() { + final created = build(); + final ref = this.ref as $Ref; + final element = + ref.element + as $ClassProviderElement< + AnyNotifier, + String?, + Object?, + Object? + >; + element.handleValue(ref, created); + } +}