registerWithFiles method
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!;
}