registerWithFiles method

Future<AppUser> registerWithFiles(
  1. String email,
  2. String password, {
  3. Map<String, dynamic>? data,
  4. Map<String, dynamic>? files,
})

Register with file uploads (avatar, cover photo, etc.)

Example:

// Register with avatar
final avatarFile = await MultipartFile.fromFile('path/to/avatar.jpg');
await db.auth.registerWithFiles(
  'john@example.com',
  'password123',
  data: {'username': 'johndoe', 'full_name': 'John Doe'},
  files: {'avatar': avatarFile}
);

// Register with multiple files
await db.auth.registerWithFiles(
  'john@example.com',
  'password123',
  data: {'username': 'johndoe'},
  files: {
    'avatar': avatarFile,
    'cover_photo': coverFile
  }
);

Implementation

Future<AppUser> registerWithFiles(
  String email,
  String password, {
  Map<String, dynamic>? data,
  Map<String, dynamic>? files,
}) async {
  final formData = FormData();

  // Add JSON data
  formData.fields.add(
    MapEntry(
      'data',
      jsonEncode({'email': email, 'password': password, 'data': data}),
    ),
  );

  // Add files if provided
  if (files != null) {
    for (final entry in files.entries) {
      final fieldName = entry.key;
      final fileValue = entry.value;

      if (fileValue is List) {
        for (final file in fileValue) {
          if (file is MultipartFile) {
            formData.files.add(MapEntry(fieldName, file));
          }
        }
      } else if (fileValue is MultipartFile) {
        formData.files.add(MapEntry(fieldName, fileValue));
      }
    }
  }

  final response = await _dio.post(
    '/auth-collections/signup',
    data: formData,
  );

  if (response.statusCode != 200 && response.statusCode != 201) {
    throw Exception('Registration failed: ${response.data}');
  }

  final responseData = response.data as Map<String, dynamic>;
  _token = responseData['access_token'];
  await setToken(_token!);

  _user = AppUser.fromJson(responseData['user']);
  await setUser(_user!);

  // Trigger register callback
  _callbacks.onRegister?.call(_user!, _token!);

  return _user!;
}