Files
nj/app/lib/features/search/bloc/search_state.dart
iven 749ef55b89
Some checks failed
Main Merge / backend (push) Has been cancelled
Main Merge / frontend (push) Has been cancelled
feat: Week 4 收尾 + 架构治理 — 搜索/家长中心/Feature Flag/Docker/环境配置
架构治理:
- 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
2026-06-01 23:53:34 +08:00

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);
}