FriesI23/mhabit
73.1
Strong · 19 September 2026
82.7k
lines of production code
Dart
primary language
1
measurement over time
What this system is
Table Habit is a cross-platform habit tracking application built with Flutter, supporting Android, iOS, macOS, Windows, and Linux. It enables users to create, edit, and monitor daily habits with features like scoring, grouping, and batch status changes, while offering WebDAV synchronization for data backup and cross-device consistency. The system provides a localized, adaptive user interface that adjusts to platform-specific design patterns and includes comprehensive build automation for multi-platform distribution.
How it got here
2023 — Platform expansion and legacy cleanup
30 changes.
The project standardized its build automation to support Linux and Windows alongside existing platforms, while modernizing iOS and Android configurations by removing CocoaPods and upgrading Gradle. This period also involved a comprehensive cleanup of legacy view, provider, and model layers, replacing them with new localization infrastructure, theme generation tools, and updated notification systems.
2024–2025 — multi-platform expansion and UI modernization
57 changes.
The project expanded its desktop footprint by adding initial support for macOS, Windows, and Linux, while establishing CI/CD pipelines and automated store deployment workflows for all platforms. Concurrently, the application underwent a significant architectural overhaul to implement adaptive UI across all interfaces, migrating navigation to go\_router and restructuring storage, assets, and logging systems for better maintainability and cross-platform consistency.
2026 — Adaptive UI and event-driven architecture
27 changes.
The project introduced a platform-adaptive UI package and restructured state management across habit views to use dedicated providers and a centralized event bus. This period also established robust code generation tools for proxies and colors, while significantly expanding test coverage and automating release workflows for multiple app stores.
Features
Add Linux desktop platform support
The application now supports Linux desktop environments. This change introduces the necessary CMake build configuration, GTK-based application entry points, and plugin registrations (including file selector, secure storage, and URL launcher) to enable the app to run natively on Linux.
linux · high confidence
Add Windows platform support with custom flavor and build profile handling
The application now runs on Windows. This change introduces the native Windows runner, including the CMake build configuration, Win32 window management, and Flutter integration. It supports custom application flavors, which dynamically adjust the binary name and version resource metadata (such as FileDescription and InternalName) based on the build target. Additionally, the build system now creates symlinks for Debug, Profile, and Release output directories to simplify locating the built executables.
windows/runner · high confidence
Add localized app names for Android build flavors
The Android app now supports localized app names for the \f\_dev\ and \f\_generic\ build flavors. This change adds \strings.xml\ files for English, Simplified Chinese, and Traditional Chinese within the \f\_dev\ flavor directory, and extends this localization support to over a dozen languages (including Arabic, Czech, German, Spanish, French, Hebrew, Hungarian, Italian, Japanese, Norwegian, Dutch, Polish, Brazilian Portuguese, Russian, Turkish, Ukrainian, Vietnamese, and Traditional Chinese) within the \f\_generic\ flavor directory. This ensures that the app displays the correct localized name to users depending on their device language and the specific build variant they are using.
android/app · high confidence
Add macOS App Store distribution via fastlane
This change introduces fastlane configuration files (Appfile, Fastfile, Matchfile) for the macOS platform, enabling automated code signing via Match and submission to the App Store. The new 'mac deploy' lane supports building and uploading packages to the public track (with automatic review submission) as well as TestFlight for beta and alpha tracks, while also handling changelog metadata and IAP precheck settings.
macos/fastlane · high confidence
Add macOS application support
This change introduces the macOS platform for the application, adding the necessary runner files including the AppDelegate, main window controller, and configuration plists. It configures the app bundle with the display name 'mhabit', sets the application category to productivity for the store build, and declares that the app does not use non-exempt encryption. The configuration also includes standard macOS entitlements for app sandboxing, network access, and user-selected file read-write access.
macos/Runner · high confidence
Add macOS platform support for the Runner application
This change introduces the initial macOS build configuration for the application, enabling it to run on macOS. It adds the Xcode workspace settings, the main menu interface (MainMenu.xib) with standard application menu items, and the necessary configuration files (xcconfig) to define the app name (mhabit), bundle identifier, copyright, and compiler warning flags for Debug and Release builds.
macos/Runner.xcodeproj/project.xcworkspace, macos/Runner/Base.lproj, macos/Runner/Configs · high confidence
Added Android Fastlane automation for Play Store deployment
The \android/fastlane\ directory now includes a complete Fastlane configuration (Appfile, Fastfile, and README) to automate Android builds and Google Play Store submissions. Users can now execute lanes such as \android build\ to generate app bundles, \android deploy\_play\_store\ to upload artifacts and metadata to the Play Store, and \android update\_play\_store\ for granular metadata or asset updates. The setup supports configurable flavors (defaulting to \f\_store\ for store releases) and includes dry-run validation capabilities.
android/fastlane · high confidence
Added Microsoft Store submission safety and changelog staging scripts
New PowerShell scripts in the msstore directory now protect the Microsoft Store submission pipeline from overwriting manual drafts and automate release notes updates. The check\_draft\_ownership.ps1 script verifies that any pending Store submission matches the ID recorded by the CI pipeline, preventing accidental overwrites of drafts created in Partner Center. The update\_changelog.ps1 script reads per-locale changelog files from the Android fastlane metadata and stages them as release notes on the Store submission draft, while recording the submission ID for future safety checks. A shared common.ps1 helper ensures robust parsing of msstore command output, handling line-wrapping issues that previously caused JSON parsing failures.
scripts/msstore · high confidence
Added Windows publishing certificate and CSR
A new X.509 certificate (publish.crt) and its corresponding Certificate Signing Request (publish.csr) have been added to the windows/certificate directory. These files, issued to 'io.github.friesi23.mhabit' for self-signing purposes, provide the necessary credentials for code signing and publishing Windows builds.
windows/certificate · high confidence
Added iOS App Store submission workflow via fastlane
This change introduces a new fastlane configuration for the iOS app, enabling automated building, code signing, and submission to the App Store. The setup includes an Appfile with specific Apple Developer and App Store Connect identifiers, a Matchfile for managing signing certificates via a Git repository, and a Fastfile defining lanes for cleaning the environment, running tests, building Flutter flavors, and deploying releases. The deploy lane supports both TestFlight (beta/alpha) and public App Store tracks, with logic to handle code signing in CI versus local environments, optional precheck for in-app purchases, and changelog handling for TestFlight uploads.
ios/fastlane · high confidence
Added macOS Xcode schemes for flavors
The macOS project now includes shared Xcode schemes to support app flavors. In addition to the default Runner scheme, new schemes have been added for development (f\_dev), generic (f\_generic), and store (f\_store) variants. These schemes configure specific build configurations (e.g., Debug-f\_dev, Release-f\_store) and ensure the Flutter framework is prepared before building, allowing developers to easily switch between different app variants in Xcode.
macos/Runner.xcodeproj/xcshareddata · high confidence
App Settings UI reorganized with new language, theme, and import controls
The app settings interface has been restructured into a dedicated widgets directory, introducing several new configuration controls. Users can now change the app language via a dedicated dialog that supports system-follow mode and localized script names. Theme customization has been expanded with a new color picker supporting system, primary, dynamic, and internal habit colors, alongside a mode selector for light, dark, or system-follow themes. A new import workflow allows users to bring in habits from third-party sources like Loop Habit Tracker, with a confirmation dialog that tracks import progress for both habits and groups. Additional settings include toggles for notification permissions (with platform-specific handling for Android and macOS), cache clearing, date display formatting, collapsed calendar bar sizing, and user action gestures (tap, double-tap, long-tap). A new sync failure log viewer allows exporting error details, and a developer section now includes UI style and text direction overrides.
_lib/pages/app\_settings/\widgets · high confidence
Automated macOS CI build preparation and execution
New CI scripts have been added to the macOS project to automate the build pipeline. The post-clone script ensures the environment is ready by using the project's Flutter submodule, installing macOS-specific Flutter artifacts, and fetching dependencies. The pre-xcodebuild script handles the actual build process, automatically detecting an Xcode scheme to build with the correct flavor or falling back to a standard release build.
_macos/ci\scripts · high confidence
Expanded language support with new and updated localization files
The app now supports additional languages, including Arabic, Czech, German, Spanish, Basque, Persian, French, Hebrew, Hungarian, Italian, Japanese, and Norwegian Bokmål. These new files provide translated strings for core features such as habit editing, frequency selection, and reminders. Note that some newly added languages (Basque, Norwegian) currently display English fallback text for many UI elements, while others like Arabic and Hebrew are fully localized.
lib/l10n · high confidence
Expanded notification infrastructure for app sync and debugger channels
The notification system in lib/reminders has been refactored to support new application-level notification types. New notification channels and data types have been added for 'appDebugger' and 'appSync' (including 'appSyncFailed'), enabling dedicated notification handling for debugging information and background synchronization status. The code now uses platform-specific notification details wrappers (Android, Darwin/iOS/macOS, Linux, Windows) to configure these channels, and introduces a dedicated tap handler to route debugger notification taps to the app debugger page. Additionally, the notification ID range has been extended to reserve specific ranges for sync notifications, and the service implementation now supports platform-specific initialization for Windows and Linux.
lib/reminders · high confidence
Initial Flatpak packaging for Table Habit
The application is now available as a Flatpak package, enabling installation on Linux systems via Flathub. This change introduces the necessary desktop entry and metainfo files, which define the app's identity as 'Table Habit', specify its utility category, and include branding colors and screenshots for the software center. The metainfo also documents the app's features, such as micro habit tracking, scoring systems, and WebDAV sync, ensuring a proper listing on distribution platforms.
_configs/flatpak\builder, flatpak · high confidence
Initial Windows platform support for the Flutter application
This change adds the necessary build configuration and plugin registration files to enable the Flutter application to run on Windows. The new CMakeLists.txt file sets up the build system to link the Flutter Windows library and C++ client wrapper, while the generated plugin registrant files automatically register native plugins such as connectivity\_plus, file\_selector\_windows, flutter\_secure\_storage\_windows, and share\_plus, allowing the app to utilize these platform-specific features on Windows.
windows/flutter · high confidence
Initial macOS platform support added
This change introduces the foundational configuration and plugin registration required to run the application on macOS. It adds the necessary Xcode workspace and build configuration files, along with a generated plugin registrant that integrates key capabilities such as secure storage, local notifications, file selection, and network connectivity, enabling the app to function on the macOS desktop.
macos/Flutter · high confidence
Introduce code-generation proxy pattern for Dart classes
This change adds two new packages, \mhabit\_proxy\_annotation\ and \mhabit\_proxy\_builder\, which implement a compile-time code generation system for creating proxy classes. The annotation package provides a \@Proxy\ annotation that allows developers to specify a target class and whether to use an annotated name for the generated proxy. The builder package uses the \build\ system and \source\gen\ to scan for this annotation and automatically generate a \\${ClassName}Proxy\ class that implements the target interface, forwarding all public method calls and property access to a base instance. This enables users to create transparent wrappers around existing classes for purposes such as logging, caching, or dependency injection without manual boilerplate.
_packages/mhabit\_proxy\_annotation, packages/mhabit\_proxy\builder · high confidence
Introduce custom color generation via code generation
Users can now define custom color palettes in their pubspec.yaml under the 'mhabit\_color\_builder' section and generate corresponding Dart code at build time. This change adds a new 'mhabit\_color\_annotation' package containing the 'GenerateCustomColors' annotation and a 'mhabit\_color\_builder' package that implements a build\_runner builder to parse the pubspec configuration (including light/dark mode tones and chroma settings) and produce the resulting color definitions.
_packages/mhabit\_color\_annotation, packages/mhabit\_color\builder · high confidence
Introduce group management interface
Users can now create, edit, and delete habit groups via a new GroupManagePage. This page provides a dedicated interface for organizing habits, including options to sort groups by name or habit count, and features a confirmation dialog for deletions with an undo snackbar for safety.
_lib/pages/group\manage · high confidence
Introduce mhabit\_adaptive\_ui package for platform-adaptive UI components
The new mhabit\_adaptive\_ui package provides a comprehensive set of adaptive UI components that automatically render according to the active platform style (Material or Apple/Cupertino). This includes adaptive app bars, navigation bars, sliver app bars, modals, and search bars, allowing the application to present native-looking interfaces on both Android and iOS/macOS without duplicating layout code. The package also introduces a shell-based navigation system with side navigation and window-size-aware layouts, ensuring consistent behavior across different device sizes and form factors.
_packages/mhabit\_adaptive\ui · high confidence
Introduces platform-agnostic utility abstractions for time, paths, and file operations
The lib/utils directory now provides a set of new utility abstractions that decouple core application logic from platform-specific implementations. AppClock replaces direct system time calls with a mockable clock to ensure consistent behavior during testing and time-sensitive operations. AppPathProvider standardizes file system access, routing database, log, and export paths to platform-appropriate directories (e.g., using ApplicationSupport on non-Android platforms) and introducing a dedicated subdirectory for sync-failure logs. LocalTimeZoneManager handles cross-platform timezone detection, including a specific Windows handler that converts Windows timezone names to IANA identifiers. Additionally, new helpers like HabitDateRangeCalculator simplify date range logic for habit tracking, while XShare and app\_sync provide unified interfaces for file sharing and zipping sync failure logs across mobile and desktop platforms.
lib/utils · high confidence
New App Settings page with system language and theme controls
A new App Settings page has been added to the application, providing users with controls for system language, custom date/time formats, first day of the week, theme colors, and cache management. The page includes platform-specific support for opening system language settings on Android, iOS, and macOS, and integrates with the adaptive UI framework for consistent styling across devices.
_lib/pages/app\settings · high confidence
New Group Management UI with adaptive layouts and drag-to-reorder
The Group Management screen now features a fully adaptive interface that switches between Material and Apple styling based on the current theme. Users can create and edit groups via a new adaptive dialog, and the main list supports manual sorting with drag-and-drop reordering. The interface also includes a selection mode for batch operations like editing or deleting multiple groups, with the app bar and action buttons adapting their layout and behavior to the active state.
_lib/pages/group\_manage/\widgets · high confidence
New Python-based release and build automation scripts
The repository introduces a new set of Python scripts in \scripts/python-scripts/bin\ to handle release workflows and build tasks, replacing previous shell-based implementations. This includes \bump\_version.py\ for confirming and applying version bumps in \pubspec.yaml\, \gen\_fastlane\_changelog.py\ for parsing changelogs and generating Android and Darwin release notes, \release\_postgen.py\ to orchestrate post-release metadata generation for Fastlane, Apple platforms, and Flatpak, and \sync-rules.py\ to maintain references to project rules in AI tool configurations (Claude, Copilot, Continue, Cursor) instead of copying content. A \.gitignore\ file is also added to exclude Python virtual environments and cache files from these scripts.
scripts/python-scripts · high confidence
New WebDAV sync task framework and group synchronization support
The app introduces a new internal sync task framework in the \lib/models/\_app\_sync\_tasks\ directory, providing a structured way to manage WebDAV synchronization with features like session management, configurable timeouts, and cancellation handling. This update adds specific support for synchronizing habit groups alongside habits, including logic to merge local and server-side group data and handle concurrent uploads and downloads. Additionally, the sync models now preserve unknown fields during habit round-trips to ensure data integrity when syncing with servers that may include extra metadata.
_lib/models/\_app\_sync\tasks · high confidence
New adaptive UI and habit management widgets
This location introduces a suite of new widgets supporting the app's adaptive UI migration and habit management features. It includes layout and modal infrastructure such as \WindowSizeClassLayoutBuilder\ for responsive sizing, \AdaptiveModalMaterialBridge\ for cross-platform modal consistency, and \EdgeToEdgeMaterialBanner\ for full-width banners. It also adds habit-specific UI components including \GroupColorPicker\ and \GroupCustomColorPickerDialog\ for managing group colors, \AnimatedLinearProgress\ and \AnimatedReorderableList\ for smooth list interactions, and \FilterableMenuField\ for advanced search filtering. Additionally, it provides \ChangelogBanner\ for version updates, \ExperimentalFeatureGate\ for feature flags, and a customized \HabitDatetimePickerDialog\ with preset date chips.
_lib/widgets/\widgets · high confidence
New and updated build, release, and localization automation scripts
The scripts directory now includes dedicated tooling for macOS DMG packaging (build\_dmg.sh), Linux Flatpak builds (build\_flatpak.sh, build\_flatpak\_pre.sh), and Windows MS Store distribution (build\_msix\_store.cmd). Release workflows are supported by scripts for version bumping (release\_bump.sh/cmd), post-generation tasks like Fastlane and Flatpak metadata updates (release\_postgen.sh/cmd), and changelog generation for Android and Apple platforms (gen\_changelogs.sh/cmd, gen\_changelogs\_darwin.sh/cmd). Localization and asset generation are handled by updated icon and logo scripts (gen\_icons.sh/cmd, gen\_logo.sh/cmd) and new ARB normalization tools (normalize\_arb.sh/cmd). Additionally, a new script (gen\_flatpak\_info.sh) automates Flatpak metainfo versioning, and a verification suite (verify\_generated.sh/cmd) ensures generated files remain consistent with source.
scripts · high confidence
New app error page with one-tap crash log copying
The application now displays a dedicated error screen (AppErrorPage) for unhandled exceptions, showing the exception message, stack trace, and the last 200 log lines. A floating action button allows users to copy this diagnostic information to the clipboard with a single tap, including a timestamp from the AppClock, to facilitate bug reporting.
_lib/pages/app\error · high confidence
New app notification configuration page
A new page has been added to allow users to manage app-level notification settings. This screen displays toggle switches for specific notification channels, including app syncing and app sync failure alerts, enabling users to enable or disable these notifications directly from the app settings.
_lib/pages/app\_notify\config · high confidence
New batch check-in interface components
The habits status changer page now includes a dedicated set of UI widgets to support a new batch check-in workflow. This includes a confirmation dialog with Save and Reset actions, a date picker tile for selecting specific dates, a segmented button for changing record statuses (such as skip, ok, dual, or zero), a field for entering skip reasons, and a visual tile for viewing habit status on specific dates. These components are integrated into the existing habits status changer page to allow users to manage multiple habit records at once.
_lib/pages/habits\_status\_changer/\widgets · high confidence
New common UI widgets for sync, theming, and habit management
This location introduces a suite of reusable UI components that enhance the app's user experience. Users can now manage WebDAV sync configurations with dedicated confirmation dialogs and a 'Sync Now' tile that displays real-time progress. The app's appearance is more flexible with a new theme switch button and support for custom date-time formatting. Habit management is improved through a new group editing form, custom number pickers for daily goals, and visual indicators for group sorting and grouping states. Additional utilities include a contributor tile for open-source credits, a donation dialog supporting multiple payment methods, and a pop-scope consumer to handle navigation gestures more reliably.
lib/pages/common · high confidence
New data models for habit scoring, status actions, and sync configuration
The models layer now includes a new habit scoring system (HabitScoreCalculator) that calculates scores based on completion status and values, along with dedicated action classes (ChangeHabitStatusAction, ChangeRecordStatusAction) to manage habit and record status changes. Additionally, new models define sync server configurations (AppSyncServer, AppWebDavSyncServer) with support for WebDAV and fake servers, notification channel settings (AppNotifyConfig), and application entry points (AppEntrys).
lib/models · high confidence
New experimental features management page
A new 'Experimental Features' page has been added to the application, allowing users to toggle specific capabilities directly from the UI. This page provides controls for 'Habit Grouping' (enabling categorization features), 'Natural Sort' (applying native locale collation for sorting, such as pinyin for Chinese), and 'Habit Search'. It also includes a warning banner that appears when any experimental feature is enabled, ensuring users are aware of the beta nature of these tools.
_lib/pages/expermental\features · high confidence
New fastlane helper modules for deployment, signing, and changelog management
This change introduces three new Ruby helper modules within the fastlane directory to support the recently added iOS and macOS App Store submission workflows. DeployLaneHelper provides utility functions for parsing boolean options, handling dry-run modes, and specifically skipping In-App Purchase precheck validations when using App Store Connect API Keys. MatchSigningHelper standardizes environment variable naming for code signing profiles, ensuring backward compatibility for iOS while correctly namespacing profiles for macOS, tvOS, and Catalyst. TestflightChangelogHelper automates the retrieval of localized changelogs by mapping Android locale codes to TestFlight formats and reading metadata from platform-specific or shared directories based on the build flavor.
fastlane · high confidence
New localized assets and translation infrastructure
The application now includes new asset files to support localization and theming. This adds a license file for the 'beta' icon, a new 'today-done' illustration SVG (with a template version for color customization), and a comprehensive set of new localization resource files (ARB format) for Arabic, Czech, German, Spanish, Basque, and Persian, alongside a JSON file tracking untranslated strings.
assets · high confidence
New structured logging system with categorized outputs and debug log capture
The application now uses a new structured logging system in lib/logging that categorizes logs by type (such as debugger, build, value, navi, db, profile, network, and appsync) and provides specialized loggers for text, widget, and value changes. This system includes a logger manager that initializes normal and debugging loggers, with the debugging logger writing to a file and capturing unhandled Flutter and platform errors. Console output is handled by custom printers and outputs that format messages with log levels and isolate names, while a filter controls log levels based on the app's configuration. A replay streamer is also introduced to capture and replay log events, particularly useful for sync tasks, ensuring that logs are written to files even in release mode when errors occur.
lib/logging · high confidence
New support providers for animation sync, chart utilities, and page load management
This change introduces several new support components in the \lib/providers/support\ directory. It adds an \AnimationScaleSync\ bridge that synchronizes Android's system animation scale with Flutter's \timeDilation\, ensuring animations respect system settings while allowing debug overrides. It also introduces \HabitDetailChartHelper\ utilities for managing date ranges and data fetching for habit score and frequency charts. Additionally, a \PageLoadRuntime\ class is added to manage asynchronous page data loading with cancellation support, and an \AboutInfo\ model is created to handle app metadata and donation links via JSON serialization.
lib/providers/support · high confidence
New tooling for deterministic icon font generation and screenshot seed data
The tools directory now includes a new icon font generation pipeline (\tools/bin/gen\_icons.dart\) that produces deterministic builds by respecting the \SOURCE\_DATE\_EPOCH\ environment variable, and a screenshot data generator (\tools/bin/gen\_screenshot\_data.dart\) that creates seed JSON files from YAML configurations (\tools/config/screenshot\_seed.yaml\ and \tools/config/screenshot\_seed\_natural\_sort.yaml\) to support consistent, cross-platform natural-language collation sorting in UI previews.
tools · high confidence
Standardized build automation and expanded platform support
The project now provides a unified Makefile that standardizes local automation entrypoints (such as init, build-runner, format, and test) across Windows and Unix environments, replacing previous ad-hoc scripts. This change accompanies the addition of Linux and Windows platform support, making the app available on five platforms (Android, iOS, macOS, Windows, Linux). The build system also integrates FVM (Flutter Version Management) via a new .fvmrc and submodule, and updates the project metadata to reflect the new target platforms.
(repo-wide) · high confidence
Support for batch habit grouping and input length validation
Users can now organize habits into groups via a new batch modification handler that calculates affected habits and source groups without handling UI logic. Additionally, text input fields can now enforce soft and hard character limits, with a counter that turns red when the soft limit is exceeded.
_lib/pages/habits\_display/\_helpers, lib/widgets/\rules · high confidence
iOS app display names localized for dev and generic builds
The iOS app's bundle display name is now localized across 20 languages (including Arabic, Czech, German, English, Spanish, Basque, Persian, French, Hebrew, Hungarian, Italian, Japanese, Norwegian, Dutch, Polish, Portuguese, Russian, Turkish, Ukrainian, Vietnamese, Simplified Chinese, Traditional Chinese, and generic Chinese). Each localization provides distinct strings for the development build (e.g., "Table Habit (Dev)") and the generic/release build (e.g., "Table Habit"), ensuring the app icon label reflects the correct language and build variant on the device.
ios/Localizations · high confidence
macOS build project configuration and localization support
The macOS Xcode project file has been added/updated to configure the build environment for the 'mhabit' application. This includes setting up the Flutter Assemble target, linking the FlutterGeneratedPluginSwiftPackage, and defining build configurations (Debug, Release) via xcconfig files. Additionally, the project now includes resource references for a wide range of localized strings (InfoPlist.strings) across multiple languages (including Basque, Dutch, Hungarian, Japanese, and others) for dev, generic, and store variants, enabling proper internationalization of the macOS app's interface and metadata.
macos/Runner.xcodeproj · high confidence
Removals
Removal of legacy donation and number picker dialogs
The \DonateDialog\ component and the \HabitRecordCustomNumberPickerDialog\ have been removed from the common view library. This eliminates the previous implementation of the donation interface (which supported BuyMeACoffee, PayPal, Alipay, and WeChat Pay) and the custom number picker used for adjusting daily habit goals, indicating these features have been replaced or refactored elsewhere in the application.
lib/view/common · high confidence
Removal of legacy habit-tracking widget components
The \lib/component/widgets\ directory has been cleaned up by deleting five legacy widget files: \date\_picker.dart\, \habit\_calendar\_space\_bar.dart\, \habit\_daily\_status\_container.dart\, \habit\_form\_flexible\_space\_bar.dart\, and \habit\_list\_tile.dart\. These components, which previously handled date selection, calendar navigation, daily status display, form layout, and list tiling, are no longer present in the codebase.
lib/component/widgets · high confidence
Removal of legacy provider layer
The \lib/provider\ directory has been completely removed, deleting all legacy view models and mixins (including \AppReminderViewModel\, \HabitSummaryViewModel\, \HabitDetailViewModel\, and \HabitFileExporterViewModel\). This eliminates the old state-management and business-logic layer, indicating a shift to a new provider architecture elsewhere in the application.
lib/provider · high confidence
Removed Chinese-language commit message template
The Chinese-language commit message template (commit-zh.template) has been removed from the templates/git directory. Users will no longer have access to this specific localized template for generating commit messages.
templates · high confidence
Removed habits import confirmation dialog
The \import\_habits\_confirm.dart\ file has been deleted from the \lib/view/for\_app\_setting\ directory. This removes the \AppSettingImportHabitsConfirmDialog\ widget and its associated helper function, meaning the user-facing confirmation and progress UI for importing habits is no longer available in this part of the application.
_lib/view/for\_app\setting · high confidence
Removed legacy database helper files for habits and records
The \lib/db/db\_helper/habits.dart\ and \lib/db/db\_helper/records.dart\ files have been deleted. These files previously contained the \HabitDBCell\ and \RecordDBCell\ data models, along with their corresponding SQLite database operations (insert, update, load, and export). This removal indicates that the database access logic for habits and records has been migrated to a different location or implementation within the application.
_lib/db/db\helper · high confidence
Removed legacy habit-edit picker dialogs
The dedicated dialog components for editing habits—specifically the color picker, date picker, and target-days picker—have been removed from the \lib/view/for\_habit\_edit\ directory. This cleanup eliminates the now-unused UI widgets that previously handled color selection, date input, and target-day configuration within the habit editing flow.
_lib/view/for\_habit\edit · high confidence
Removed legacy model and display logic files
The \lib/model\ directory has been cleaned up by deleting several legacy files: \about\_info.dart\, \global.dart\, \habit\_display.dart\ (along with its generated \habit\_display.g.dart\), \habit\_form.dart\, \habit\_summary.dart\, and \score.dart\. This removes the previous implementations for application-wide state management, habit display filtering and sorting, habit form definitions, habit summary data structures, and the scoring calculation engine from this location.
lib/model · high confidence
Architecture
New profile storage abstraction layer
The application introduces a new internal storage infrastructure in the profile module, replacing previous ad-hoc persistence with a structured handler system. This change adds a \ProfileHelper\ framework that manages user settings (such as theme colors, habits, and UI preferences) via \SharedPreferences\, utilizing a new \SameTypeCodec\ for identity conversions and specialized handlers for JSON, integer, and boolean data types. This refactoring provides a consistent, type-safe interface for reading and writing profile data across the app.
lib/storage/profile · high confidence
Profile storage handlers reorganized into dedicated files
The profile storage layer has been restructured to improve maintainability and separation of concerns. All profile-related persistence logic in \lib/storage/profile/handlers\ has been moved into individual, dedicated files (e.g., \app\_theme\_color.dart\, \habit\_search.dart\, \display\_sort\_mode.dart\). This change ensures that each setting or feature flag has its own isolated handler, making it easier to locate, modify, and test specific profile behaviors without affecting unrelated settings.
lib/storage/profile/handlers · high confidence
Reorganized asset and font generation infrastructure
The application's asset management has been restructured to use FlutterGen-generated code. A new \lib/assets/assets.gen.dart\ file now provides type-safe access to icons, images (including donation and empty-state assets), logos, SQL scripts, and configuration files, while \lib/assets/fonts.gen.dart\ exposes font families. The previous barrel file at \lib/view/for\_habit\_display/\_widget.dart\ has been moved to \lib/assets/assets.dart\ and updated to export these new generated asset and font modules instead of individual view widgets.
lib/assets · high confidence
Behavioural changes
About page restructured with adaptive UI and new crypto donation support
The About page has been migrated to a new directory structure and now uses the adaptive UI framework, replacing the standard navigation bar with an adaptive app bar and sliver-based layout for better responsiveness on tablets. The page now supports additional cryptocurrency donation addresses (Bitcoin, Ethereum, BNB, Avalanche, Fantom) alongside existing methods, and includes a new section for displaying contributors loaded from an assets file.
_lib/pages/app\about · high confidence
Adopts native natural sort and fixes iOS 26 double-tap edge issue
The application now uses the native\_natural\_sort package for cross-platform natural-language collation, replacing previous custom logic, and initializes this via FFI on Windows. On iOS, the app now uses a custom FixedIos26FlutterBinding to resolve a double-tap issue at the top edge on iPadOS 26. Additionally, the entry point has been refactored to use AppEntry instead of App, and timezone handling has been consolidated into LocalTimeZoneManager.
lib · high confidence
Android build environment and CI pipeline configuration
The Android module now includes the Gradle wrapper scripts (gradlew and gradlew.bat) to ensure consistent builds, and the .gitignore file has been updated to exclude Fastlane artifacts (such as Play Store service accounts, reports, and screenshots) alongside standard build outputs. These changes support the newly added CI pipeline for Android Play Store submissions.
android · medium confidence
App About page tiles reorganized and modernized
The widgets in the App About page have been reorganized into a dedicated \_widgets directory and updated to use the new adaptive UI components. License, privacy, and changelog views now open in adaptive modal sheets instead of standard dialogs, and link handling has been standardized. The version tile now supports a monochrome logo mode and uses a dedicated changelog dialog for long-press actions. Additionally, icon imports were unified to flutter\_material\_design\_icons, and URL launch failures are now logged via the structured logger instead of generic error logs.
_lib/pages/app\_about/\widgets · high confidence
App Debugger page restructured with adaptive UI and new routing
The App Debugger page has been reorganized into a new directory structure, introducing a dedicated page file and a widgets barrel for modular components. Navigation now uses go\_router instead of the previous navigator helpers, and the UI adapts to platform styles (Apple vs. Material) via the mhabit\_adaptive\_ui package, including conditional rendering of the share action button. The page integrates with the AppDebuggerViewModel to manage logging levels, log collection status, and actions like downloading, clearing, opening, and sharing debug logs and info files.
_lib/pages/app\debugger · high confidence
App Sync Server Editor UI components restructured into dedicated widgets
The App Sync Server Editor form has been refactored to use a modular widget architecture. UI elements such as connection retry count, timeout, network type selection, password handling, and save/delete actions are now implemented as distinct, reusable widgets (e.g., \AppSyncServerConnRetryCountTile\, \AppSyncServerNetworkTypeTile\). This change improves code organization and maintainability by separating form logic from presentation, while preserving the existing configuration capabilities for WebDAV and other sync server types.
_lib/pages/app\_sync\_server\_editor/\widgets · high confidence
App Sync Server Editor restructured with dedicated provider and form logic
The App Sync Server Editor page has been refactored to use a dedicated provider architecture. A new \AppSyncServerFormViewModel\ manages the form state and handles type-specific logic (e.g., WebDAV settings), while \PageProviders\ wires this view model into the widget tree using \ChangeNotifierProvider\ and \ViewModelProxyProvider\. The editor page now presents an adaptive modal sheet for creating or updating server configurations, with specific handling for save and delete operations, including confirmation dialogs for unsaved changes.
_lib/pages/app\_sync\_server\editor · high confidence
App Sync page restructured with dedicated provider and widget modules
The App Sync settings page has been reorganized to improve modularity and state management. The main page now wraps its content in a new \PageProviders\ component, which injects an \AppSyncSettingsAccess\ provider derived from the existing \AppSyncOwner\, allowing the UI to reactively display sync status and configuration. The page's UI logic has been split into dedicated widget files (app bar, summary tile, fetch interval tile, and fail logs tile), and the server configuration and fetch interval settings are now managed through specific callbacks that interact with the new provider layer.
_lib/pages/app\sync · high confidence
App Sync settings page UI is restructured with adaptive widgets
The App Sync settings page now uses a new set of dedicated widget components to render its interface. The app bar adapts to the platform style (Material vs. Apple), featuring a pinned header with a sync enable switch on Material and a bottom bar on Apple. A new summary tile displays the configured sync server type and name, while a separate tile allows users to export failed sync logs. Additionally, a new tile and dialog have been introduced to let users adjust the sync fetch interval.
_lib/pages/app\_sync/\widgets · high confidence
Automated Flutter environment setup for iOS CI
A new post-clone script has been added to the iOS CI configuration to automatically prepare the build environment. This script ensures the correct Flutter version from the project's submodule is used, installs the necessary iOS-specific Flutter artifacts, and fetches project dependencies before the build process begins.
_ios/ci\scripts · high confidence
Custom color palette regenerated with updated shades
The app's custom color palette (cc1–cc10) has been regenerated using the mhabit\_color\_builder tool, resulting in updated light-theme color shades for primary colors, containers, and on-colors (e.g., cc1 changed from \#6750A4 to \#9078D0). The previous manual color logic in lib/theme/\_colors/colors.dart was removed and replaced by the generated custom\_color.dart and custom\_color.g.dart files, while crypto-specific colors were moved to a dedicated theme file.
_lib/theme/\colors · high confidence
Database layer restructured with new schema migrations and sync enhancements
The local database storage layer has been reorganized into a new directory structure under lib/storage/db, introducing dedicated handlers for habits, groups, records, and synchronization. This change adds database schema migrations to support new features: habits now support custom colors (customColor, customColorTinted) and grouping (groupId), while a new groups table enables habit organization. Synchronization capabilities are enhanced with a dedicated sync table and handlers that preserve unknown sync fields across round-trips, ensuring data consistency during WebDAV sync operations. The database helper now manages multiple migration paths (v2 through v7) to handle schema evolution, including adding columns for reasons, daily goal extras, and sync metadata.
lib/storage/db · high confidence
Debugger UI widgets adopt adaptive styling and platform-specific actions
The App Debugger interface now uses adaptive widgets to match the platform's native look and feel. The app bar displays a share action on Apple platforms while remaining minimal on Material platforms, and the info card dynamically switches its primary button label between 'Open' and 'Save' based on the target platform. Additionally, a new switch tile for collecting logs and a dedicated log card with download and clear actions have been introduced to enhance the debugging experience.
_lib/pages/app\_debugger/\widgets · high confidence
Demo scripts updated to reflect new habit model and moved to demo directory
The debug scripts for habit record calculations and auto-marking have been relocated from the test directory to the demo directory. These scripts now utilize the updated habit model, specifically importing the new \habit\_color\ module and initializing \HabitSummaryData\ with the new \color\ and \type\ fields instead of the legacy \colorType\. Additionally, generated records now include the \parentUUID\ field to align with the current data structure.
demo · high confidence
Enforced commit message standards with automated templates
The repository now enforces structured commit messages via a new \.githooks\ setup. The \commit-msg\ hook validates that messages follow the conventional format (e.g., \feat(scope): description\) or specific version-bump patterns, rejecting non-compliant messages. Additionally, the \prepare-commit-msg\ hook automatically injects context-specific templates (default, bugfix, or bumpversion) based on the commit type or changes to \pubspec.yaml\, streamlining the creation of valid commit messages.
.githooks · high confidence
Gradle wrapper upgraded to version 8.14.3 with enhanced integrity checks
The Android build system now uses Gradle 8.14.3 instead of 7.5, introducing a SHA-256 checksum verification for the distribution archive and a network timeout setting to improve build reliability and security. This upgrade ensures that the Gradle binary is validated before execution, reducing the risk of corrupted or tampered downloads during the build process.
android/gradle · high confidence
Group management page logic and sorting implementation
The Group management page now includes a dedicated ViewModel that handles group data loading, selection state, and undo capabilities. Users can sort groups using a new native natural sort algorithm (via the native\_natural\_sort package) which respects locale settings, with session-level overrides falling back to global profile settings. The page subscribes to application events to automatically reload data when groups are modified, ensuring the UI stays synchronized with underlying changes.
_lib/pages/group\_manage/\providers · high confidence
Habit Status Changer page restructured with new provider and layout architecture
The Habits Status Changer page has been reorganized to improve code structure and maintainability. The view logic is now handled by a dedicated \HabitStatusChangerViewModel\ that manages state and interacts with the \AppEventBus\ for cross-view synchronization. The UI layer has been split into a \PageScaffold\ that supports a split-screen layout on wider screens, and a set of focused widgets for date picking, status selection, and confirmation dialogs. Provider wiring is centralized in \PageProviders\ to inject the view model and its dependencies cleanly.
_lib/pages/habits\_status\changer · high confidence
Habit detail page adopts adaptive Material and Apple UI styles with custom color support
The habit detail page now renders distinct Material and Apple-style interfaces based on the user's system theme, including a new adaptive app bar, action menus, and floating action button. This update introduces support for custom habit colors, which are now applied to UI elements like the app bar title, FAB, and progress indicators. Additionally, the layout has been reorganized into a new widget directory, and the frequency chart now enforces left-to-right text direction to ensure compatibility with the underlying charting library.
_lib/pages/habit\_detail/\widgets · high confidence
Habit detail page restructured with new provider architecture and adaptive UI support
The habit detail page has been reorganized into a modular structure, introducing a dedicated provider layer (providers.dart) that manages state for the main detail view, frequency chart, and score chart using the Provider package. The page now integrates with the mhabit\_adaptive\_ui package to support adaptive layouts and shell-based navigation animations, ensuring the bottom bar and floating action button sync with the app shell. This change also consolidates event handling and data loading logic, improving how the page responds to app events and window size changes.
_lib/pages/habit\detail · high confidence
Habit detail view logic restructured into dedicated chart providers
The habit detail page's state management has been refactored to separate concerns: the main \HabitDetailViewModel\ now handles core habit data and event publishing, while new \HabitDetailFreqChartViewModel\ and \HabitDetailScoreChartViewModel\ providers manage the frequency and score chart data, scrolling offsets, and date range calculations independently. This change improves the modularity of the habit detail view, allowing chart-specific logic like scroll direction caching and data filtering to be isolated from the main view model.
_lib/pages/habit\_detail/\providers · high confidence
Habit display UI components removed
The habit display view layer has been refactored by deleting several UI components: the edit-mode and view-mode app bars, the floating action button, the main menu dialog, and the sort type picker dialog. This removes the previous UI implementation for managing habit display settings, sorting, and filtering within this specific view area.
_lib/view/for\_habit\display · high confidence
Habit display options and grouping controls are now adaptive
The habits display page now uses a unified, platform-aware action system for managing sort, group, filter, and theme settings. These controls are presented via native-style adaptive menus (Material or Cupertino) that automatically adjust their layout and placement based on the current device style and screen width. Additionally, batch group modification has been enhanced with a dedicated selector dialog and a confirmation step that clearly summarizes the changes (adding, moving, or removing habits from groups) before applying them.
_lib/pages/habits\_display/\widgets · high confidence
Habit editing UI reorganized with adaptive layout and custom color support
The habit editing interface has been restructured into a dedicated widget library under \lib/pages/habit\_edit/\_widgets\, introducing several user-facing improvements. A new custom color picker allows users to select specific colors and tinting options for habits, with the picker dialog adapting its layout to screen width. The app bar now uses an adaptive component that supports inline editing and integrates with the new action placement system. Group selection has been upgraded to an inline searchable menu on larger screens and an overlay on smaller ones. Daily goal input tiles now display context-aware hint text based on whether the habit is positive or negative. Additionally, the entire editing page layout has been refactored to use adaptive window size classes, ensuring consistent spacing and layout across phones, tablets, and desktops.
_lib/pages/habit\_edit/\widgets · high confidence
Habit editing interface restructured with new provider architecture
The habit editing experience has been reorganized into a dedicated \lib/pages/habit\_edit\ module, introducing a new \HabitEditPage\ widget and a \PageProviders\ layer that wires up the \HabitFormViewModel\ with group management, sync workflows, and event buses. This change consolidates the editing logic, enabling features like custom habit colors, grouping, and flexible frequency/target-day selection through a unified form interface, while moving styling and shared widgets into a cleaner directory structure.
_lib/pages/habit\edit · high confidence
Habit grouping and sorting logic restructured into dedicated providers
The habits display logic has been reorganized into new provider files to support habit grouping and advanced sorting. The \HabitGroupModifyViewModel\ now manages the batch-modify dialog, including group selection and change confirmation. A new \HabitGroupSorter\ and \HabitsGroupingViewModel\ handle group-based display modes and natural/manual sort orders. The main \HabitSummaryViewModel\ and \HabitsTodayViewModel\ have been updated to use these new sorting and grouping capabilities, and a shared \HabitsDisplayReloadBridge\ now centralizes sync and event subscription management for these views.
_lib/pages/habits\_display/\providers · high confidence
Habits display page restructured into a dedicated branch with adaptive UI support
The habits display logic has been reorganized into a new \lib/pages/habits\_display\ directory, introducing a dedicated branch root (\HabitsPage\) that manages the tab's floating action button, back-gesture interception, and dismiss intents. This change integrates the \mhabit\_adaptive\_ui\ package to support Material and Apple adaptive styles, including a new Material-specific FAB that dynamically switches between creating a habit and managing selected habits. The update also adds a \TodayPage\ with its own provider scope and sync handling, a \HabitDisplayNavigationChrome\ interface for shell-level navigation commands, and keyboard shortcuts (Escape to dismiss).
_lib/pages/habits\display · high confidence
Introduce AppRootView with GoRouter support and adaptive layout
The app root entry point now uses a new AppRootView widget that supports both standard navigation and GoRouter-based routing, allowing for more flexible navigation patterns. It wraps the application in an AdaptiveWindowControlLayout to handle platform-specific window controls (such as avoiding iPad window controls) and ensures rectangular iPhone margins are respected. Additionally, the root view integrates an UnfocusOnTap wrapper to improve keyboard and focus management, and applies animation disable settings globally.
lib/entries/common · high confidence
Introduce iOS 26 double-tap fix and new widget infrastructure
This update adds a custom Flutter binding (FixedIos26FlutterBinding) to resolve a double-tap issue at the top edge of the screen on iPadOS 26, ensuring touch interactions behave correctly. It also introduces a new AppBarActionBudget class for estimating app-bar action space, reorganizes the widget library by renaming the component folder to widgets, and exports updated helper utilities and styles.
lib/widgets · high confidence
Migrate navigation to go\_router with adaptive route handling
The app's navigation system has been migrated to go\_router, introducing a shell-based tab navigation model for the primary 'Habits' and 'Today' branches. This update includes custom route classes (AppFlowPage, AppMaterialPage) that enable conditional page transitions and fix predictive back behavior when routes are covered by ancestor navigators. A new AppNavigationCoordinator manages the synchronization between the tab shell and the app-flow navigator, while strongly-typed route helpers provide type-safe navigation for habit creation, editing, and status changes.
lib/routes · high confidence
New habit form view model with group management and event-driven updates
The habit edit page now uses a dedicated \HabitFormViewModel\ provider to manage form state, replacing previous wiring. This provider handles loading and tracking habit groups (including creating new groups and listening for group changes via \AppEventBus\), manages sync triggers, and pushes specific events when a habit is created or updated. It also exposes group selection state to the UI and handles reminder permission requests.
_lib/pages/habit\_edit/\providers · high confidence
Refactor internal code structure and add data integrity safeguards
This update reorganizes the \lib/common\ directory to improve code maintainability and introduces safeguards for data consistency. JSON serialization logic has been consolidated into \lib/annotations/\_json\_converters\, and the legacy \lib/common/logging.dart\ has been removed in favor of a new logging hierarchy. A new \SortGuard\ mechanism in \sort\_generation.dart\ prevents race conditions where stale sort results could overwrite fresh data during reloads. Additionally, \AppInfo\ now detects rectangular-screen iPhones to ensure correct UI margins, and the database version has been bumped to 8 to support new grouping and sync features.
lib/common · high confidence
Refactored theme system with improved Linux font handling and dark mode surfaces
The theme logic has been reorganized into a dedicated \AppThemeBuilder\ class to centralize light, dark, and elevated dark theme construction, ensuring consistent application of dynamic colors and Material 3 settings. On Linux, the app now explicitly registers the bundled Noto Sans CJK font via a new \linux\_bundled\_font.dart\ utility to guarantee deterministic typography in Flatpak environments. Additionally, dark mode navigation surfaces have been refined to use specific elevated background colors on iOS, and the color module exports have been updated to reflect the new file structure.
lib/theme · high confidence
Regenerated icon font definitions with updated identifiers and assets
The icon definition files in lib/theme/\_icons have been regenerated using the icon\_font\_generator tool. This update changes the internal structure of the generated Dart classes (HabitCalIcons, CommonIcons, HabitProgressIcons, HabitSortIcons) by replacing the previous private helper classes with direct IconData constants and a shared iconFontFamily constant. Consequently, the static icon identifiers have been renamed (e.g., from calendar\_create to calendarcreate) and their Unicode code points have been reassigned (e.g., from 0xf101 to 0xe000). The generated code now includes embedded SVG previews and explicit documentation comments for each icon, ensuring the font assets are correctly declared in pubspec.yaml.
_lib/theme/\icons · high confidence
Removal of legacy view and component architecture
The application has removed the legacy view layer and its associated component library. This includes the deletion of the main application entry point (\lib/view/app.dart\), the primary habit display page (\lib/view/page\_habits\_display.dart\), the habit detail page (\lib/view/page\_habit\_detail.dart\), the habit edit page (\lib/view/page\_habit\_edit.dart\), and the app settings page (\lib/view/page\_app\_setting.dart\). Additionally, the centralized component export file (\lib/component/widget.dart\) and several specific habit-detail UI components (such as the detail app bar, popup menu, and color mixins) have been removed, indicating a structural shift in how the user interface is organized and rendered.
lib/view · high confidence
Reorganized extension utilities and added adaptive, sorting, and color helpers
The \lib/extensions\ directory has been restructured, moving existing files from \lib/extension\ to \lib/extensions\ and introducing several new extension utilities. New capabilities include \AppAdaptiveStyle\ for platform-specific toolbar heights, \NaturalSortExtension\ for native natural-language collation sorting, and \HabitColorExtension\ for resolving custom habit colors with caching and visibility adjustments. Additional helpers were added for loading changelog assets, managing habit group sorting and icons, handling navigator pop-or-exit logic, creating Android notification channels, scaling text sizes, and parsing WebDAV resources. Existing extensions were also updated, such as \ColorHex\ using \toARGB32()\ and \NumExtension\ gaining a \toSimpleString\ method.
lib/extensions · high confidence
Reorganized storage provider architecture with new initialization builders
The storage layer has been restructured to use dedicated provider and builder widgets for managing asynchronous initialization. New \DBHelperBuilder\ and \ProfileBuilder\ widgets now handle the setup of \DBHelperViewModel\ and \ProfileViewModel\ respectively, wrapping their creation in \ChangeNotifierProvider\ and managing loading/error states via \FutureBuilder\. This replaces previous initialization patterns with a more explicit, widget-based approach that ensures the database and profile data are fully initialized before the application content is built, improving reliability and error handling during startup.
lib/storage · high confidence
Replaced manual sync triggers with a centralized event bus and reorganized provider architecture
The workflow providers have been restructured to use a new \AppEventBus\ and \AppEventSubscriber\ system, replacing previous manual synchronization triggers. This change introduces a centralized event-driven architecture for coordinating app-wide state changes, including habit reminders, notification configurations, and sync workflows. The \AppSyncOwner\ now subscribes to events via \AppEventSubscriptions\ instead of relying on direct method calls, improving decoupling and lifecycle management. Additionally, notification handling has been consolidated into dedicated providers (\AppNotifyConfigOwner\, \AppReminderOwner\) that manage platform-specific configurations and reminder triggers through a unified interface.
lib/providers/workflow · high confidence
Replaces legacy navigation with adaptive shell and declarative chrome
The app entry point now uses a new \AppNavigationShell\ backed by \go\_router\ and the \mhabit\_adaptive\_ui\ package, providing a unified navigation experience across platforms. This change introduces declarative navigation chrome via \AppNavigationChromeController\, allowing the shell to present platform-specific UI elements (such as the primary action button on Apple platforms) and auxiliary destinations (like theme mode controls) without hardcoding them. The shell manages branch selection between the Habits and Today views, persists the user's last active tab via \AppLaunchEntryViewModel\, and handles back-navigation behavior through \NavigatorPopHandler\. Supporting files define the navigation destinations with platform-aware icons and wire up the necessary providers for the new architecture.
lib/entries/app · high confidence
Snackbar helpers migrated to standalone functions with explicit dismissal behavior
The snackbar utility functions have been moved from the BuildWidgetHelper singleton in lib/component/helper.dart to standalone functions in lib/widgets/\_helpers/snackbar\_helper.dart. This change updates the API to accept explicit duration parameters and, crucially, adds a persist: false flag to dismiss snackbars to ensure they auto-dismiss after the specified duration, addressing a Flutter 3.38+ breaking change where snackbars with actions no longer auto-dismiss by default.
_lib/widgets/\helpers · high confidence
UI settings providers migrated to profile-based storage
The \lib/providers/app\_ui\ directory has been reorganized to centralize UI configuration management. All providers in this location—including those for theme, language, sort order, scroll behavior, and compact UI—now use \ProfileHandlerLoadedMixin\ to persist settings to the user profile instead of the legacy global state. This change ensures that UI preferences are tied to the user's profile and are no longer dependent on the global \Global\ object. Additionally, new providers have been introduced to manage app caches, custom color history, habit operation configurations, and group expand timers, while the developer settings provider has been updated to support adaptive style overrides.
_lib/providers/app\ui · high confidence
iOS app migration to modern scene lifecycle and native splash screen
The iOS app has been updated to support modern iOS scene management by introducing a SceneDelegate and configuring the Info.plist to use UIWindowScene, replacing the legacy single-window lifecycle. This change also enables a native launch splash screen by adding a background image layer to the LaunchScreen storyboard and updating the launch image resolution. Additionally, the app now declares support for indirect input events (e.g., trackpad and mouse on iPad) and explicitly registers the encryption usage as non-exempt in the Info.plist.
ios/Runner · high confidence
iOS build configuration simplified by removing CocoaPods dependencies
The iOS build configuration has been streamlined by removing the explicit dependency on CocoaPods. The minimum iOS deployment target has been removed from AppFrameworkInfo.plist, and the Debug and Release xcconfig files no longer include Pods-specific configuration files. Additionally, the Xcode workspace has been updated to remove the reference to the Pods project, indicating a shift away from using CocoaPods for dependency management in the iOS build process.
ios/Flutter · high confidence
iOS build schemes updated for Flutter framework preparation and GPU validation
The Xcode build schemes for the iOS app have been updated to include a pre-action script that prepares the Flutter framework before building, ensuring the environment is correctly set up for compilation. Additionally, the main Runner scheme has been upgraded to Xcode version 15.10 and now enables GPU validation mode during debugging, which helps developers catch graphics-related issues early in the development cycle.
ios/Runner.xcodeproj/xcshareddata · high confidence
iOS project migrates to Swift Package Manager and adds multi-flavor localization support
The iOS build configuration has been updated to replace the CocoaPods dependency manager with the Swift Package Manager, evidenced by the removal of Pods-related build phases and frameworks and the addition of the FlutterGeneratedPluginSwiftPackage. Additionally, the project now supports multiple build flavors (dev and generic) by introducing separate Info.plist files and organizing localized string resources into a dedicated Localizations group, enabling distinct configuration and translation sets for different app variants.
ios/Runner.xcodeproj · high confidence
macOS app bundle display names localized for dev, generic, and store builds
The macOS application now displays localized app names in the Finder and system UI, varying by build scheme. Dev builds show "Table Habit (Dev)" (or the localized equivalent like "桌上习惯 开发版" for Simplified Chinese), while generic and store builds show the standard localized name (e.g., "Table Habit" or "桌上习惯"). This change adds or updates \InfoPlist.strings\ files across multiple languages (including Arabic, Czech, German, Spanish, Basque, French, Hebrew, Hungarian, Italian, Japanese, Norwegian, Dutch, Polish, Portuguese, Russian, Turkish, Ukrainian, Vietnamese, and Chinese variants) to ensure the correct display name appears for each build type.
macos/Localizations · high confidence
macOS installer configuration and code-signing options added
The installer build process now includes specific configuration for creating a macOS DMG and exporting the app for distribution. A new config file defines the DMG layout, including the application icon, window dimensions, and file placement (linking to /Applications and including the built app). Additionally, a plist file is added to configure GitHub export options, specifying the distribution method as 'developer-id' and allowing the team ID to be injected via an environment variable, which supports the code-signing requirements for the macOS application.
installers · high confidence
Fixes
New changelog dialog with robust version matching
The app now displays an adaptive changelog view (sheet on compact screens, dialog on larger ones) that correctly identifies the current version's release notes. This update fixes a previous issue where pre-release suffixes (e.g., \-pre\, \-dev\) in version strings caused the changelog to fail to load; the new parser now strips these suffixes to find the correct section, ensuring users always see the relevant update details.
_lib/pages/app\changelog · high confidence
Test coverage
Added comprehensive unit tests for the habits display page; Added placeholder test files for iOS and macOS platforms; Added smoke tests for app entry initialization and test configuration; Added smoke tests for the App Settings page; Added unit tests for navigation chrome and app shell; Added unit tests for the Habit Detail page; Added widget test for error handling in HabitsStatusChangerPage; Expanded unit test coverage for core app components and utilities; Removed habit form viewmodel tests; Removed outdated profile model tests.
Dependencies
Migrate to Flutter 3.44 workspace and upgrade Android build tooling
The project has been upgraded to Flutter 3.44 (SDK \>=3.12.0) and migrated to a Dart workspace structure, introducing new internal packages for adaptive UI, color generation, and proxy building. On Android, the build system has been modernized to use the Flutter Gradle Plugin with AGP 8.13.2 and Kotlin 2.3.20, raising the minimum Java/Kotlin compatibility to version 17. The app ID has been updated to io.github.friesi23.mhabit, and new build flavors (f\_generic, f\_dev, f\_store) have been added to support different distribution channels. Additionally, CocoaPods integration for iOS has been removed in favor of native Flutter tooling.
(dependencies) · 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 73.
Lenses
- Code Health 88
- Architecture 98
- Maturity 75
- Readiness 69
- Security 68
- Domain Modelling 100
Changes since last survey
- 300 commits — 259 feature/other, 41 fixes
By area
- (root) — 75 commits
- assets/l10n — 64 commits
- (repo) — 28 commits
- .github/workflows — 21 commits
- lib/pages — 20 commits
- packages/mhabit_adaptive_ui — 17 commits
- android/app — 12 commits
- lib/l10n — 7 commits
- test/unit — 6 commits
- docs/wiki — 4 commits
- ios/fastlane — 4 commits
- .github/dependabot.yml — 3 commits
- .github/scripts — 3 commits
- configs/contributors.json — 3 commits
- scripts/python-scripts — 3 commits
- lib/entries — 2 commits
- lib/providers — 2 commits
- lib/storage — 2 commits
- lib/theme — 2 commits
- lib/widgets — 2 commits
Notable commits
- fix: Fix: reload stuck (#470)
- fix: Revert "feat(adaptive-ui): move settings into app flow"
- fix: Revert "feat: update translation files" (reason: low translation quality)
- fix: Revert "fix(ci): correct artifact path for android unit test results"
- fix: Revert "fix: build command"
- fix: fix(actions): improve patching of JNI CMake files (#547)
- fix: fix(adaptive-ui): improve dark navigation surfaces
- fix: fix(adaptive-ui): refine dark navigation chrome
- fix: fix(adaptive-ui): restore rectangular iPhone margins
- fix: fix(android): preserve back handling across root dialogs
- fix: fix(ci): correct artifact path for android unit test results
- fix: fix(ci): fix retention days handling in build workflow
- fix: fix(ci): set Microsoft Store upload timeout
- fix: fix(ci): switch PR Test Build status to commit status instead of check run
- fix: fix(commit-msg): add regex check for standard git commit messages
- fix: fix(habits): preserve scroll position after detail navigation
- fix: fix(habits-today): clear expand status after record state change (#492)
- fix: fix(ui): align modal routes and selection notifications (#656)
- fix: fix: add a force-refresh flag
- fix: fix: auto build command
- …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
FriesI23/mhabit 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 25330c93ed1a3b3a38ebdcd11c9cd23bfd099adf — 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.