refactor(legacy-account): move change_password local error to provider (no setState)
This commit is contained in:
@@ -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<ChangePasswordScreen> {
|
||||
late final TextEditingController _newPasswordController;
|
||||
late final TextEditingController _repeatPasswordController;
|
||||
String? _localError;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
@@ -45,11 +45,8 @@ class _ChangePasswordScreenState extends ConsumerState<ChangePasswordScreen> {
|
||||
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<ChangePasswordScreen> {
|
||||
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<ChangePasswordScreen> {
|
||||
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,
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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<ChangePasswordLocalError, String?> {
|
||||
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<String?>(value),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
String _$changePasswordLocalErrorHash() =>
|
||||
r'a8cc23f326988bbdc13b058e055daaa8c684a8c8';
|
||||
|
||||
abstract class _$ChangePasswordLocalError extends $Notifier<String?> {
|
||||
String? build();
|
||||
@$mustCallSuper
|
||||
@override
|
||||
void runBuild() {
|
||||
final created = build();
|
||||
final ref = this.ref as $Ref<String?, String?>;
|
||||
final element =
|
||||
ref.element
|
||||
as $ClassProviderElement<
|
||||
AnyNotifier<String?, String?>,
|
||||
String?,
|
||||
Object?,
|
||||
Object?
|
||||
>;
|
||||
element.handleValue(ref, created);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user