Skip to content

✨ Theme System Overhaul with Light/Dark/System toggle and Theme-Aware Map Tiles (v2.1.0)#6

Merged
MasuRii merged 7 commits intomainfrom
feature/theme-system-and-map-theming
Dec 15, 2025
Merged

✨ Theme System Overhaul with Light/Dark/System toggle and Theme-Aware Map Tiles (v2.1.0)#6
MasuRii merged 7 commits intomainfrom
feature/theme-system-and-map-theming

Conversation

@MasuRii
Copy link
Member

@MasuRii MasuRii commented Dec 15, 2025

📝 Summary

Complete theme system overhaul introducing Light/Dark/System mode toggle, theme-aware map tiles that adapt to the current theme using CartoDB Voyager with smart color inversion, and a comprehensive UI refresh with the new "Archipelago Blue" design language. This release also achieves 100% WCAG AA+ accessibility compliance across all screens.

✨ Changes

🎨 Theme System

  • 🌞 Default Light Theme: New users now start with Light Mode instead of System theme
  • 🌓 Theme Toggle: Light/Dark/System mode selection in Settings
  • 🎨 Archipelago Blue: New unique theme (teal #006064 + orange #FF6F00)
  • 🌙 M3 Dark Theme: Material Design 3 compliant dark mode (#141218 background)

🗺️ Theme-Aware Map Tiles

  • 🌐 CartoDB Voyager: High-detail, free, no API key required (zoom 0-20)
  • 🔄 Smart Inversion: Uses ColorFilter.matrix to invert light tiles for dark mode
  • 🎯 Excellent Visibility: Both modes maintain full readability and detail
  • 📍 Increased map preview size by 40% (200px → 280px)

♿ Accessibility (WCAG 2.1 AA+)

  • 🎯 100% contrast compliance (49/49 checks passed)
  • 🎨 Theme-aware semantic colors via TransitColors extension
  • 🔍 Fixed 38 hardcoded color issues causing invisible text in dark mode
  • 🛠️ Created WCAG contrast checker tool for ongoing compliance

🖼️ Branding & UI

  • 🚌 New reusable AppLogoWidget (small/medium/large sizes)
  • 📱 Custom Android launcher icons with PH Fare Calculator logo
  • 🔗 Added GitHub repository link in Settings > About
  • 📐 Fixed route indicator alignment and swap button centering

📦 Version Bump

  • 📌 Version: 2.0.0+22.1.0+3
  • 📄 Updated README.md version badge

📁 Files Changed

Area Files Impact
Theme app_theme.dart, transit_colors.dart Core theming infrastructure
Map offline_map_service.dart, map_selection_widget.dart, map_picker_screen.dart Theme-aware tiles
Settings settings_service.dart, settings_screen.dart Theme toggle, default value
UI All presentation screens Dark mode color fixes
Assets mipmap-**/ic_launcher.png, PHFareCalculatorLogo/ Branding
Docs theme_specification.md, research docs Design documentation
Tests settings_service_test.dart Updated for new defaults

🧪 Testing Instructions

  1. flutter clean && flutter pub get
  2. flutter pub run build_runner build --delete-conflicting-outputs
  3. flutter test - All 289 tests should pass
  4. Run app and verify:
    • First launch defaults to Light theme
    • Switch to Dark mode in Settings → Appearance
    • Map tiles should invert colors (readable dark map)
    • All text remains visible in both modes

✅ Verification Status

  • ✅ All 289 tests pass
  • ✅ No analyzer warnings/errors
  • ✅ WCAG 2.1 AA+ compliance (49/49 contrast checks)
  • ✅ No API keys required for map tiles

📋 Checklist

  • Tests pass locally (flutter test)
  • Analyzer passes (dart analyze --fatal-infos --fatal-warnings)
  • Code formatted (dart format .)
  • Documentation updated (README, docs/)
  • No sensitive data exposed
  • Version bumped appropriately (2.1.0)

📝 Summary:
Complete visual overhaul with consistent branding, proper theming, and UX fixes.

🔧 Changes:
- ✨ Create reusable AppLogoWidget (small/medium/large sizes)
- 🎨 Add bus logo to main screen app bar and onboarding
- 🌓 Replace high contrast mode with Light/Dark/System theme toggle
- 🔄 Add dynamic versioning via package_info_plus
- 🔗 Add GitHub repository link in Settings > About
- 🧭 Fix Reference Guide navigation (back button + scrollable tabs)
- 📐 Fix origin-destination route indicator alignment
- 📦 Add flutter_launcher_icons configuration
- 🚦 Add 28 new widget tests for AppLogoWidget (total: 289 tests)

📁 New Files:
- lib/src/presentation/widgets/app_logo_widget.dart
- test/widgets/app_logo_widget_test.dart
- assets/icons/README.md
📝 Summary:
Complete overhaul of visual improvements including 5 bug fixes,
Material Design 3 standard dark theme, and 100% WCAG AA accessibility.

🔧 Changes:
- Fix Discount Guide navigation with initialTabIndex parameter
- Fix route indicator alignment using explicit dimensions (48px fields)
- Fix swap button centering between origin/destination
- Implement M3 standard dark theme (#141218 background, pastel accents)
- Fix layout shifting between themes by matching structural properties
- Add TransitColors ThemeExtension for theme-aware transit line colors
- Create WCAG contrast checker tool and achieve 100% compliance

📁 New Files:
- lib/src/core/theme/transit_colors.dart (theme extension)
- tool/wcag_contrast_checker.dart (accessibility audit tool)
- docs/accessibility_audit.md (WCAG compliance report)
- docs/analysis_ui_fixes.md (issue analysis)
- docs/research/m3_standard_colors.md (M3 color specs)
- docs/research/theme_research.md (theme guidelines)

✅ Verification:
- All 289 tests pass
- No analyzer issues
- 49/49 WCAG contrast checks pass
📝 Summary:
Complete dark mode compatibility overhaul across all presentation screens.
Fixed 38 initial + 3 additional dark mode color issues where hardcoded
colors caused invisible text in dark mode. Resolved all 54 analyzer problems.
WCAG 2.1 accessibility compliance verified at 100% (49/49 checks passed).

🔧 Changes:
- Extended TransitColors theme extension with 10 new semantic colors
- Fixed Discount Guide badge text visibility with theme-aware pastel colors
- Fixed Train line header text contrast using luminance-based calculation
- Fixed Settings screen toggle buttons and traffic factor icon colors
- Replaced hardcoded Colors.green, Color(0xFF...) with theme colors
- Added ignore_for_file directives to resolve 54 avoid_print warnings

📁 Files Modified:
- lib/src/core/theme/transit_colors.dart (theme extension)
- lib/src/presentation/screens/reference_screen.dart
- lib/src/presentation/screens/settings_screen.dart
- lib/src/presentation/screens/offline_menu_screen.dart
- lib/src/presentation/screens/onboarding_screen.dart
- lib/src/presentation/screens/region_download_screen.dart
- lib/src/presentation/screens/map_picker_screen.dart
- lib/src/presentation/screens/splash_screen.dart
- lib/src/presentation/widgets/fare_result_card.dart
- lib/src/presentation/widgets/map_selection_widget.dart
- lib/src/presentation/widgets/app_logo_widget.dart
- tool/wcag_contrast_checker.dart
- docs/research/tool_extract_m3_colors.dart

✅ Verification:
- All 289 tests pass
- No analyzer issues
- WCAG contrast checker: 49/49 passed
📝 Summary:
Major visual improvements including unique theme colors, fixed icons, custom
launcher icons, in-app logo integration, and improved map UX. All 289 tests
pass with full WCAG AA+ accessibility compliance.

🔧 Changes:
- 🎨 Implement "Archipelago Blue" theme (teal #006064 + orange #FF6F00)
- 🐛 Fix onboarding icons by adding explicit container colors
- 🖼️ Replace Android launcher icons with custom PH Fare Calculator logo
- 🏠 Add app logo to Settings screen About section
- 🗺️ Increase initial map preview size by 40% (200px → 280px)
- 📚 Add comprehensive color theme research documentation
- 📋 Create theme specification design document

📁 Files Changed:
- lib/src/core/theme/app_theme.dart (theme colors)
- lib/src/presentation/screens/main_screen.dart (map sizing)
- lib/src/presentation/screens/settings_screen.dart (logo integration)
- android/app/src/main/res/mipmap-*/ic_launcher.png (5 density sizes)
- assets/icons/PHFareCalculatorLogo/ (logo assets)
- docs/design/theme_specification.md (design spec)
- docs/research/color_theme_research_2024_2025.md (research)

✅ Verification:
- All 289 tests pass
- No analyzer issues
- WCAG AA+ accessibility compliant
📝 Summary:
Changes default theme from "System" to "Light Mode" for first-time users.
Implements theme-aware map tiles that automatically switch appearance based
on the current app theme using CartoDB Voyager with color inversion for dark mode.

🔧 Changes:
- 🌞 Set default theme to Light Mode (was System)
- 🗺️ Add theme-aware map tiles with inverted Voyager for dark mode
- 🎨 Implement ColorFiltered widget to invert light tiles in dark theme
- 📚 Add comprehensive CartoDB basemap research documentation
- ✅ Update tests for new default theme setting

📁 Files Changed:
- lib/main.dart (default theme fallback)
- lib/src/services/settings_service.dart (default theme value)
- lib/src/services/offline/offline_map_service.dart (inverted Voyager tiles)
- lib/src/presentation/widgets/map_selection_widget.dart (dark mode filter)
- lib/src/presentation/screens/map_picker_screen.dart (dark mode filter)
- test/services/settings_service_test.dart (test expectations)
- docs/research/cartodb_basemap_dark_mode_visibility.md (new research doc)

✅ Verification: All 289 tests pass, no analyzer issues
📝 Summary:
Version bump reflecting 5 new feature commits since v2.0.0:

🔧 Changes:
- Updated version from 2.0.0+2 to 2.1.0+3 in pubspec.yaml
- Updated version badge in README.md

✨ Features included in 2.1.0:
- Default Light theme instead of System
- Theme-aware map tiles (CartoDB Voyager with inverted colors for dark mode)
- Complete UI overhaul with Archipelago Blue theme
- Dark mode color fixes with WCAG compliance
- M3 theme fixes and visual improvements
- Custom app branding and launcher icons
@MasuRii MasuRii merged commit a1b4b27 into main Dec 15, 2025
8 checks passed
@MasuRii MasuRii deleted the feature/theme-system-and-map-theming branch March 16, 2026 01:21
MasuRii added a commit that referenced this pull request Mar 16, 2026
…-and-map-theming

Theme System Overhaul with Light/Dark/System toggle and Theme-Aware Map Tiles (v2.1.0)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant