dynamo_calendar
A powerful, multi-mode Flutter calendar widget designed for flexibility. Whether you need a simple date picker, a precise time picker, or a full-scale event scheduler, Dynamo Calendar handles the complexity so you can focus on your app's logic.
Optimized for desktop, tablets, and small-screen apps; android, iOS, and web.
๐ Features
Four distinct modes:
-
Simple date selection
-
Time selection only
-
Combined date + time selection
-
Full scheduler with event visualization & interaction
-
๐ Date Picker: Selection of single dates with a clean, modern UI.
-
โฐ Time Picker: Precise hour and minute selection.
-
๐ Date & Time: Combined picker for appointments and deadlines.
-
๐๏ธ Scheduler Mode: View and interact with a list of events assigned to specific dates.
-
๐ฑ Responsive: Built-in support for both Mobile and Desktop/Web layouts.
๐ฆ Installation
Add the dependency to your pubspec.yaml:
dependencies:
dynamo_calendar: ^1.0.0
Or run:
flutter pub add dynamo_calendar
๐ Usage
Import the library
import 'package:dynamo_calendar/dynamo_calendar.dart';
Datepicker Example
showDialog(
context: context,
builder: (context) => Material(
type: MaterialType.transparency,
child: DynamoCalendar(
calendarMode: CalendarMode.datePicker,
selectedDate: selectedDate,
onDateSelected: (datePicked) {
selectedDate = datePicked;
_updateText(selectedDate != null ? DateUtil.getStandardDate(selectedDate) : "");
},
),
),
);
Timepicker Example
showDialog(
context: context,
builder: (context) => Material(
type: MaterialType.transparency,
child: DynamoCalendar(
key: ValueKey(++_counter),
calendarMode: CalendarMode.timePicker,
selectedTime: selectedTimeOfDay,
onTimeSelected: (timePicked) {
selectedTimeOfDay = timePicked;
_updateText(selectedTimeOfDay?.format(context) ?? "");
},
),
),
);
Date & Time Picker Example
showDialog(
context: context,
builder: (context) => Material(
type: MaterialType.transparency,
child: DynamoCalendar(
calendarMode: CalendarMode.dateAndTimePicker,
selectedDate: selectedDate,
onDateSelected: (datePicked) {
selectedDate = datePicked;
_updateText(selectedDate != null ? DateUtil.getStandardDate(selectedDate, verbose: true) : "");
},
),
),
);
Scheduler Example
DynamoCalendar(
calendarMode: CalendarMode.scheduler,
selectedDate: selectedDate,
calendarEvents: myCalendarEvents,
onShowDetailsPressed: (events) => _showEventDetails(context, events),
onDateSelected: (date) {
// Navigator logic for new event
},
),
Implementation Tips
ReadOnly TextFields: When using a TextField as a trigger, set readOnly: true.
This prevents the system keyboard from overlapping your beautiful calendar.
Event Handling: In scheduler mode, the onShowDetailsPressed returns a list of events.
You can use this to show a detail sheet or a custom popup with event description details.
๐งช Example
A complete working example is available in /example, showcasing:
- Datepicker
- Timepicker
- Date & Time Picker
- Scheduler
๐ฅ Demo

๐ License
This project is licensed under the Apache 2.0 License - see the LICENSE file for details.
๐ค Contributing
Contributions, issues, and feature requests are welcome! Feel free to check the issues page.
Libraries
- dynamo/project/commons/constants/pad_direction_type
- dynamo/project/commons/system/entities/date_element_type
- dynamo/project/commons/system/entities/holiday_day_dto
- dynamo/project/commons/system/entities/holiday_orient_type
- dynamo/project/commons/system/entities/holiday_weekend_recognition_type
- dynamo/project/commons/system/entities/log_level
- dynamo/project/commons/system/entities/message_type
- dynamo/project/commons/system/entities/select_item
- dynamo/project/commons/system/entities/unique_value_field
- dynamo/project/commons/system/handlers/app_logger
- dynamo/project/commons/system/handlers/date_util
- dynamo/project/commons/system/handlers/dynamo_commons
- dynamo/project/commons/system/handlers/token_expected_exception
- dynamo/project/commons/types/calendar_day
- dynamo/project/commons/types/dynamo_calendar
- dynamo/project/commons/views/input_text_field
- dynamo/project/commons/views/table_widget_commons
- dynamo_calendar