feat: 增强日历功能并集成 AgentScope 代理服务

This commit is contained in:
qzl
2026-03-11 17:16:11 +08:00
parent e20e7d2a02
commit 85b314cf64
53 changed files with 3642 additions and 297 deletions
@@ -20,16 +20,19 @@ class CalendarMonthScreen extends StatefulWidget {
State<CalendarMonthScreen> createState() => _CalendarMonthScreenState();
}
class _CalendarMonthScreenState extends State<CalendarMonthScreen> {
class _CalendarMonthScreenState extends State<CalendarMonthScreen>
with WidgetsBindingObserver {
late final CalendarStateManager _calendarManager;
late DateTime _currentMonth;
late DateTime _selectedDate;
Key _eventsKey = UniqueKey();
final Map<String, List<ScheduleItemModel>> _eventsByDay = {};
String? _lastRoute;
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
_calendarManager = sl<CalendarStateManager>();
if (widget.resetToToday) {
@@ -40,6 +43,22 @@ class _CalendarMonthScreenState extends State<CalendarMonthScreen> {
_selectedDate = savedDate;
_currentMonth = DateTime(savedDate.year, savedDate.month, 1);
_loadMonthEvents();
WidgetsBinding.instance.addPostFrameCallback((_) {
_lastRoute = GoRouterState.of(context).uri.toString();
});
}
@override
void didChangeDependencies() {
super.didChangeDependencies();
final currentRoute = GoRouterState.of(context).uri.toString();
if (_lastRoute != null && _lastRoute != currentRoute) {
if (!currentRoute.contains('/events/')) {
_loadMonthEvents();
}
}
_lastRoute = currentRoute;
}
Future<void> _loadMonthEvents() async {
@@ -64,24 +83,45 @@ class _CalendarMonthScreenState extends State<CalendarMonthScreen> {
setState(() {});
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
if (state == AppLifecycleState.resumed) {
_loadMonthEvents();
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: AppColors.todoBg,
body: SafeArea(
child: Column(
children: [
_buildHeader(),
Expanded(
child: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.only(bottom: 84),
child: _buildMonthContent(),
body: PopScope(
canPop: false,
onPopInvokedWithResult: (didPop, result) {
if (!didPop) {
context.go('/home');
}
},
child: SafeArea(
child: Column(
children: [
_buildHeader(),
Expanded(
child: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.only(bottom: 84),
child: _buildMonthContent(),
),
),
),
),
_buildBottomDock(),
],
_buildBottomDock(),
],
),
),
),
);