Skip to content

Repository files navigation

pub.dev version build status live demo benchmarks license: MIT

Kalender

A highly customizable Flutter calendar widget with Day, MultiDay, Month, and Schedule views. It supports drag-and-drop rescheduling, event resizing, timezones, and full control over appearance and behavior.

Live Demo · Benchmarks · Migration Guide

Warning

This package is still in development. API changes may occur before version 1.0.0, so pin an exact version in your pubspec.yaml rather than a caret range.

1.0.0 is getting close. If part of the API does not work for you, please open an issue.

Table of Contents

Features

  • Views: Day, Multi-day, Month and Schedule. find out more
  • Extensible events: Attach custom data (title, color, etc.) by subclassing CalendarEvent. find out more
  • Tile components: Fully customize event tiles: stationary, dragging, feedback, and resize handles. find out more
  • Reschedule: Drag and drop events between days and times.
  • Resize: Resize events with input-precision-aware handles (mouse/stylus/trackpad vs touch).
  • Controllers: Manage your calendar with dedicated controllers. find out more
  • Callbacks: React to taps, long presses, event creation and changes. find out more
  • Configuration: Fine-grained control over interaction, snapping, scroll physics, and layout. find out more
  • Appearance: Style default components or supply custom builders. find out more
  • Event layout: Built-in strategies or bring your own. find out more
  • Locale: Localize day/month names via the intl package. find out more
  • Location: Timezone-aware display via the timezone package. find out more
  • Now callback: Override what "now" means for the time indicator and today highlighting. Useful when the calendar's Location differs from the user's wall-clock time. find out more

Installation

flutter pub add kalender

If you plan to use location/timezones support, also add:

flutter pub add timezone

If you plan to use locale support, also add:

flutter pub add intl

Quick Start

The minimal setup, using only the base CalendarEvent class with no custom fields:

import 'package:flutter/material.dart';
import 'package:kalender/kalender.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(body: MyCalendar()),
    );
  }
}

class MyCalendar extends StatefulWidget {
  const MyCalendar({super.key});

  @override
  State<MyCalendar> createState() => _MyCalendarState();
}

class _MyCalendarState extends State<MyCalendar> {
  final eventsController = DefaultEventsController();
  final calendarController = CalendarController();

  @override
  Widget build(BuildContext context) {
    return CalendarView(
      eventsController: eventsController,
      calendarController: calendarController,
      viewConfiguration: MultiDayViewConfiguration.singleDay(),
      callbacks: CalendarCallbacks(
        onEventCreated: (event) => eventsController.addEvent(event),
      ),
      header: CalendarHeader(),
      body: CalendarBody(),
    );
  }
}

For a real app you almost always want custom fields on your events. See Custom Events.


Documentation

The detailed guides live in doc/:

  • Events: attach your own data by subclassing CalendarEvent, and control how event tiles are laid out.
  • Views & Interaction: view configurations, controllers, callbacks, and interaction settings like snapping and zoom.
  • Appearance: tile builders, theming, and custom components.
  • Timezones & Locales: display timezones, localized names, and custom text.

Contributing

Contributions are welcome! Please open an issue or pull request on GitHub.

License

This project is licensed under the MIT License. See the LICENSE file for details.

About

An elegantly crafted Flutter calendar UI package.

Resources

Contributing

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages