[Flutter]イベントを表示できるカレンダーのウェジェット

Flutter

どうも、ちょげ(@chogetarou)です。

イベントを表示することのできるカレンダーを表示することの出来るウェジェットを紹介します。

スポンサーリンク

SfCalendar

カレンダー, 日にち, 月, 日, 週, スケジュール, リマインダー, 主催者

「syncfusion_flutter_calendar」パッケージの「SfCalendar」ウェジェットでイベントを表示することが出来ます。

「SfCalendar」は、スケジュールや週、月のカレンダーを表示することが出来る便利なウェジェットです。

「SfCalendar」を使うには、パッケージを導入する必要があります。

まず、次のコードを「pubspec.yaml」に追加し、「pub get」します。

dependencies:
  syncfusion_flutter_calendar: ^19.2.62

そして、ウェジェットを使用するファイルでインポートします。

import 'package:syncfusion_flutter_calendar/calendar.dart';

イベントを表示するには?

「SfCalendar」でイベントを表示するには、次の引数を使います。

  • view : 表示スタイル
  • dataSource : イベントをカレンダーに反映する
  • monthViewSettings : イベントを表示するためのもの

これらの引数を使うことでカレンダーにイベントを表示することが出来ます。

全体のコード

ここで使用したコードを載せておきます。

class Test extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: Container(
            child: SfCalendar(
      view: CalendarView.month,
      dataSource: EventDataSource(_getDataSource()),
      monthViewSettings: MonthViewSettings(showAgenda: true),
    )));
  }
}

List<Event> _getDataSource() {
  final List<Event> event = <Event>[];
  for (var i = 0; i < 10; i++) {
    final DateTime today = DateTime.now();
    final DateTime startTime =
        DateTime(today.year, today.month, today.day + i, 9, 0, 0);
    final DateTime endTime = startTime.add(const Duration(hours: 2));
    event
        .add(Event('イベント', startTime, endTime, const Color(0xFF0F8644), false));
  }
  return event;
}

class EventDataSource extends CalendarDataSource {
  EventDataSource(List<Event> event) {
    appointments = event;
  }

  @override
  Color getColor(int index) {
    return appointments![index].background;
  }

  @override
  DateTime getEndTime(int index) {
    return appointments![index].to;
  }

  @override
  DateTime getStartTime(int index) {
    return appointments![index].from;
  }

  @override
  String getSubject(int index) {
    return appointments![index].eventName;
  }

  @override
  bool isAllDay(int index) {
    return appointments![index].isAllDay;
  }
}

class Event {
  Event(this.eventName, this.from, this.to, this.background, this.isAllDay);

  Color background;
  String eventName;
  DateTime from;
  bool isAllDay;
  DateTime to;
}

コメント

タイトルとURLをコピーしました