界面已本地化;技能介绍与说明文档按所选语言由 AI 自动翻译,代码、命令、路径和专业术语保留原文,以原作者文档为准。
探索技能
开发与工程 · SKILL.md

flutter-idiomatic-flutter

flutter-idiomatic-flutter

【开发与工程】Compose modern Flutter layouts and widgets idiomatically. Use for widget trees, layout constraints, mounted safety, and UI composition—not BLoC state management, routing, dependency injection, or tests.

独立 GitHub 快照 · 自动分类 · 以原作者文档为准

技能说明

GitHub

name: flutter-idiomatic-flutter description: Compose modern Flutter layouts and widgets idiomatically. Use for widget trees, layout constraints, mounted safety, and UI composition—not BLoC state management, routing, dependency injection, or tests. metadata: triggers: files: - 'lib/presentation/**/*.dart' - 'context.mounted' keywords: - SizedBox - Gap - composition - shrink

Idiomatic Flutter

Priority: P1 (HIGH)

  • Async Gaps: Check if (context.mounted) before using BuildContext after await.
  • Composition: Extract complex UI into small widgets. Avoid deep nesting or large helper methods.
  • Layout:
    • Spacing: Prefer spacing parameter on Row/Column (Flutter 3.27+) over inserting SizedBox/Gap between children. On earlier Flutter versions, use Gap(n) instead — spacing will not compile.
    • Fallback: Use Gap(n) or SizedBox only when spacing cannot express the layout (e.g., conditional gaps).
    • Empty UI: Use const SizedBox.shrink().
    • Intrinsic: Avoid IntrinsicWidth/Height; use Stack + FractionallySizedBox for overlays.
    • Spacing: Use Gap(n) or SizedBox over Padding for simple gaps.
    • Optimization: Use ColoredBox/Padding/DecoratedBox instead of Container when possible.
    • Themes: Use extensions for Theme.of(context) access.

Anti-Patterns

  • No BuildContext after await without mounted check: Check context.mounted to prevent crashes across async gaps.
  • No _buildXxx() helper methods: Extract to const StatelessWidget for proper rebuild control.
  • No direct controller access in widget: Use BLoC or Riverpod to decouple UI from state.
  • No Container for empty space: Use const SizedBox.shrink().
我的收藏