signUp method

Future<BloomSupabaseUser> signUp({
  1. required String email,
  2. required String password,
  3. Map<String, dynamic>? data,
})

Sign up a new user via Supabase Auth API.

Implementation

Future<BloomSupabaseUser> signUp({
  required String email,
  required String password,
  Map<String, dynamic>? data,
}) async {
  try {
    if (supabaseClient != null) {
      final res = await supabaseClient!.auth.signUp(
        email: email,
        password: password,
        data: data,
      );
      final session = res.session;
      final user = BloomSupabaseUser(
        id: res.user?.id ?? '',
        email: res.user?.email ?? email,
        accessToken: session?.accessToken,
        refreshToken: session?.refreshToken,
        userMetadata: res.user?.userMetadata ?? (data ?? const {}),
      );
      if (session != null) {
        await setSession(user: user, token: session.accessToken);
      }
      return user;
    }

    final json = await _http.post<Map<String, dynamic>>(
      '/signup',
      body: {
        'email': email,
        'password': password,
        if (data != null) 'data': data,
      },
    );

    final token = json['access_token']?.toString() ?? '';
    final user = BloomSupabaseUser(
      id: json['id']?.toString() ?? '',
      email: json['email']?.toString() ?? email,
      accessToken: token,
      refreshToken: json['refresh_token']?.toString(),
      userMetadata: json['user_metadata'] is Map
          ? Map<String, dynamic>.from(json['user_metadata'] as Map)
          : (data ?? const {}),
    );

    if (token.isNotEmpty) {
      await setSession(user: user, token: token);
    }
    return user;
  } catch (e) {
    logger.error('BloomSupabaseAuth: signUp error: $e');
    rethrow;
  }
}