Skip to content
CAI
Software that uses CAICheck a score

fluttercommunity/chewie

62.8

Adequate · 19 September 2026

8k

lines of production code

Dart

primary language

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

Chewie is a Flutter video player wrapper that provides customizable Material and Cupertino UI controls for media playback. It supports advanced features such as multi-track audio and subtitle selection, video quality switching, chapter navigation, and casting to external devices. The system also handles platform-specific behaviors like fullscreen routing, keyboard navigation, and adaptive control skins across mobile and desktop environments.

How it got here

2017 — UI rewrite and platform modernization

12 changes.

This period focused on a comprehensive rewrite of the video player's UI layer, introducing new control widgets, enhanced subtitle rendering, and web fullscreen support. Concurrently, the project modernized its build infrastructure by upgrading to Flutter V2 embedding, migrating the iOS example to Swift, and updating core dependencies to align with recent Flutter and Dart versions.

2019–2026 — Casting support and UI modernization

10 changes.

This period focused on implementing comprehensive casting capabilities and introducing native-style UI controls for both Material and Cupertino platforms. The work involved creating new control widgets, dialogs for media settings, and adaptive helpers to support external playback targets and advanced features like chapter navigation and multi-track audio.

Features

Added web platform support to the example app

The example application now includes the necessary files to run in a web browser. An index.html entry point loads the compiled Dart JavaScript, and a manifest.json file configures the app as a standalone PWA with specific theme colors and icons.

example/web · high confidence

Introduce cast controller interface and platform-specific UI widgets

This change adds the foundational types and UI components for casting support in the \lib/src/cast\ directory. It defines the \ChewieCastController\ abstract class, which serves as the integration point for external casting backends (such as Chromecast or AirPlay), along with supporting data models like \CastDevice\, \CastMedia\, and \CastConnectionState\. On the UI side, it introduces \CastButton\ for initiating device discovery, \CastDevicesDialog\ (Material) and \CupertinoCastDevicesSheet\ (iOS) for selecting a target device, and \CastOverlay\ to display connection status. It also includes \CupertinoCastButton\ to adapt the cast button for the Cupertino skin's frosted pill aesthetic.

lib/src/cast · high confidence

New Cupertino UI components for additional controls and options

Added three new widgets to the Cupertino widget library: \CupertinoAdditionalControls\ renders a row of custom controls with native-style frosted pill backgrounds and fade animations; \CupertinoFrostedPill\ provides the blurred, rounded background effect required for buttons in the control bars; and \CupertinoOptionsDialog\ displays a native iOS-style action sheet for presenting a list of options with a cancel button.

lib/src/cupertino/widgets · high confidence

New Cupertino video controls with casting, chapters, and subtitle support

The \lib/src/cupertino\ location now provides a complete, new Cupertino-style control bar (\CupertinoControls\) and progress bar (\CupertinoVideoProgressBar\) for iOS and desktop platforms. This replaces previous implementations with a feature-rich UI that includes a customizable auto-hide timer, a background tap-to-pause gesture, and a dedicated play button toggle. The controls intelligently suppress the local buffering spinner and center seek buttons when playback is remote (e.g., Chromecast or AirPlay), deferring those indicators to the external display. Users can now navigate video chapters via hover/scrub tooltips on the progress bar, view custom rich-text subtitles, and access a video-quality selection menu. The implementation also supports external playback targets, additional custom control widgets, and auto-hiding the mouse cursor in fullscreen.

lib/src/cupertino · high confidence

New Material and Desktop video controls with casting, keyboard, and chapter support

The \lib/src/material\ package now includes new \MaterialControls\, \MaterialDesktopControls\, and \MaterialVideoProgressBar\ widgets. These controls introduce support for external playback targets (casting), allowing the buffering indicator to be hidden when the video is playing remotely. The desktop controls add keyboard navigation (Space to play/pause, arrows to seek, F for fullscreen, Escape to exit). The progress bar now supports video chapters, displaying segment titles on hover or scrub. These components also integrate with new options dialogs for multi-track audio, subtitle, and video quality selection.

lib/src/material · high confidence

New material dialogs for audio, subtitles, video quality, playback speed, and options

Added five new Material-style dialog widgets to the player controls: AudioTrackDialog for selecting audio tracks, SubtitleTrackDialog for choosing subtitles (including an 'Off' option), VideoQualityDialog for picking video quality, PlaybackSpeedDialog for adjusting playback speed, and OptionsDialog for displaying a list of custom actions. These dialogs provide a consistent UI for users to interact with media metadata and settings.

lib/src/material/widgets · high confidence

New model classes for multi-track, casting, and styling capabilities

