Skip to content

Commit 46f96ba

Browse files
committed
refactor(authenticator): remove enabled override from form field enums and streamline effective enabled logic
1 parent 7757fa1 commit 46f96ba

File tree

7 files changed

+30
-52
lines changed

7 files changed

+30
-52
lines changed

packages/authenticator/amplify_authenticator/lib/src/enums/authenticator_text_enabled_override.dart

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,6 @@ enum AuthenticatorTextEnabledOverride {
66
/// Use the default enabled state.
77
defaultSetting,
88

9-
/// Force the field to be enabled.
10-
enabled,
11-
129
/// Force the field to be disabled.
1310
disabled,
1411
}

packages/authenticator/amplify_authenticator/lib/src/mixins/authenticator_text_field.dart

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
22
// SPDX-License-Identifier: Apache-2.0
33

4+
import 'package:amplify_authenticator/src/controllers/authenticator_text_field_controller.dart';
45
import 'package:amplify_authenticator/src/widgets/form.dart';
56
import 'package:amplify_authenticator/src/widgets/form_field.dart';
67
import 'package:flutter/material.dart';
@@ -19,7 +20,7 @@ mixin AuthenticatorTextField<
1920
bool _controllerUpdateScheduled = false;
2021

2122
@protected
22-
TextEditingController? get textController =>
23+
AuthenticatorTextFieldController? get textController =>
2324
widget.authenticatorTextFieldController;
2425

