1. Performance & Rendering
- Const-First: Every widget that can be
constMUST beconst. - Lazy Rendering: Use
SliverList.builderorSliverGrid.builderfor lists > 10 items. - Repaint Boundaries: Wrap complex animations in
RepaintBoundary. - Isolate Parsing: Use
compute()orIsolatefor JSON > 1MB. - BuildContext Safety: Check
mountedbefore usingcontextacross async gaps.
2. Design Tokens (Theming)
Use AppColors, AppSpacing, AppRadius, and AppTypography. NEVER hardcode raw values.
- Colors: Use
context.colorScheme.primaryorAppColors. Support light/dark modes. - Spacing: Use
AppSpacing.sm(8),AppSpacing.md(16), etc. UseSizedBoxfor gaps. - Radius: Use
AppRadius.md(12) for consistent rounding. - Typography: Use
context.textTheme.bodyMedium. Support text scaling.
3. Reusable Components
- Single Responsibility: Each component has one clear purpose.
- Parameterization: Expose parameters for customization.
- Complexity: Extract widgets or code blocks used multiple times into
core/views/widgets. - Keys: Assign
Key('feature_action_id')to interactive widgets for test access.
4. Widget & Interaction Patterns
- Extraction: STRICTLY prohibit private
_build*()methods. Extract into separate widget classes. - Slivers: Prefer
CustomScrollViewwith Slivers for non-trivial scrollable layouts. - FAB: Use Floating Action Buttons for primary positive actions (Add, Create).
- Scroll Padding: Add dynamic bottom padding when a FAB or BottomBar is present to prevent overlap.
- Sheets vs Screens: Prefer full
Scaffoldscreens overModalBottomSheetfor complex forms.
5. Adaptive & Responsive Design
- Mobile First: Design for mobile, then adapt for tablet (
600-840) and desktop (>840). - Measure & Branch: Use
MediaQuery.sizeOf(context)for layout decisions;LayoutBuilderfor widget constraints. - Rules: Never lock orientation. Support keyboard navigation and hover effects.
6. UI States & Accessibility
- States: Always handle Loading, Error, and Empty states with clear messaging.
- Accessibility: Include
Semanticslabels. Ensure 48x48 dp touch targets. WCAG AA contrast.