Skillshub flutter-getx-state-management
Simple and powerful reactive state management using GetX. Use when managing reactive state with GetX controllers or observables in Flutter. (triggers: **_controller.dart, **/bindings/*.dart, GetxController, Obx, GetBuilder, .obs, Get.put, Get.find, Get.lazyPut)
install
source · Clone the upstream repo
git clone https://github.com/ComeOnOliver/skillshub
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ComeOnOliver/skillshub "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/HoangNguyen0403/agent-skills-standard/flutter-getx-state-management" ~/.claude/skills/comeonoliver-skillshub-flutter-getx-state-management && rm -rf "$T"
manifest:
skills/HoangNguyen0403/agent-skills-standard/flutter-getx-state-management/SKILL.mdsource content
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
. Store logic and state variables here.GetxController - Reactivity:
- Use
for observable variables (e.g.,.obs
).final count = 0.obs; - Wrap UI in
to listen for changes.Obx(() => ...) - For simple state, use
in controller andupdate()
in UI.GetBuilder
- Use
- Dependency Injection:
- Bindings: Use
class to decouple DI from UI.Bindings - Lazy Load: Prefer
in Bindings.Get.lazyPut(() => Controller()) - Lifecycle: Let GetX handle disposal. Avoid
.permanent: true
- Bindings: Use
- Hooks: Use
,onInit()
,onReady()
instead ofonClose()
/initState
.dispose - Architecture: Use
for modular MVVM (data, models, modules).get_cli
Anti-Patterns
- Ctx in Logic: Pass no
to controllers.BuildContext - Inline DI: Avoid
in widgets; use Bindings +Get.put()
.Get.find - Fat Views: Keep views pure UI; delegate all logic to controller.
Code Example
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