@@ -67,13 +67,18 @@ class SupaEmailAuth extends StatefulWidget {
67
67
/// Callback for sending the password reset email
68
68
final void Function ()? onPasswordResetEmailSent;
69
69
70
- /// Callback for when the auth action threw an excepction
70
+ /// Callback for when the auth action threw an exception
71
71
///
72
72
/// If set to `null` , a snack bar with error color will show up.
73
73
final void Function (Object error)? onError;
74
74
75
+ /// Set of additional fields to the signup form that will become
76
+ /// part of the user_metadata
75
77
final List <MetaDataField >? metadataFields;
76
78
79
+ /// Additional properties for user_metadata on signup
80
+ final Map <String , dynamic >? extraMetadata;
81
+
77
82
/// {@macro supa_email_auth}
78
83
const SupaEmailAuth ({
79
84
Key ? key,
@@ -83,6 +88,7 @@ class SupaEmailAuth extends StatefulWidget {
83
88
this .onPasswordResetEmailSent,
84
89
this .onError,
85
90
this .metadataFields,
91
+ this .extraMetadata,
86
92
}) : super (key: key);
87
93
88
94
@override
@@ -204,11 +210,7 @@ class _SupaEmailAuthState extends State<SupaEmailAuth> {
204
210
email: _emailController.text.trim (),
205
211
password: _passwordController.text.trim (),
206
212
emailRedirectTo: widget.redirectTo,
207
- data: widget.metadataFields == null
208
- ? null
209
- : _metadataControllers.map <String , dynamic >(
210
- (metaDataField, controller) =>
211
- MapEntry (metaDataField.key, controller.text)),
213
+ data: _resolveData (),
212
214
);
213
215
widget.onSignUpComplete.call (response);
214
216
}
@@ -295,4 +297,23 @@ class _SupaEmailAuthState extends State<SupaEmailAuth> {
295
297
),
296
298
);
297
299
}
300
+
301
+ /// Resolve the user_metadata that we will send during sign-up
302
+ ///
303
+ /// In case both MetadataFields and extraMetadata have the same
304
+ /// key in their map, the MetadataFields (form fields) win
305
+ Map <String , dynamic > _resolveData () {
306
+ var extra = widget.extraMetadata ?? < String , dynamic > {};
307
+ extra.addAll (_resolveMetadataFieldsData ());
308
+ return extra;
309
+ }
310
+
311
+ /// Resolve the user_metadata coming from the metadataFields
312
+ Map <String , dynamic > _resolveMetadataFieldsData () {
313
+ return widget.metadataFields != null
314
+ ? _metadataControllers.map <String , dynamic >(
315
+ (metaDataField, controller) =>
316
+ MapEntry (metaDataField.key, controller.text))
317
+ : < String , dynamic > {};
318
+ }
298
319
}
0 commit comments