2526
void _maybeUpdateEffectiveController() {
@@ -184,12 +185,12 @@ mixin AuthenticatorTextField<
184185
// Don't sync during build
185186
final shouldHandleChangeImmediately = _effectiveController == null;
186187
return TextFormField(
187-
style: enabled
188+
style: effectiveEnabled
188189
? null
189190
: TextStyle(color: Theme.of(context).disabledColor),
190191
controller: _effectiveController,
191192
initialValue: _effectiveController == null ? initialValue : null,
192-
enabled: enabled,
193+
enabled: effectiveEnabled,
193194
validator: widget.validatorOverride ?? validator,
194195
onChanged: shouldHandleChangeImmediately ? onChanged : null,
195196
autocorrect: false,

packages/authenticator/amplify_authenticator/lib/src/mixins/authenticator_username_field.dart

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ mixin AuthenticatorUsernameField<
2424
bool _controllerUpdateScheduled = false;
2525

2626
@protected
27-
TextEditingController? get textController =>
27+
AuthenticatorTextFieldController? get textController =>
2828
widget.authenticatorTextFieldController;
2929

3030
void _updateController() {
@@ -398,27 +398,25 @@ mixin AuthenticatorUsernameField<
398398
requiredOverride: true,
399399
onChanged: handleChanged,
400400
validator: validator,
401-
enabled: enabled
402-
? AuthenticatorTextEnabledOverride.enabled
403-
: AuthenticatorTextEnabledOverride.disabled,
401+
enabled: widget.enabledOverride,
404402
errorMaxLines: errorMaxLines,
405403
initialValue: state.username,
406404
autofillHints: autofillHints,
407-
authenticatorTextFieldController:
408-
textController as AuthenticatorTextFieldController?,
405+
authenticatorTextFieldController: textController,
409406
);
410407
}
411408

412409
_updateController();
413-
// Don't sync during build
414410

415411
final controllerInUse = _controller != null;
416412

417413
return TextFormField(
418-
style: enabled ? null : TextStyle(color: Theme.of(context).disabledColor),
414+
style: effectiveEnabled
415+
? null
416+
: TextStyle(color: Theme.of(context).disabledColor),
419417
controller: _controller,
420418
initialValue: _controller == null ? initialValue?.username : null,
421-
enabled: enabled,
419+
enabled: effectiveEnabled,
422420
validator: validator,
423421
onChanged: (username) {
424422
if (!controllerInUse) {

packages/authenticator/amplify_authenticator/lib/src/widgets/form_field.dart

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -196,15 +196,20 @@ abstract class AuthenticatorFormFieldState<
196196
FieldValue? get initialValue => null;
197197

198198
/// Whether the form field accepts input.
199-
bool get enabled {
199+
bool get enabled => true;
200+
201+
/// Effective enabled state that combines [enabled] with [widget.enabledOverride].
202+
///
203+
/// Subclasses can override [enabled] to provide custom logic for determining
204+
/// the default enabled state. This property ensures the override is respected.
205+
@nonVirtual
206+
bool get effectiveEnabled {
200207
switch (widget.enabledOverride) {
201-
case AuthenticatorTextEnabledOverride.enabled:
202-
return true;
203208
case AuthenticatorTextEnabledOverride.disabled:
204209
return false;
205210
case AuthenticatorTextEnabledOverride.defaultSetting:
206211
case null:
207-
return true;
212+
return enabled;
208213
}
209214
}
210215

@@ -367,5 +372,8 @@ abstract class AuthenticatorFormFieldState<
367372
..add(DiagnosticsProperty<double?>('marginBottom', marginBottom))
368373
..add(DoubleProperty('labelGap', labelGap))
369374
..add(IterableProperty<String>('autofillHints', autofillHints));
375+
properties.add(
376+
DiagnosticsProperty<bool>('effectiveEnabled', effectiveEnabled),
377+
);
370378
}
371379
}

packages/authenticator/amplify_authenticator/lib/src/widgets/form_fields/confirm_sign_up_form_field.dart

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -94,15 +94,6 @@ abstract class _ConfirmSignUpFormFieldState<FieldValue extends Object>
9494

9595
@override
9696
bool get enabled {
97-
switch (widget.enabledOverride) {
98-
case AuthenticatorTextEnabledOverride.enabled:
99-
return true;
100-
case AuthenticatorTextEnabledOverride.disabled:
101-
return false;
102-
case AuthenticatorTextEnabledOverride.defaultSetting:
103-
case null:
104-
break;
105-
}
10697
switch (widget.field) {
10798
case ConfirmSignUpField.code:
10899
return true;

packages/authenticator/amplify_authenticator/lib/src/widgets/form_fields/phone_number_field.dart

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,17 @@ class AuthenticatorPhoneField<FieldType extends Enum>
1111
super.requiredOverride,
1212
this.onChanged,
1313
this.validator,
14-
this.enabled,
14+
AuthenticatorTextEnabledOverride? enabled,
1515
this.initialValue,
1616
this.errorMaxLines,
1717
super.autofillHints,
1818
this.authenticatorTextFieldController,
1919
}) : super._(
2020
titleKey: InputResolverKey.phoneNumberTitle,
2121
hintTextKey: InputResolverKey.phoneNumberHint,
22+
enabledOverride: enabled,
2223
);
2324

24-
final AuthenticatorTextEnabledOverride? enabled;
2525
final String? initialValue;
2626
final ValueChanged<String>? onChanged;
2727
final FormFieldValidator<String?>? validator;
@@ -41,7 +41,6 @@ class AuthenticatorPhoneField<FieldType extends Enum>
4141
..add(
4242
ObjectFlagProperty<ValueChanged<String>>.has('onChanged', onChanged),
4343
)
44-
..add(EnumProperty<AuthenticatorTextEnabledOverride?>('enabled', enabled))
4544
..add(StringProperty('initialValue', initialValue))
4645
..add(IntProperty('errorMaxLines', errorMaxLines))
4746
..add(
@@ -81,19 +80,6 @@ class _AuthenticatorPhoneFieldState<FieldType extends Enum>
8180
return initialValue;
8281
}
8382

84-
@override
85-
bool get enabled {
86-
switch (widget.enabled) {
87-
case AuthenticatorTextEnabledOverride.enabled:
88-
return true;
89-
case AuthenticatorTextEnabledOverride.disabled:
90-
return false;
91-
case AuthenticatorTextEnabledOverride.defaultSetting:
92-
case null:
93-
return super.enabled;
94-
}
95-
}
96-
9783
@override
9884
int get errorMaxLines => widget.errorMaxLines ?? super.errorMaxLines;
9985

packages/authenticator/amplify_authenticator/test/form_field_controller_test.dart

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import 'package:amplify_authenticator/src/keys.dart';
77
import 'package:amplify_authenticator/src/state/inherited_authenticator_state.dart';
88
import 'package:amplify_authenticator_test/amplify_authenticator_test.dart';
99
import 'package:flutter/material.dart';
10-
import 'package:flutter/services.dart';
1110
import 'package:flutter_test/flutter_test.dart';
1211

1312
void main() {
@@ -197,19 +196,17 @@ void main() {
197196
final fieldFinder = find.byKey(keyUsernameSignInFormField);
198197
await tester.tap(fieldFinder);
199198
await tester.pump();
200-
await tester.showKeyboard(fieldFinder);
201199

202200
expect(tester.takeException(), isNull);
203201

204-
await tester.sendKeyEvent(LogicalKeyboardKey.keyA);
202+
// Use enterText to simulate typing - sendKeyEvent doesn't update
203+
// TextEditingController in widget tests
204+
await tester.enterText(fieldFinder, 'a ');
205205
await tester.pump();
206206
expect(tester.takeException(), isNull);
207207

208-
await tester.sendKeyEvent(LogicalKeyboardKey.space);
209-
await tester.pump();
210-
expect(tester.takeException(), isNull);
211-
212-
await tester.sendKeyEvent(LogicalKeyboardKey.backspace);
208+
// Simulate backspace by entering text without the trailing space
209+
await tester.enterText(fieldFinder, 'a');
213210
await tester.pump();
214211
expect(tester.takeException(), isNull);
215212

0 commit comments

Comments
 (0)