所以我一直在做一个项目,想做一个日历应用程序。我一直在使用名为 Syncfusion Calendar 的 flutter 插件。我有一个问题,我显示了一个约会(打开议程的月视图),但我无法点击它,但我想让它发挥作用,所以每当我点击议程的约会时,它都会打开一个关于这个约会的信息页面。
所以这是我现在拥有的代码
import 'package:calender_alarm/event_info.dart';
import 'package:calender_alarm/event_provider.dart';
import 'package:calender_alarm/event_view.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:syncfusion_flutter_calendar/calendar.dart';
import 'event_editor.dart';
class CalenderPage extends StatelessWidget {
const CalenderPage({super.key});
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
final events = Provider.of<EventProvider>(context).events;
return Scaffold(
floatingActionButton: FloatingActionButton(
backgroundColor: const Color.fromARGB(255, 255, 115, 0),
onPressed: () => Navigator.of(context).push(
MaterialPageRoute(builder: (context) => const EventEditingPage()),
),
child: const Icon(Icons.add),
),
body: SfCalendar(
firstDayOfWeek: 1,
view: CalendarView.month,
showDatePickerButton: true,
allowedViews: const [
CalendarView.day,
CalendarView.month,
],
dataSource: EventDataSource(events),
monthViewSettings: const MonthViewSettings(showAgenda: true),
minDate: DateTime.now(),
onTap: //unknown
),
);
}
}
class EventDataSource extends CalendarDataSource {
EventDataSource(List<Event> appointments) {
this.appointments = appointments;
}
Event getEvent(int index) => appointments![index] as Event;
@override
DateTime getStartTime(int index) => getEvent(index).from;
@override
String getSubject(int index) => getEvent(index).title;
@override
Color getColor(int index) => getEvent(index).backgroundColor;
}
我只是不知道要在 onTap 中放什么,所以它会选择选定的约会。
我去了一些网站,那里有很好的答案,但不是我的例子......我期待一些代码可以帮助我打开一个新页面,其中包含来自选定和点击约会的信息。
我做了一个由 onTap 调用的 void 函数,当它被调用时它发送上下文和详细参数。
这里是onTap的完整代码:
onTap: (details) => calendarTapped(context, details),
这里是calendarTapped函数的代码:
void calendarTapped(
BuildContext context, CalendarTapDetails calendarTapDetails) {
if (calendarTapDetails.targetElement == CalendarElement.appointment) {
Event event = calendarTapDetails.appointments![0];
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => EventView(event: event),
),
);
}
}