GetX State Management
Priority: P0 (CRITICAL)
Structure
text
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.
- •Use
- •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.
- •Bindings: Use
- •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
dart
class UserController extends GetxController {
final name = "User".obs;
void updateName(String val) => name.value = val;
}
class UserView extends GetView<UserController> {
@override
Widget build(ctx) => Scaffold(
body: Obx(() => Text(controller.name.value)),
floatingActionButton: FloatingActionButton(
onPressed: () => controller.updateName("New"),
),
);
}
Related Topics
getx-navigation | layer-based-clean-architecture | dependency-injection