GetX State Management
Priority: P0 (CRITICAL)
Structure
lib/app/modules/home/
├── controllers/
│ └── home_controller.dart
├── bindings/
│ └── home_binding.dart
└── views/
└── home_view.dart
Implementation Guidelines
- Controllers: Extend
GetxController. Store logic and state variables here. - Reactivity:
- Use
.obsfor observable variables (e.g.,final count = 0.obs;). - Wrap UI in
Obx(() => ...)to listen for changes. - For simple state, use
update()in controller andGetBuilderin UI. - Dependency Injection:
- Bindings: Use
Bindingsclass to decouple DI from UI. - Lazy Load: Prefer
Get.lazyPut(() => Controller())in Bindings. - Lifecycle: Let GetX handle disposal. Avoid
permanent: true. - Hooks: Use
onInit(),onReady(),onClose()instead ofinitState/dispose. - Architecture: Use
get_clifor modular MVVM (data, models, modules).
Anti-Patterns
- Ctx in Logic: Pass no
BuildContextto controllers. - Inline DI: Avoid
Get.put()in widgets; use Bindings +Get.find. - Fat Views: Keep views pure UI; delegate all logic to controller.
Code Example
See references/controller-example.md for controller + view implementation pattern.
Related Topics
getx-navigation | layer-based-clean-architecture | dependency-injection