架构治理: - Feature Flag 落地: Cargo.toml [features] default=["diary"] + main.rs cfg 条件编译 - 环境配置统一: AppConfig 类 + --dart-define 注入 + SSE 端口 8080→3000 修复 搜索替代方案 (无 FTS): - SearchBloc + 标签/心情筛选接入后端 API - JournalRepository 扩展 mood/tag 筛选参数 - 搜索页 UI 接入实际数据(替换占位文本) 家长中心最小集 (PIPL 合规): - 后端: parent_service (绑定/查看/导出/删除/解绑) + parent_handler (6 个 API 端点) - 前端: ParentBloc + ParentPage 功能完整实现 - 绑定孩子、只读查看日记、导出数据、删除数据、解绑 Docker 部署: - verify.sh 健康检查脚本 (Axum/PG/Redis/OpenAPI 四项检查) 测试修复: - home_bloc_test / calendar_bloc_test 适配 JournalRepository 新参数 验证: flutter test 84/84 pass, cargo test 76/76 pass, cargo check pass
57 lines
1.3 KiB
Dart
57 lines
1.3 KiB
Dart
// 搜索状态 — SearchBloc 输出的 UI 状态
|
|
|
|
part of 'search_bloc.dart';
|
|
|
|
/// 搜索状态基类
|
|
sealed class SearchState {
|
|
const SearchState();
|
|
}
|
|
|
|
/// 初始状态 — 未执行任何搜索
|
|
final class SearchInitial extends SearchState {
|
|
const SearchInitial();
|
|
}
|
|
|
|
/// 加载中 — 正在查询日记
|
|
final class SearchLoading extends SearchState {
|
|
const SearchLoading();
|
|
}
|
|
|
|
/// 搜索结果已加载
|
|
final class SearchLoaded extends SearchState {
|
|
/// 搜索结果列表(空列表表示无匹配)
|
|
final List<JournalEntry> results;
|
|
|
|
/// 当前活跃的心情筛选条件
|
|
final String? activeMood;
|
|
|
|
/// 当前活跃的标签筛选条件
|
|
final String? activeTag;
|
|
|
|
const SearchLoaded({
|
|
this.results = const [],
|
|
this.activeMood,
|
|
this.activeTag,
|
|
});
|
|
|
|
/// 是否有活跃的筛选条件
|
|
bool get hasActiveFilter => activeMood != null || activeTag != null;
|
|
|
|
SearchLoaded copyWith({
|
|
List<JournalEntry>? results,
|
|
String? activeMood,
|
|
String? activeTag,
|
|
}) =>
|
|
SearchLoaded(
|
|
results: results ?? this.results,
|
|
activeMood: activeMood ?? this.activeMood,
|
|
activeTag: activeTag ?? this.activeTag,
|
|
);
|
|
}
|
|
|
|
/// 搜索出错
|
|
final class SearchError extends SearchState {
|
|
final String message;
|
|
const SearchError(this.message);
|
|
}
|