- 新增 ParentalConsentPage: 显示隐私政策要点 + 双重确认复选框 - 角色选择流程: 学生 → 家长同意确认 → 班级码输入 - Authenticated 状态: 添加 needsParentalConsent/parentalConsentAt/selectedRole - ParentalConsentAccepted 事件: 记录同意时间戳 - 路由守卫: 注册 /parental-consent 路径和重定向逻辑 - 非学生角色(老师/家长/独立用户)不需要经过同意流程 审计 ID: S-03
75 lines
1.7 KiB
Dart
75 lines
1.7 KiB
Dart
// 认证事件 — AuthBloc 接收的用户操作和系统事件
|
||
|
||
part of 'auth_bloc.dart';
|
||
|
||
/// 认证事件基类 — 使用 sealed class 实现穷尽匹配
|
||
sealed class AuthEvent {
|
||
const AuthEvent();
|
||
}
|
||
|
||
/// App 启动 — 检查本地存储的认证状态
|
||
final class AppStarted extends AuthEvent {
|
||
const AppStarted();
|
||
}
|
||
|
||
/// 用户请求登录
|
||
final class LoginRequested extends AuthEvent {
|
||
final String username;
|
||
final String password;
|
||
|
||
const LoginRequested({
|
||
required this.username,
|
||
required this.password,
|
||
});
|
||
}
|
||
|
||
/// 用户请求注册
|
||
final class RegisterRequested extends AuthEvent {
|
||
final String username;
|
||
final String password;
|
||
final String? displayName;
|
||
|
||
const RegisterRequested({
|
||
required this.username,
|
||
required this.password,
|
||
this.displayName,
|
||
});
|
||
}
|
||
|
||
/// 用户选择角色(注册后的角色选择步骤)
|
||
final class RoleSelected extends AuthEvent {
|
||
final UserRoleType role;
|
||
|
||
const RoleSelected(this.role);
|
||
}
|
||
|
||
/// 家长/监护人同意 PIPL 信息收集(审计 S-03)
|
||
final class ParentalConsentAccepted extends AuthEvent {
|
||
final DateTime consentAt;
|
||
const ParentalConsentAccepted(this.consentAt);
|
||
}
|
||
|
||
/// 班级码加入(学生/家长加入班级)
|
||
final class ClassCodeSubmitted extends AuthEvent {
|
||
final String classCode;
|
||
|
||
const ClassCodeSubmitted(this.classCode);
|
||
}
|
||
|
||
/// 用户请求登出
|
||
final class LogoutRequested extends AuthEvent {
|
||
const LogoutRequested();
|
||
}
|
||
|
||
/// 令牌刷新成功(由拦截器触发)
|
||
final class TokenRefreshed extends AuthEvent {
|
||
final AuthToken token;
|
||
|
||
const TokenRefreshed(this.token);
|
||
}
|
||
|
||
/// 认证失败(由 401 拦截器触发)
|
||
final class AuthExpired extends AuthEvent {
|
||
const AuthExpired();
|
||
}
|