The \lib/src/models\ directory now includes new data models that enable multi-track audio and subtitle selection, video quality switching, and casting support. \AudioTrack\, \SubtitleTrack\, and \VideoQuality\ classes provide the structure for selectable options in the player's menu, while \ChewieChapter\ supports chapter-based progress bar segments. Additionally, \CastTranslations\ and \OptionsTranslation\ handle localization for casting and options menus, and \ChewieControlStyle\ allows control bars to style their internal widgets consistently across different skins.

lib/src/models · high confidence

Behavioural changes

Android example app upgraded to Flutter V2 embedding and Gradle 8.6

The Android example app has been migrated to the Flutter V2 Android embedding, which changes how the app initializes and handles themes (including support for dark mode via NormalTheme) and requires the new meta-data entries in AndroidManifest.xml. Additionally, the project now uses Gradle 8.6 (up from 3.3) and updates the MainActivity to use the new FlutterActivity class, ensuring compatibility with modern Flutter tooling and build systems.

example/android · high confidence

Example app modernizes configuration and cleanup

The example app now includes analysis\_options.yaml to enforce flutter\_lints and devtools\_options.yaml for DevTools configuration, while removing obsolete .iml files and updating .gitignore and .metadata to align with current Flutter project standards.

example · high confidence

Example app restructured into a modular package

The example application's entry point has been refactored to import and run the app from a dedicated \chewie\_example/app\ module instead of defining the entire application hierarchy (including \MyApp\, \MyHomePage\, and video player logic) directly in \main.dart\. This change consolidates the demo's UI and state management into a separate library structure, simplifying the root file and improving code organization for the example project.

example/lib · high confidence

Example app restructured with Material 3 theming and casting demo

The example application has been reorganized into a new structure under example/lib/app, featuring a complete migration to Material 3 via the AppTheme configuration. This update introduces a simulated casting backend (DemoCastController) to demonstrate end-to-end casting UI without external SDKs, alongside a new DemoBookmarkButton that adapts to Chewie's control styles. The demo also showcases advanced subtitle rendering with inline markup and typed video-quality selection in the options menu.

example/lib/app · high confidence

New adaptive controls and YouTube-style seek indicator

The library now includes an \AdaptiveControls\ helper that automatically selects the appropriate UI controls (Material, MaterialDesktop, or Cupertino) based on the target platform, and supports a new \showPlayButton\ option to toggle the play button visibility. Additionally, a new \SeekIndicatorStateMixin\ introduces a transient, YouTube-style seek indicator that accumulates seek steps in the same direction and fades out after 900ms, while a new \getIsBuffering\ utility provides a workaround for Android buffering state detection issues in the video player plugin.

lib/src/helpers · high confidence

Restructured library exports and exposed desktop controls

The library's public API has been reorganized to explicitly export individual source files (such as the player, progress colors, and models) rather than relying on a single library directive. This change also exposes the new MaterialDesktopControls and MaterialProgressBar widgets, allowing users to customize or reuse these specific UI components directly.

lib · high confidence

Rewritten video player UI with new controls and web fullscreen support

The library's UI layer has been completely rewritten, introducing new components such as AnimatedPlayPause, CenterPlayButton, and CenterSeekButton for the control bar, and a redesigned VideoProgressBar that now supports chapter segments, hover/scrub time indicators, and pending-seek position painting. Subtitle rendering has been enhanced to support inline markup (bold, italic, underline, font color) via a new parseSubtitleMarkup utility and a dedicated SubtitleOverlay widget. Web fullscreen behavior is now handled by a dedicated web\_fullscreen module that uses the browser Fullscreen API where available and falls back to the video element's native fullscreen on browsers like iPhone Safari, ensuring playback continuity. The player state is now managed via a PlayerNotifier singleton, and the main Chewie widget orchestrates fullscreen routing, casting overlays, and zoom/pan interactions through a refactored PlayerWithControls layout.

lib/src · high confidence

Updated iOS example app configuration and migrated to Swift

The iOS example app has been migrated from Objective-C to Swift, replacing the legacy AppDelegate implementation with a modern Swift class. Configuration updates include renaming the app bundle to 'example', switching version strings to use Flutter build variables, and adding support for iOS marketing assets. Additionally, the Info.plist has been updated to include keys required for newer iOS versions, such as disabling minimum frame duration on phones and supporting indirect input events.

example/ios/Runner · high confidence

iOS example app minimum deployment target raised to iOS 12

The iOS example application now requires a minimum deployment target of iOS 12.0, up from 8.0, which may prevent the app from running on older iOS devices. Additionally, the build configuration files have been updated to include CocoaPods support configs for both debug and release modes.

