43 lines
1.4 KiB
Dart
43 lines
1.4 KiB
Dart
/// 用户模型(登录/注册响应的 user 字段与 GET /users/me 的超集,字段可空按需取)
|
|
class UserModel {
|
|
UserModel({
|
|
required this.userId,
|
|
this.phone,
|
|
this.email,
|
|
this.nickname = '',
|
|
this.avatarUrl = '',
|
|
this.bio = '',
|
|
this.gender = 0,
|
|
this.isMember = false,
|
|
this.memberPlan,
|
|
this.memberExpireAt,
|
|
this.points = 0,
|
|
});
|
|
|
|
final int userId;
|
|
final String? phone;
|
|
final String? email;
|
|
final String nickname;
|
|
final String avatarUrl;
|
|
final String bio;
|
|
final int gender; // 0未知 1男 2女
|
|
final bool isMember;
|
|
final String? memberPlan; // monthly/yearly/lifetime/trial...
|
|
final String? memberExpireAt; // yyyy-MM-dd HH:mm:ss
|
|
final int points;
|
|
|
|
factory UserModel.fromJson(Map<String, dynamic> json) => UserModel(
|
|
userId: (json['user_id'] ?? json['id']) as int,
|
|
phone: json['phone'] as String?,
|
|
email: json['email'] as String?,
|
|
nickname: (json['nickname'] as String?) ?? '',
|
|
avatarUrl: (json['avatar_url'] as String?) ?? '',
|
|
bio: (json['bio'] as String?) ?? '',
|
|
gender: (json['gender'] as num?)?.toInt() ?? 0,
|
|
isMember: (json['is_member'] as bool?) ?? false,
|
|
memberPlan: json['member_plan'] as String?,
|
|
memberExpireAt: json['member_expire_at'] as String?,
|
|
points: (json['points'] as num?)?.toInt() ?? 0,
|
|
);
|
|
}
|