oxean_calendar_view 0.3.2 copy "oxean_calendar_view: ^0.3.2" to clipboard
oxean_calendar_view: ^0.3.2 copied to clipboard

A Flutter package for displaying a calendar view with various customization options.

Calendar View #

A Flutter package that provides customizable calendar view widgets showing month, week, or day views with task cards.

Getting started #

Add the package to your pubspec.yaml:

dependencies:
  oxean_calendar_view: ^0.1.0

Usage #

Basic Monthly Calendar #

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // Create some tasks
    final tasks = [
      CalendarTask(
        id: '1',
        title: 'Important meeting',
        date: DateTime(2025, 4, 15),
        color: Colors.red,
      ),
      CalendarTask(
        id: '2',
        title: 'Submit report',
        date: DateTime(2025, 4, 18),
        color: Colors.blue,
      ),
      CalendarTask(
        id: '3',
        title: 'Review code',
        date: DateTime(2025, 4, 18),
        color: Colors.green,
        isCompleted: true,
      ),
    ];

    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Calendar Example')),
        body: Center(
          child: MonthlyCalendar(
            tasks: tasks,
            onDaySelected: (date) {
              print('Selected date: $date');
            },
            onTaskSelected: (task) {
              print('Selected task: ${task.title}');
            },
            todayColor: Colors.blue,
            selectedColor: Colors.orange,
          ),
        ),
      ),
    );
  }
}

Multi-view Calendar #

For a more advanced calendar that can switch between month, week, and day views:

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final tasks = [
      CalendarTask(
        id: '1',
        title: 'Team Meeting',
        date: DateTime(2025, 4, 15, 14, 30), // with time: 2:30 PM
        color: Colors.indigo,
      ),
      // More tasks...
    ];

    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Multi-view Calendar')),
        body: OxeanCalendar(
          initialDate: DateTime.now(),
          initialViewMode: CalendarViewMode.month, // Start in month view
          tasks: tasks,
          onDaySelected: (date) {
            print('Selected date: $date');
          },
          onTaskSelected: (task) {
            print('Selected task: ${task.title}');
          },
          onAddTask: (date) {
            print('Add task at date: $date');
            // Show your task creation UI
          },
          showViewModeSwitch: true, // Show view switcher dropdown
          showTodayButton: true,
        ),
      ),
    );
  }
}

View Modes #

The OxeanCalendar widget supports three different view modes:

  • Month view (CalendarViewMode.month): Displays a full month grid with days and tasks
  • Week view (CalendarViewMode.week): Displays a single week with hourly slots
  • Day view (CalendarViewMode.day): Displays a single day with hourly slots

Users can switch between view modes using the dropdown in the calendar header (if showViewModeSwitch is set to true).

Customization #

Basic Customization #

The simplest way to customize the calendar appearance:

OxeanCalendar(
  // Optional initial date (defaults to today)
  initialDate: DateTime(2025, 4, 14),

  // Optional start year and end year for the date picker
  startYear: 2020,
  endYear: 2030,

  // Tasks to display on the calendar
  tasks: tasks,

  // Callbacks
  onDaySelected: (date) {
    // Do something with the selected date
  },
  onTaskSelected: (task) {
    // Do something with the selected task
  },
  onAddTask: (date) {
    // Handle adding a new task at the given date
  },

  // Initial view mode
  initialViewMode: CalendarViewMode.week,
  
  // UI Options
  showViewModeSwitch: true, // Show/hide view mode selector
  showTodayButton: true,    // Show/hide the Today button
)

Advanced Theming with CalendarTheme #

For more detailed customization, use the theme property with a CalendarTheme object:

OxeanCalendar(
  // Other properties...
  
  theme: CalendarTheme(
    // Main colors
    todayColor: Colors.blue,
    selectedColor: Colors.orange,
    backgroundColor: Colors.white,
    borderColor: Colors.grey.shade300,
    
    // Text styles
    textStyles: CalendarTextStyles(
      // Day numbers
      dayNumberFontSize: 14.0,
      dayNumberColor: Colors.black87,
      
      // Selected day styling
      selectedDayNumberColor: Colors.white,
      selectedDayNumberFontWeight: FontWeight.bold,
      
      // Today styling
      todayDayNumberColor: Colors.white,
      
      // Task styling
      taskTitleFontSize: 12.0,
      taskTitleColor: Colors.black87,
      
      // Completed task styling
      completedTaskTitleColor: Colors.grey,
      completedTaskTitleDecoration: TextDecoration.lineThrough,
      
      // Optional custom font
      fontFamily: 'Roboto',
    ),
    
    // Spacing customization
    spacing: CalendarSpacing(
      small: 4.0,
      medium: 8.0, 
      large: 16.0,
      dayIndicatorSize: 24.0,
      taskIndicatorSize: 8.0,
    ),
    
    // Border radius customization
    radius: CalendarRadius(
      buttonRadius: 16.0,
      taskItemRadius: 4.0,
      calendarCellRadius: 0.0,
    ),
    
    // Size customization
    sizes: CalendarSizes(
      tasksPopupWidth: 600.0,
      tasksPopupHeight: 400.0,
      buttonHeight: 35.0,
    ),
  ),
)

CalendarTheme Structure #

The CalendarTheme is composed of four main parts:

  1. Main colors: Basic colors for the calendar

    • todayColor: Highlights today's date
    • selectedColor: Highlights the selected date
    • backgroundColor: Calendar background color
    • borderColor: Color for borders and dividers
  2. TextStyles: Controls font styling for all text elements

    • Day numbers, headers, task titles, etc.
    • Supports custom font family
    • Separate styling for regular, selected, and today states
    • Special styling for completed tasks
  3. Spacing: Controls all spacing and sizes

    • Basic spacing: small, medium, large
    • Component-specific spacing
    • Indicator and button sizes
  4. Radius: Controls rounded corners

    • Buttons, task items, and calendar cells
  5. Sizes: Controls dimensions of UI elements

    • Popup dimensions
    • Button heights

Additional information #

For more examples and detailed documentation, check the example folder.

To run the example app:

cd example
flutter run

License #

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

1
likes
40
points
1.38k
downloads

Publisher

verified publisheroxeanbits.com

Weekly Downloads

A Flutter package for displaying a calendar view with various customization options.

License

Apache-2.0 (license)

Dependencies

flutter, flutter_localizations, intl

More

Packages that depend on oxean_calendar_view