如何在Flutter Calendar的另一页显示点击的约会详情

问题描述 投票:0回答:1

所以我一直在做一个项目,想做一个日历应用程序。我一直在使用名为 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 中放什么,所以它会选择选定的约会。

我去了一些网站,那里有很好的答案,但不是我的例子......我期待一些代码可以帮助我打开一个新页面,其中包含来自选定和点击约会的信息。

flutter flutter-dependencies syncfusion syncfusion-calendar
1个回答
0
投票

我做了一个由 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),
        ),
      );
    }
  }
© www.soinside.com 2019 - 2024. All rights reserved.