From 6ed9efe06debd75f04ecebdf470ab738eab88427 Mon Sep 17 00:00:00 2001 From: Cxx0822 <1556464090@qq.com> Date: Thu, 20 Nov 2025 14:01:43 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=A2=9E=E5=8A=A0=E5=88=B7=E6=96=B0?= =?UTF-8?q?=E6=97=A5=E7=A8=8B=E6=8F=90=E9=86=92=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/layout/main_screen.dart | 50 +++++++++++++++++++++++++++++++++++ lib/pages/stats_page.dart | 3 +-- lib/utils/date_utils.dart | 9 +++++++ lib/widgets/flisp_widget.dart | 6 +++-- lib/widgets/todo_widget.dart | 1 + 5 files changed, 65 insertions(+), 4 deletions(-) diff --git a/lib/layout/main_screen.dart b/lib/layout/main_screen.dart index 3310c29..9ff0ff4 100644 --- a/lib/layout/main_screen.dart +++ b/lib/layout/main_screen.dart @@ -2,7 +2,13 @@ import 'package:flisp_app/layout/app_body.dart'; import 'package:flisp_app/layout/app_drawer.dart'; import 'package:flisp_app/layout/app_floating_button.dart'; import 'package:flisp_app/layout/app_navbar.dart'; +import 'package:flisp_app/models/calendar.dart'; +import 'package:flisp_app/models/todo.dart'; import 'package:flisp_app/provider/app_provider.dart'; +import 'package:flisp_app/service/calendar_service.dart'; +import 'package:flisp_app/service/todo_service.dart'; +import 'package:flisp_app/utils/date_utils.dart'; +import 'package:flisp_app/utils/notify_utils.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -15,11 +21,55 @@ class MainScreen extends StatefulWidget { class _MainScreenState extends State { final GlobalKey _appBodyKey = GlobalKey(); + final NotifyService notifyService = NotifyService(); void _onPressedFloatingButton(int index) { _appBodyKey.currentState?.showPageAddDialog(index); } + @override + void initState() { + super.initState(); + refreshScheduled(); + } + + /// 重新刷新提醒 防止每次重启设备后提醒丢失的问题 + void refreshScheduled() async { + await notifyService.cancelAllNotifications(); + + TodoService todoService = TodoService(); + final List todoResult = todoService.getAllTodos( + TodoSortMode.priority, + ); + final List todayTodos = + todoResult.where((todo) => isToday(todo.scheduledTime)).toList(); + + for (Todo todo in todayTodos) { + await notifyService.scheduleNotification( + id: todo.id, + title: '待办提醒', + body: todo.title, + scheduledTime: todo.scheduledTime!, + ); + } + + CalendarService calendarService = CalendarService(); + final List calendarResult = calendarService.getAllCalendars(); + final List todayCalendars = + calendarResult + .where((calendar) => isToday(calendar.scheduledTime)) + .toList(); + + for (Calendar calendar in todayCalendars) { + await notifyService.scheduleNotification( + id: calendar.id, + title: '日程提醒', + body: calendar.title, + scheduledTime: calendar.scheduledTime!, + ); + } + } + @override Widget build(BuildContext context) { final provider = context.watch(); diff --git a/lib/pages/stats_page.dart b/lib/pages/stats_page.dart index fe7d788..f8b1590 100644 --- a/lib/pages/stats_page.dart +++ b/lib/pages/stats_page.dart @@ -5,7 +5,6 @@ import 'package:flisp_app/service/todo_service.dart'; import 'package:flisp_app/widgets/chart.dart'; import 'package:flisp_app/widgets/common.dart'; import 'package:flisp_app/widgets/flisp_widget.dart'; -import 'package:flisp_app/widgets/stats.dart'; import 'package:flisp_app/widgets/todo_widget.dart'; import 'package:flisp_app/widgets/year_selector.dart'; import 'package:flutter/material.dart'; @@ -124,7 +123,7 @@ class StatsPageState extends State { ], ), const SizedBox(height: 5), - Expanded(child: buildFlispStatsCard(allFlisps)), + buildFlispStatsCard(allFlisps), ], ); } diff --git a/lib/utils/date_utils.dart b/lib/utils/date_utils.dart index e882ead..2f78d76 100644 --- a/lib/utils/date_utils.dart +++ b/lib/utils/date_utils.dart @@ -7,3 +7,12 @@ String formatDate(DateTime date) { String formatTime(DateTime datetime) { return DateFormat('yyyy-MM-dd HH:mm:ss').format(datetime); } + +bool isToday(DateTime? date) { + if (date == null) return false; + + final now = DateTime.now(); + return date.year == now.year && + date.month == now.month && + date.day == now.day; +} diff --git a/lib/widgets/flisp_widget.dart b/lib/widgets/flisp_widget.dart index 4335bf9..4263328 100644 --- a/lib/widgets/flisp_widget.dart +++ b/lib/widgets/flisp_widget.dart @@ -2,7 +2,6 @@ import 'package:flisp_app/models/flisp.dart'; import 'package:flisp_app/widgets/common.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; -import 'package:toggle_switch/toggle_switch.dart'; Widget buildFlispStatsCard(List flisps) { int totalCount = flisps.length; @@ -14,6 +13,7 @@ Widget buildFlispStatsCard(List flisps) { return BuildCard( child: Row( mainAxisAlignment: MainAxisAlignment.spaceAround, + crossAxisAlignment: CrossAxisAlignment.center, children: [ _buildStatItem('总计', totalCount, Colors.orange), _buildStatItem('生活', lifeCount, FlispTag.life.color), @@ -79,12 +79,14 @@ Widget buildFlispList({ } Widget _buildFlispContent(BuildContext context, Flisp flisp) { + final colors = Theme.of(context).colorScheme; + return RichText( text: TextSpan( text: flisp.content, style: TextStyle( fontFamily: 'CustomFont', - color: Theme.of(context).colorScheme.onSurface, + color: colors.onSurface, fontSize: 16, ), ), diff --git a/lib/widgets/todo_widget.dart b/lib/widgets/todo_widget.dart index b6a61a4..abfbc2e 100644 --- a/lib/widgets/todo_widget.dart +++ b/lib/widgets/todo_widget.dart @@ -15,6 +15,7 @@ Widget buildTodoStatsCard(List todos) { return BuildCard( child: Row( mainAxisAlignment: MainAxisAlignment.spaceAround, + crossAxisAlignment: CrossAxisAlignment.center, children: [ _buildStatItem('总计', totalCount, Colors.blue), _buildStatItem('待完成', activeCount, Colors.orange),