From 427e9f0a48d0cad9fcc468b8b3c49e65155e3bf1 Mon Sep 17 00:00:00 2001 From: Cxx0822 <1556464090@qq.com> Date: Thu, 13 Nov 2025 16:11:19 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=A2=9E=E5=8A=A0=E6=97=A5=E7=A8=8B?= =?UTF-8?q?=E6=A8=A1=E5=9D=97tab=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/main.dart | 1 + lib/models/calendar.dart | 12 ++++++ lib/pages/calendar_page.dart | 68 ++++++++++++++++---------------- lib/widgets/calendar_widget.dart | 18 +++++++++ 4 files changed, 66 insertions(+), 33 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index b8f0be4..d092ff7 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -74,6 +74,7 @@ class MyApp extends StatelessWidget { locale: Locale('zh', 'CN'), theme: appProvider.currentThemeData, home: const MainScreen(), + debugShowCheckedModeBanner: false, ); }, ), diff --git a/lib/models/calendar.dart b/lib/models/calendar.dart index 83088bf..7b6f044 100644 --- a/lib/models/calendar.dart +++ b/lib/models/calendar.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:hive/hive.dart'; +import 'package:syncfusion_flutter_calendar/calendar.dart'; // flutter packages pub run build_runner build part 'calendar.g.dart'; @@ -52,3 +53,14 @@ class Calendar extends HiveObject { ); } } + +enum CalendarTab { + week('周视图', CalendarView.week), + month('月视图', CalendarView.month), + schedule('日程视图', CalendarView.schedule); + + final String label; + final CalendarView view; + + const CalendarTab(this.label, this.view); +} diff --git a/lib/pages/calendar_page.dart b/lib/pages/calendar_page.dart index 17ccf47..c14f96e 100644 --- a/lib/pages/calendar_page.dart +++ b/lib/pages/calendar_page.dart @@ -23,6 +23,7 @@ class CalendarPageState extends State { final CalendarService calendarService = CalendarService(); final NotifyService notifyService = NotifyService(); late List _appointments; + CalendarTab _currentTab = CalendarTab.week; void showAddDialog() { _showDialog(false, null); @@ -131,45 +132,46 @@ class CalendarPageState extends State { Widget build(BuildContext context) { final provider = Provider.of(context, listen: false); - return Scaffold( - appBar: AppBar( - title: Text('日程安排'), - centerTitle: true, - actions: [ - buildCalendarMenu( - onSelected: (CalendarView value) { + return Padding( + padding: EdgeInsets.all(10), + child: Column( + children: [ + buildTabs( + context: context, + currentTab: _currentTab, + onTabChanged: (value) { setState(() { - _calendarController.view = value; + _currentTab = value; + _calendarController.view = value.view; }); }, ), + Expanded( + child: buildCalendar( + context: context, + controller: _calendarController, + dataSource: AppointmentDataSource(_appointments), + onAdd: () { + if (_calendarController.view == CalendarView.week) { + _showDialog(true, provider.formItem); + } + }, + onEdit: (appointment) { + final calendar = calendarService.getCalendarById( + appointment.id as int, + ); + _showDialog(true, calendar); + }, + onDelete: (appointment) { + final calendar = calendarService.getCalendarById( + appointment.id as int, + ); + _deleteCalendar(calendar); + }, + ), + ), ], ), - body: Padding( - padding: EdgeInsets.all(10), - child: buildCalendar( - context: context, - controller: _calendarController, - dataSource: AppointmentDataSource(_appointments), - onAdd: () { - if (_calendarController.view == CalendarView.week) { - _showDialog(true, provider.formItem); - } - }, - onEdit: (appointment) { - final calendar = calendarService.getCalendarById( - appointment.id as int, - ); - _showDialog(true, calendar); - }, - onDelete: (appointment) { - final calendar = calendarService.getCalendarById( - appointment.id as int, - ); - _deleteCalendar(calendar); - }, - ), - ), ); } } diff --git a/lib/widgets/calendar_widget.dart b/lib/widgets/calendar_widget.dart index 7f589e3..507e237 100644 --- a/lib/widgets/calendar_widget.dart +++ b/lib/widgets/calendar_widget.dart @@ -1,3 +1,4 @@ +import 'package:flisp_app/models/calendar.dart'; import 'package:flisp_app/provider/calendar_provider.dart'; import 'package:flisp_app/widgets/common.dart'; import 'package:flutter/material.dart'; @@ -16,6 +17,23 @@ class AppointmentDataSource extends CalendarDataSource { } } +Widget buildTabs({ + required BuildContext context, + required CalendarTab currentTab, + required ValueChanged onTabChanged, +}) { + return Container( + padding: EdgeInsets.all(8), + child: buildToggleSwitch( + context: context, + currentTab: currentTab, + tabValues: CalendarTab.values, + labels: CalendarTab.values.map((e) => e.label).toList(), + onTabChanged: onTabChanged, + ), + ); +} + Widget buildCalendarMenu({required void Function(CalendarView) onSelected}) { return PopupMenuButton( onSelected: onSelected,