Skip to content
CAI
Software that uses CAICheck a score

aleksanderwozniak/table_calendar

59.4

Adequate · 19 September 2026

2.9k

lines of production code

Dart

primary language

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

This system is a Flutter package that provides a highly customizable TableCalendar widget for displaying and interacting with calendar data. It supports multiple display formats, gesture-based navigation, and granular UI customization through a modular API for styling and building custom calendar components. The library includes built-in utilities for date handling and accessibility, along with comprehensive examples demonstrating various selection modes and localization features.

How it got here

2019 — Flutter V2 migration and API restructuring

10 changes.

The project underwent a comprehensive modernization, migrating the Android and iOS example apps to Flutter V2 embedding, Swift, and Kotlin while upgrading to Dart 3. The core library was refactored from a monolithic structure into a modular architecture, introducing a granular customization API for styling and builders to enhance platform consistency and accessibility.

2021 — Initial TableCalendar release

4 changes.

This period marks the initial release of the TableCalendar widget, introducing core components for customizable calendar interfaces with support for multiple formats, gesture navigation, and range selection. The work included establishing shared utility types and functions for date handling and UI generation, alongside comprehensive widget and utility tests to ensure reliability. Example application pages were also updated to demonstrate the new API and align with the library's current behavior.

Features

Added shared utility types and functions for calendar components

The library now exposes a new \lib/src/shared/utils.dart\ file containing core type definitions and helper functions used by the calendar UI. This includes \DayBuilder\ and \FocusedDayBuilder\ function signatures for custom widget generation, \TextFormatter\ for localized date text, and enums for \AvailableGestures\, \CalendarFormat\, and \StartingDayOfWeek\. It also provides utility functions \getWeekdayNumber\, \normalizeDate\, and \isSameDay\ to assist with date handling and day comparison within the calendar context.

lib/src/shared · high confidence

Initial release of the TableCalendar widget

This change introduces the core \TableCalendar\ widget and its underlying \TableCalendarBase\ component to the library. The new widget provides a highly customizable calendar interface supporting multiple formats (month, two weeks, week), gesture-based navigation (swiping), and range selection. It includes configuration options for styling (headers, days of week, cell content), animation control (page and format transitions), and event loading, along with callbacks for day selection, range selection, and long-press actions.

lib/src · high confidence

New granular customization API for TableCalendar

The \lib/src/customization\ directory now introduces a structured API for styling and rendering the calendar, replacing previous ad-hoc configuration. Users can now define custom UI for specific calendar states (today, selected, range start/end, holidays, disabled) via the new \CalendarBuilders\ class, which provides dedicated builders for day cells, event markers, and range highlights. Additionally, \CalendarStyle\ exposes fine-grained control over cell decorations, text styles, marker positioning, and range highlighting, while \HeaderStyle\ and \DaysOfWeekStyle\ allow customization of the header chevrons, title formatting, and day-of-week labels. This change enables users to completely override the default appearance of individual calendar components rather than relying on global style overrides.

lib/src/customization · high confidence

Behavioural changes

Android example app upgraded to Flutter V2 embedding and modern build tools

The Android example app has been migrated to the Flutter V2 Android embedding, which requires updating the AndroidManifest.xml to declare the activity as exported and use the new NormalTheme, replacing the legacy FlutterApplication and splash-screen meta-data. The Java MainActivity has been replaced by a Kotlin implementation, and the Gradle wrapper has been upgraded from version 4.10.2 to 9.1.0. Additionally, Flutter Web support has been added to the example via new index.html and manifest.json files, enabling the app to run in browsers.

example/android · high confidence

Calendar widgets refactored with platform-aware UI and accessibility improvements

The calendar UI components have been restructured to improve platform consistency and accessibility. CustomIconButton and FormatButton now detect the target platform, rendering native Cupertino buttons on iOS/macOS and Material InkWell widgets elsewhere. Accessibility is enhanced by adding Semantics labels to calendar cells and the prioritizedBuilder, providing screen readers with full date context. Additionally, the header now supports a customizable title builder (headerTitleBuilder) for flexible month display, and the core calendar layout introduces new styling options including tableBorder, tablePadding, and explicit cell padding/alignment controls.

lib/src/widgets · high confidence

Example app restructured with navigation and localization support

The example application has been reorganized to serve as a comprehensive showcase. A new start page replaces the previous single-view layout, providing navigation buttons to distinct examples including Basics, Range Selection, Events, Multiple Selection, and Complex scenarios. Additionally, the app now initializes date formatting via the intl package to ensure proper locale support, and utility functions for event handling and date range generation have been added to support these examples.

example/lib · high confidence

Refactor library structure and expose customization API

The library has been restructured to replace the internal \CalendarLogic\ class with a modular, export-based architecture. The public API now exposes specific customization components, including \calendar\_builders.dart\, \calendar\_style.dart\, \days\_of\_week\_style.dart\, and \header\_style.dart\, allowing users to customize the calendar's appearance and behavior. The previous monolithic implementation in \table\_calendar.dart\ has been split into separate source files under \src/\, providing a cleaner separation of concerns and enabling more granular control over the calendar's UI elements.

lib · high confidence

Removal of legacy GeneratedPluginRegistrant class

