80 lines
2.0 KiB
Dart
80 lines
2.0 KiB
Dart
import 'dart:math';
|
|
|
|
import 'package:isar/isar.dart';
|
|
|
|
import '../../../core/constants/app_defaults.dart';
|
|
|
|
part 'user_profile.g.dart';
|
|
|
|
enum AvatarSource {
|
|
asset,
|
|
localFile,
|
|
}
|
|
|
|
@collection
|
|
class UserProfile {
|
|
UserProfile();
|
|
|
|
Id id = AppDefaults.singletonId;
|
|
|
|
@Index(unique: true, replace: true)
|
|
late String profileKey;
|
|
|
|
@Index(type: IndexType.value)
|
|
late DateTime updatedAt;
|
|
|
|
late DateTime createdAt;
|
|
late String nickname;
|
|
String? avatarLocalPath;
|
|
late String avatarAssetPath;
|
|
|
|
@enumerated
|
|
AvatarSource avatarSource = AvatarSource.asset;
|
|
|
|
factory UserProfile.createDefault({DateTime? now, Random? random}) {
|
|
final current = now ?? DateTime.now();
|
|
final generator = random ?? Random();
|
|
final suffix = AppDefaults.nicknameRandomMin +
|
|
generator.nextInt(
|
|
AppDefaults.nicknameRandomMax - AppDefaults.nicknameRandomMin + 1,
|
|
);
|
|
|
|
return UserProfile()
|
|
..profileKey = 'local_user_profile'
|
|
..createdAt = current
|
|
..updatedAt = current
|
|
..nickname = '弓箭手_$suffix'
|
|
..avatarAssetPath = AppDefaults.defaultAvatarAssetPath
|
|
..avatarSource = AvatarSource.asset;
|
|
}
|
|
|
|
String get displayAvatarPath =>
|
|
avatarSource == AvatarSource.localFile &&
|
|
avatarLocalPath != null &&
|
|
avatarLocalPath!.trim().isNotEmpty
|
|
? avatarLocalPath!
|
|
: avatarAssetPath;
|
|
|
|
UserProfile copyWith({
|
|
String? nickname,
|
|
Object? avatarLocalPath = _unset,
|
|
String? avatarAssetPath,
|
|
AvatarSource? avatarSource,
|
|
DateTime? updatedAt,
|
|
}) {
|
|
return UserProfile()
|
|
..id = id
|
|
..profileKey = profileKey
|
|
..createdAt = createdAt
|
|
..updatedAt = updatedAt ?? DateTime.now()
|
|
..nickname = nickname ?? this.nickname
|
|
..avatarLocalPath = identical(avatarLocalPath, _unset)
|
|
? this.avatarLocalPath
|
|
: avatarLocalPath as String?
|
|
..avatarAssetPath = avatarAssetPath ?? this.avatarAssetPath
|
|
..avatarSource = avatarSource ?? this.avatarSource;
|
|
}
|
|
}
|
|
|
|
const Object _unset = Object();
|