/// 用户模型(登录/注册响应的 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 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, ); }