The legacy \GeneratedPluginRegistrant.java\ file has been removed from the Android application module. This change eliminates the manual plugin registration mechanism, aligning the project with modern Flutter plugin registration standards where plugins are registered automatically at runtime.

android · high confidence

Updated example app to demonstrate Table Calendar customization

The example application has been updated to serve as a demonstration for the Table Calendar package, showcasing both custom Styles and Builders for UI customization. The README now reflects this purpose with relevant documentation and images, while the underlying Flutter environment has been switched from the stable to the beta channel.

example · high confidence

Updated example application pages

The example application's demonstration pages (basics, complex, events, multi, and range) have been updated to reflect the current TableCalendar API. These changes include adopting the new \super.key\ syntax for stateful widgets, implementing proper disposal of \ValueNotifier\ instances, and adjusting event selection logic to align with the library's current behavior for single selection, multi-selection, and range modes.

example/lib/pages · high confidence

iOS example app upgraded to modern Xcode and Swift configuration

The iOS example app has been migrated from Objective-C to Swift, replacing the manual AppDelegate implementation with a modern setup using \FlutterImplicitEngineDelegate\ and a bridging header. The Xcode project file was upgraded to object version 54 (Xcode 15.1), updating the build scheme to use a custom LLDB init file and enabling GPU validation mode. Additionally, the app configuration now supports iOS 13+ scene lifecycle via \UIApplicationSceneManifest\, disables minimum frame duration on iPhone, supports indirect input events, and updates the app name to "table\_calendar example".

example/ios · high confidence

Test coverage

Added widget and utility tests for the calendar components

Added comprehensive widget tests for the calendar header, page, cell content, custom icon button, format button, and base calendar logic, along with utility tests for date normalization and comparison helpers.

test · high confidence

Dependencies

Upgrade to Dart 3 and modernize Android build configuration

The example app and the \table\_calendar\ package have been upgraded to require Dart SDK 3.0.0 or higher, replacing the previous Dart 2 constraint. This update also migrates the Android example project from Groovy to Kotlin DSL (\build.gradle.kts\), updates the Android Gradle plugin to version 9.0.1, and sets the Java/Kotlin target to version 17. Additionally, the package's dependency on \date\_utils\ has been removed in favor of \simple\_gesture\_detector\ for gesture handling, and the \intl\ dependency has been updated to version 0.20.0.

(dependencies) · high confidence

Housekeeping

Project initialization and documentation overhaul

The repository has been initialized with a new analysis configuration using the \package:lint\ rule set, replacing the previous IntelliJ module file with standard Flutter/Dart ignore patterns. The project license has been updated from a placeholder to Apache License 2.0, and the README has been completely rewritten to provide comprehensive documentation, including installation instructions, basic setup examples, event handling, and custom UI builder guides for the TableCalendar widget.

(repo-wide) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Baseline

  • First survey — no prior run to compare against. CAI 59.

Lenses

  • Code Health 96
  • Architecture 100
  • Maturity 59
  • Readiness 36
  • Security 100
  • Domain Modelling 100

Changes since last survey

  • 300 commits — 279 feature/other, 21 fixes

By area

  • lib/src — 132 commits
  • (root) — 63 commits
  • (repo) — 43 commits
  • example/lib — 33 commits
  • example/android — 8 commits
  • example/ios — 3 commits
  • lib/table_calendar.dart — 2 commits
  • test/calendar_header_test.dart — 2 commits
  • test/calendar_page_test.dart — 2 commits
  • test/cell_content_test.dart — 2 commits
  • test/format_button_test.dart — 2 commits
  • .github/ISSUE_TEMPLATE — 1 commit
  • example/.gitignore — 1 commit
  • example/web — 1 commit
  • test/common.dart — 1 commit
  • test/custom_icon_button_test.dart — 1 commit
  • test/table_calendar_base_test.dart — 1 commit
  • test/table_calendar_test.dart — 1 commit
  • test/utils_test.dart — 1 commit

Notable commits

  • fix: Add dayTextFormatter property to CalendarStyle, revert to original '${date.day}' day cell text formatting
  • fix: Code cleanup, typo fixes.
  • fix: Fix RenderFlex issue when onPageChanged is invoked in CalendarCore
  • fix: Fix calendarFormat bug, improve scrolling animation
  • fix: Fix empty weekendDays assertion bug
  • fix: Fix endDay issue
  • fix: Fix holidays issue
  • fix: Fix last day of month animation issue
  • fix: Fix missing Flutter Web tag
  • fix: Fix naming
  • fix: Fix null dispose issue
  • fix: Fix null marker issue
  • fix: Fix twoWeeks programmatic issue, improve code
  • fix: Fix visibleDays issue
  • fix: Fix: Targeting S+ (version 31 and above) requires that an explicit value for android:exported be defined when intent filters are present.
  • fix: Format fixes and improvements
  • fix: Merge pull request #133 from pauldemarco/fix-stale-events
  • fix: Merge pull request #273 from fstof/fix-left-arrow
  • fix: PR feedback fixes
  • fix: fix: bug for format button add placeholders when chevrons are hidden
  • …and 280 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

aleksanderwozniak/table_calendar was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 19 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 754c8fe728d70ad486132e22526008ff214b4398 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-13a154b7f5d1.