Idiomatic Flutter
Priority: P1 (OPERATIONAL)
- Async Gaps: Check
if (context.mounted)before usingBuildContextafterawait. - Composition: Extract complex UI into small widgets. Avoid deep nesting or large helper methods.
- Layout:
- Spacing: Prefer
spacingparameter onRow/Column(Flutter 3.10+) over insertingSizedBox/Gapbetween children. - Fallback: Use
Gap(n)orSizedBoxonly whenspacingcannot express the layout (e.g., conditional gaps). - Empty UI: Use
const SizedBox.shrink(). - Intrinsic: Avoid
IntrinsicWidth/Height; useStack+FractionallySizedBoxfor overlays. - Spacing: Use
Gap(n)orSizedBoxoverPaddingfor simple gaps. - Optimization: Use
ColoredBox/Padding/DecoratedBoxinstead ofContainerwhen possible. - Themes: Use extensions for
Theme.of(context)access.
- Spacing: Prefer
Anti-Patterns
- No BuildContext after await without mounted check: Check
context.mountedto prevent crashes across async gaps. - No _buildXxx() helper methods: Extract to
const StatelessWidgetfor proper rebuild control. - No direct controller access in widget: Use BLoC or Signals to decouple UI from state.
- No Container for empty space: Use
const SizedBox.shrink().