feat: 重构会话管理与提醒通知系统

This commit is contained in:
qzl
2026-03-31 18:26:36 +08:00
parent a8c262e9c7
commit 9a231dae9e
31 changed files with 650 additions and 223 deletions
@@ -52,6 +52,7 @@ class HomeScreen extends StatefulWidget {
final VoiceRecorder? voiceRecorder;
final Future<String> Function(String filePath)? onTranscribeAudio;
final ChatBloc? chatBloc;
final String? initialUserId;
final bool autoLoadHistory;
final List<XFile> initialSelectedImages;
@@ -60,6 +61,7 @@ class HomeScreen extends StatefulWidget {
this.voiceRecorder,
this.onTranscribeAudio,
this.chatBloc,
this.initialUserId,
this.autoLoadHistory = true,
this.initialSelectedImages = const [],
});
@@ -119,7 +121,10 @@ class _HomeScreenState extends State<HomeScreen>
duration: const Duration(milliseconds: _rippleDurationMs),
);
_selectedImages.addAll(widget.initialSelectedImages);
if (widget.autoLoadHistory &&
final initialUserId = widget.initialUserId?.trim();
if (initialUserId != null && initialUserId.isNotEmpty) {
unawaited(_chatBloc.switchUser(initialUserId));
} else if (widget.autoLoadHistory &&
_chatBloc.state.items.isEmpty &&
!_chatBloc.state.isLoadingHistory) {
_chatBloc.loadHistory();
@@ -166,6 +171,20 @@ class _HomeScreenState extends State<HomeScreen>
}
}
@override
void didUpdateWidget(covariant HomeScreen oldWidget) {
super.didUpdateWidget(oldWidget);
final oldUserId = oldWidget.initialUserId?.trim();
final newUserId = widget.initialUserId?.trim();
if (oldUserId == newUserId) {
return;
}
final normalized = (newUserId != null && newUserId.isNotEmpty)
? newUserId
: null;
unawaited(_chatBloc.switchUser(normalized));
}
@override
void didPopNext() {
unawaited(_inboxSyncStore.refreshSnapshot());