Skip to content

Commit

Permalink
fix: focus bug when switching payment methods (#274)
Browse files Browse the repository at this point in the history
  • Loading branch information
ethan-tbd authored Aug 21, 2024
1 parent 520bf5f commit 3b8a954
Showing 1 changed file with 36 additions and 30 deletions.
66 changes: 36 additions & 30 deletions lib/shared/json_schema_form.dart
Original file line number Diff line number Diff line change
Expand Up @@ -46,44 +46,47 @@ class JsonSchemaForm extends HookWidget {

useEffect(
() {
formState.value = {};
formState.value.forEach((key, fieldState) {
fieldState.controller.dispose();
});

formState.value.clear();

if (properties != null) {
properties.forEach((key, value) {
final valueMap = value as Map<String, dynamic>;
final pattern = valueMap['pattern'] as String?;

if (!formState.value.containsKey(key)) {
final formatter = TextInputUtil.getMaskFormatter(pattern);
final initialText = state.formData?[key] ??
state.moneyAddresses?.firstOrNull?.css
.split(':')
.lastOrNull ??
'';
final controller = TextEditingController(text: initialText);

controller.addListener(
() => formState.value = {
...formState.value,
key: _FormFieldStateData(
formData: controller.text,
controller: controller,
formatter: formatter,
),
},
);

formState.value[key] = _FormFieldStateData(
formData: initialText,
controller: controller,
formatter: formatter,
);
}
final formatter = TextInputUtil.getMaskFormatter(pattern);
final initialText = state.formData?[key] ??
state.moneyAddresses?.firstOrNull?.css.split(':').lastOrNull ??
'';
final controller = TextEditingController(text: initialText);

final focusNode = FocusNode();

controller.addListener(() {
formState.value = {
...formState.value,
key: _FormFieldStateData(
formData: controller.text,
controller: controller,
formatter: formatter,
focusNode: focusNode,
),
};
});

formState.value[key] = _FormFieldStateData(
formData: initialText,
controller: controller,
formatter: formatter,
focusNode: focusNode,
);
});
}

return () => formState.value
.forEach((key, fieldState) => fieldState.controller.dispose());
return null;
},
[state.selectedPaymentMethod?.schema],
);
Expand All @@ -99,7 +102,7 @@ class JsonSchemaForm extends HookWidget {
formFields.add(
TextFormField(
controller: fieldState.controller,
focusNode: useFocusNode(),
focusNode: fieldState.focusNode,
onTapOutside: (_) => FocusScope.of(context).unfocus(),
enableSuggestions: false,
autocorrect: false,
Expand All @@ -121,6 +124,7 @@ class JsonSchemaForm extends HookWidget {
formData: data ?? '',
controller: fieldState.controller,
formatter: fieldState.formatter,
focusNode: fieldState.focusNode,
),
},
),
Expand Down Expand Up @@ -214,10 +218,12 @@ class _FormFieldStateData {
String formData;
TextEditingController controller;
MaskTextInputFormatter formatter;
FocusNode focusNode;

_FormFieldStateData({
required this.formData,
required this.controller,
required this.formatter,
required this.focusNode,
});
}

0 comments on commit 3b8a954

Please sign in to comment.