Overview
Wonderous uses a component-based architecture with reusable widgets organized by function. The UI layer is completely separated from business logic, delegating all decisions to logic classes.Screen Structure
Screen Organization
Screens are located inlib/ui/screens/ with a dedicated folder per screen:
Screen Pattern
Most screens follow this pattern:Layered Composition
Complex screens use layeredStack composition:
- Background: Non-interactive elements (gradients, images)
- Content: Main scrollable/interactive content
- Foreground: Overlays, decorations
- UI: Controls, buttons, headers
Common Widgets
Buttons
Location:lib/ui/common/controls/buttons.dart
AppBtn
The core button widget that all other buttons extend:- Automatic press effects
- Hover effects (web)
- Focus indicators
- Semantic labels
- Customizable padding, colors, borders
- Circular or rounded rectangle shapes
CircleIconBtn
Circular icon buttons:BackBtn
Standardized back button with automatic navigation:- Automatic pop behavior
- ESC key support
- Customizable icon
Headers
Location:lib/ui/common/controls/app_header.dart
- Title and subtitle support
- Back button (optional)
- Trailing widget slot
- Safe area handling
- Transparent or solid background
Images
Location:lib/ui/common/controls/app_image.dart
- Automatic error handling
- Loading indicators
- Scale and fit options
Page Indicators
Location:lib/ui/common/controls/app_page_indicator.dart
Loading Indicators
Location:lib/ui/common/controls/app_loading_indicator.dart
Wonder Illustrations
Location:lib/ui/wonder_illustrations/
WonderIllustration
Convenience wrapper that renders the appropriate illustration:WonderIllustrationConfig
Configuration for illustration rendering:Individual Illustrations
Each wonder has a dedicated illustration:ChichenItzaIllustrationChristRedeemerIllustrationColosseumIllustrationGreatWallIllustrationMachuPicchuIllustrationPetraIllustrationPyramidsGizaIllustrationTajMahalIllustration
WonderTitleText
Location:lib/ui/wonder_illustrations/common/wonder_title_text.dart
Stylized wonder title with automatic formatting:
AnimatedClouds
Location:lib/ui/wonder_illustrations/common/animated_clouds.dart
Animated cloud layer for wonder backgrounds:
Layout Helpers
Gradient Containers
Location:lib/ui/common/gradient_container.dart
Centered Box
Location:lib/ui/common/centered_box.dart
Blend Mask
Location:lib/ui/common/blend_mask.dart
Applies blend modes to child widgets:
Interaction Widgets
PreviousNextNavigation
Location:lib/ui/common/previous_next_navigation.dart
Keyboard navigation wrapper:
FullscreenKeyboardListener
Location:lib/ui/common/fullscreen_keyboard_listener.dart
Global keyboard event handling:
EightWaySwipeDetector
Location:lib/ui/common/controls/eight_way_swipe_detector.dart
Detects swipe gestures in 8 directions:
TrackpadListener
Location:lib/ui/common/controls/trackpad_listener.dart
Desktop trackpad gesture support:
Modals
Location:lib/ui/common/modals/
FullscreenUrlImgViewer
Image lightbox:FullscreenVideoViewer
YouTube video player:FullscreenMapsViewer
Google Maps integration:FullscreenWebView
In-app browser:Utilities
Themed Text
Location:lib/ui/common/themed_text.dart
Static Text Scale
Location:lib/ui/common/static_text_scale.dart
Prevent text from scaling with system settings:
App Haptics
Location:lib/ui/common/utils/app_haptics.dart
Common Patterns
Responsive Layouts
Conditional Animations
Semantic Labels
All interactive widgets include semantic labels:Style Access
Best Practices
- Composition over Inheritance: Build complex UI from simple, reusable widgets
- Separate Concerns: Keep business logic in logic classes, not widgets
- Semantic HTML: Always provide semantic labels for accessibility
- Responsive Design: Use
appLogic.shouldUseNavRail()and context sizing - Performance: Use
RepaintBoundaryfor complex animations - Theming: Access colors, sizes, and styles via
$styles - Localization: Use
$stringsfor all user-facing text - Null Safety: Handle null cases explicitly
Related Files
lib/ui/common/controls/buttons.dart- Button componentslib/ui/common/controls/app_header.dart- Header componentlib/ui/common/controls/circle_buttons.dart- Circular buttonslib/ui/wonder_illustrations/- Wonder illustration systemlib/ui/screens/- All screen implementationslib/common_libs.dart- Common importslib/styles/styles.dart- Theme and styling