From a5c75b8b6f380c120ae9d3fc2324209777261b29 Mon Sep 17 00:00:00 2001 From: Ben Corman Date: Tue, 1 Oct 2024 06:02:04 -0700 Subject: [PATCH] Fix MetadataFields text field values being lost in SupaEmailAuth widget (Fixes #113) (#114) * Fix metadata field value persistence in SupaEmailAuth widget Implement == operator and hashCode getter in MetaDataField class Update _SupaEmailAuthState to use MetaDataField.key as map key Modify related methods to work with new map structure Ensure consistent hashing and correct retrieval of TextEditingControllers Resolve issue of losing metadata field values during widget lifecycle This change prevents the loss of user input in custom metadata fields by ensuring proper object equality and consistent map key usage. * Remove unecessary equality operator override and hashcode getter. --- lib/src/components/supa_email_auth.dart | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/src/components/supa_email_auth.dart b/lib/src/components/supa_email_auth.dart index 8574f24..82592c0 100644 --- a/lib/src/components/supa_email_auth.dart +++ b/lib/src/components/supa_email_auth.dart @@ -125,7 +125,7 @@ class _SupaEmailAuthState extends State { final _formKey = GlobalKey(); final _emailController = TextEditingController(); final _passwordController = TextEditingController(); - late final Map _metadataControllers; + late final Map _metadataControllers; bool _isLoading = false; @@ -142,7 +142,8 @@ class _SupaEmailAuthState extends State { void initState() { super.initState(); _metadataControllers = Map.fromEntries((widget.metadataFields ?? []).map( - (metadataField) => MapEntry(metadataField, TextEditingController()))); + (metadataField) => + MapEntry(metadataField.key, TextEditingController()))); } @override @@ -225,7 +226,7 @@ class _SupaEmailAuthState extends State { ...widget.metadataFields! .map((metadataField) => [ TextFormField( - controller: _metadataControllers[metadataField], + controller: _metadataControllers[metadataField.key], textInputAction: widget.metadataFields!.last == metadataField ? TextInputAction.done @@ -423,8 +424,7 @@ class _SupaEmailAuthState extends State { Map _resolveMetadataFieldsData() { return widget.metadataFields != null ? _metadataControllers.map( - (metaDataField, controller) => - MapEntry(metaDataField.key, controller.text)) + (key, controller) => MapEntry(key, controller.text)) : {}; } }