example/ios/Flutter · high confidence

iOS example project upgraded to modern Xcode and Swift configuration

The iOS example app's Xcode project has been upgraded to object version 54 (Xcode 15.1) and migrated from Objective-C to Swift, replacing AppDelegate.m/h with AppDelegate.swift and adding a bridging header. The build system now uses CocoaPods frameworks (Pods\_Runner.framework) instead of static libraries, and the project structure includes a new RunnerTests target with unit tests. Additionally, the Xcode scheme was updated to enable GPU validation mode, configure a custom LLDB init file for Flutter debugging, and include the new test target in the build action.

example/ios/Runner.xcodeproj · high confidence

Test coverage

Added initial iOS test suite scaffold; Added tests for audio track selection, casting, and fullscreen behavior; Added widget test for ChewieDemo.

Dependencies

Chewie 1.17.2: Major dependency and build system modernization

The Chewie package and its example app have been updated to version 1.17.2, requiring Flutter 3.44+ and Dart 3.12+. Core dependencies were upgraded to video\_player ^2.14.0, wakelock\_plus ^1.8.0, provider ^6.1.5+1, and cupertino\_icons ^1.0.9, while removing legacy dependencies like open\_iconic\_flutter and connectivity. The example app's Android build was migrated to the modern Gradle plugin DSL (using com.android.application 8.3.1 and Kotlin 1.8.22), replaced the deprecated Podfile with Flutter's native plugin loader, and updated SDK targets to minSdk 21 and compileSdk 35.

(dependencies) · high confidence

Housekeeping

Chewie 1.17.2 release notes and project housekeeping

The changelog has been updated to document the Chewie 1.17.2 release, which introduces swipe-to-exit fullscreen, multi-track audio and subtitle selection, YouTube-style seek indicators and tap gestures, in-place video source swapping, typed video-quality selection, and a \disableFullScreenRoute\ option. The project also adopts \flutter\_lints\ for static analysis, adds DevTools configuration, and removes obsolete \.iml\ module files.

(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 63.

Lenses

  • Code Health 94
  • Architecture 96
  • Maturity 57
  • Readiness 58
  • Security 59
  • Domain Modelling 100

Changes since last survey

  • 300 commits — 238 feature/other, 62 fixes

By area

  • lib/src — 116 commits
  • (repo) — 71 commits
  • (root) — 68 commits
  • .github/workflows — 13 commits
  • example/lib — 8 commits
  • example/android — 4 commits
  • example/ios — 3 commits
  • test/progress_bar_chapters_test.dart — 2 commits
  • test/uninitialized_controls_state_test.dart — 2 commits
  • example/pubspec.yaml — 1 commit
  • lib/chewie.dart — 1 commit
  • test/disable_full_screen_route_test.dart — 1 commit
  • test/double_tap_seek_test.dart — 1 commit
  • test/hide_cursor_test.dart — 1 commit
  • test/keyboard_fullscreen_toggle_test.dart — 1 commit
  • test/material — 1 commit
  • test/seek_indicator_test.dart — 1 commit
  • test/subtitle_markup_test.dart — 1 commit
  • test/subtitle_track_dialog_test.dart — 1 commit
  • test/swap_video_source_test.dart — 1 commit

Notable commits

  • fix: - Add devtools_options.yaml configuration files - Add devtools_options.yaml example configuration - Update iOS AppDelegate.swift - Fix RTL support in CupertinoControls - Fix RTL support in MaterialControls
  • fix: Add fix for returning from full screen web
  • fix: Added more fixes related to supporting Flutter 3.29.
  • fix: Added more fixes to the Github workflow.
  • fix: Fix example on web
  • fix: Fix focusNode dispose issue
  • fix: Fix zoomAndPan not having an effect. Hide controls while interacting with zoomAndPan.
  • fix: Fixed : Playback speed reset on forwarding video
  • fix: Fixed CI workflow error syntax issue.
  • fix: Fixed README links
  • fix: Fixed a stray lint issue due to recent PR.
  • fix: Fixed allowMute being ignored on Desktop
  • fix: Fixed broken Table of Contents links in README.md, take two.
  • fix: Fixed broken Table of Contents links in README.md.
  • fix: Fixed dart lint issues.
  • fix: Fixed slight issue due to previous commit.
  • fix: Lint issue Fixed
  • fix: Merge branch 'fluttercommunity:master' into fix-pop
  • fix: Merge branch 'master' into fix-is-finished-bug
  • fix: Merge pull request #798 from glucoseinc/fix/progress-bar-does-not-follow-drag
  • …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

fluttercommunity/chewie 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 1b620d4809993a32e5ba40c82ced79eba753490e — 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.