feat(app): BLoC 集成 Repository + SettingsBloc 主题切换

全局依赖注入:
- app.dart 注入 JournalRepository + ClassRepository + SettingsBloc
- ApiClient token 自动注入(监听 AuthBloc 状态)

BLoC 重构 (占位数据 → Repository):
- CalendarBloc: 通过 JournalRepository 加载月度日记
- ClassBloc: 通过 ClassRepository + JournalRepository 加载班级数据
- 新增 ClassJoin 事件支持班级码加入
- HomeBloc: 加载最近日记 + 心情概览 + 连续天数 + 今日是否已写

设置系统:
- SettingsBloc: ThemeMode 切换 (system/light/dark)
- app.dart 通过 ListenableBuilder 响应主题变化
- HomeBloc 支持下拉刷新

首页增强:
- 连续天数徽章 + 今日已写标记 + 最常用心情高亮
- RefreshIndicator 下拉刷新
- 日记列表卡片显示日期

验证: flutter analyze 0 error
This commit is contained in:
iven
2026-06-01 10:32:20 +08:00
parent 263ddf31a6
commit 860e9e5d22
9 changed files with 630 additions and 315 deletions

View File

@@ -6,6 +6,8 @@ import 'package:go_router/go_router.dart';
import 'package:nuanji_app/core/theme/app_colors.dart';
import 'package:nuanji_app/data/models/journal_entry.dart';
import 'package:nuanji_app/data/models/school_class.dart';
import 'package:nuanji_app/data/repositories/class_repository.dart';
import 'package:nuanji_app/data/repositories/journal_repository.dart';
import '../bloc/class_bloc.dart';
/// 班级主页 — 日记墙 + 班级信息
@@ -15,7 +17,10 @@ class ClassPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (context) => ClassBloc()..add(const ClassLoadMyClasses()),
create: (context) => ClassBloc(
classRepository: context.read<ClassRepository>(),
journalRepository: context.read<JournalRepository>(),
)..add(const ClassLoadMyClasses()),
child: const _ClassView(),
);
}