skills/desquared/agents-rules-skills/flutter-bug-investigation

flutter-bug-investigation

SKILL.md

Bug Solving Skill (Flutter)

Foundation: Extends shared-bug-investigation with Flutter patterns.

Flutter Context

flutter --version && grep "sdk:" pubspec.yaml
grep -r "BlocProvider\|ChangeNotifier\|GetX" lib/  # State management

RCA: Check All Layers (data/domain/view)

# View Layer: Bloc/Cubit, widgets, state
find lib/feature/<feature>/view -name "*.dart"

# Domain Layer: Models, repository interfaces, business logic
find lib/feature/<feature>/domain -name "*.dart"

# Data Layer: DTOs, datasources, API calls
find lib/feature/<feature>/data -name "*.dart"

Debug by layer: View (Bloc emits?) → Domain (model mapping?) → Data (DTO parsing?)

Common Bug Patterns

Bloc State

// ❌ Missing emit → ✅ Add emit(LoadingState()), emit(LoadedState(data)), emit(ErrorState())

Null Safety

// ❌ user!.name → ✅ user?.name ?? 'Guest'

BuildContext After Async

// ❌ Navigator.pop(context) after await → ✅ if (!mounted) return; Navigator.pop(context);

GetIt DI

// ❌ Not registered → ✅ Add @injectable, run build_runner

Method Channels

// ❌ Wrong name → ✅ Match iOS/Android channel name

Widget Rebuilds

// ❌ BlocBuilder wraps Scaffold → ✅ Wrap only body

Memory Leaks

// ❌ Stream not closed → ✅ Override close(), call super.close()

Error Quick Reference

Error Fix
type 'Null' is not a subtype Add ?? defaults
Looking up deactivated widget Check mounted
Object not registered Add @injectable, run build_runner
MissingPluginException Implement native iOS/Android
setState() after dispose() Cancel timers/streams
RenderBox overflow Fix constraints

Tools

flutter analyze              # Must pass (0 errors)
flutter test                 # All tests
flutter run --profile        # Performance

Validation

  • flutter analyze = 0 errors
  • flutter test passes
  • Manual test fixed
  • Tested iOS + Android (if platform-specific)
Weekly Installs
3
GitHub Stars
2
First Seen
3 days ago
Installed on
mcpjam3
claude-code3
replit3
junie3
windsurf3
zencoder3