import 'package:json_annotation/json_annotation.dart'; import '../../domain/entities/user.dart'; part 'user_dto.g.dart'; /// 用户 DTO(Data Transfer Object) /// /// local / remote 共用的数据传输对象,放在 data/models/。 /// 提供与 Domain Entity [User] 之间的双向转换。 /// /// ## 数据流位置(本地存储场景) /// /// ``` /// 写入本地: /// LoginData.toEntity() → User /// → UserDto.fromEntity(user) → ★ UserDto ★ ← 你在这里 /// → toJson() → SQLite / SharedPreferences /// /// 读取本地: /// SQLite / SharedPreferences → JSON /// → ★ UserDto.fromJson() ★ ← 你在这里 /// → UserDto.toEntity() → User /// → ViewModel.state → View /// ``` /// /// 注意:登录接口的 Response DTO 是 [LoginData](含 token), /// 本类用于纯用户信息的本地持久化,不含 token。 @JsonSerializable() class UserDto { @JsonKey(name: 'user_id') final String userId; final String email; final String? nickname; final String? avatar; const UserDto({ required this.userId, required this.email, this.nickname, this.avatar, }); factory UserDto.fromJson(Map json) => _$UserDtoFromJson(json); Map toJson() => _$UserDtoToJson(this); /// DTO → Domain Entity User toEntity() { return User( id: userId, email: email, nickname: nickname, avatar: avatar, ); } /// Domain Entity → DTO factory UserDto.fromEntity(User user) { return UserDto( userId: user.id, email: user.email, nickname: user.nickname, avatar: user.avatar, ); } }