getX简单使用 flutter

 

下面我用 GetX 再把同一个 Counter 示例实现一遍,  
并且会和 Provider / Riverpod 做直观对比,方便你选。

✅ GetX 版 Counter 示例(完整可用)

一、添加依赖

pubspec.yaml
dependencies:
  flutter:
    sdk: flutter
  get: ^4.6.6

flutter pub get


二、创建 Controller(状态)

✅ GetX 的核心思想:Controller + 响应式变量

import 'package:get/get.dart';

class CounterController extends GetxController {
  var count = 0.obs; // observable

  void increment() {
    count++;
  }
}


📌 .obs = 响应式变量  
📌 不需要 notifyListeners()

三、main 中初始化(可选)

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      home: HomePage(),
    );
  }
}


✅ GetMaterialApp 替代 MaterialApp

四、UI 中使用

✅ 方式一:Obx(最常用 ✅)

class HomePage extends StatelessWidget {
  final CounterController c = Get.put(CounterController());

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('GetX Counter')),
      body: Center(
        child: Obx(() => Text(
              '${c.count}',
              style: TextStyle(fontSize: 40),
            )),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: c.increment,
        child: Icon(Icons.add),
      ),
    );
  }
}


✅ 不需要 BuildContext  
✅ 不需要 ConsumerWidget  
✅ UI 极其简洁  

五、另一种写法(依赖注入更干净)

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final c = Get.find<CounterController>();

    return Scaffold(
      body: Obx(() => Text('${c.count}')),
    );
  }
}


六、三种方案横向对比(重点)

维度 Provider Riverpod GetX

学习成本 ⭐⭐ ⭐⭐⭐ ⭐

是否依赖 Context ✅ 是 ❌ 否 ❌ 否

类型安全 ❌ 运行时 ✅ 编译期 ❌ 运行时

响应式 ✅ ✅ ✅

路由 / 弹窗 / 国际化 ❌ ❌ ✅ 内置

代码量 中 中 ✅ 最少

官方推荐 ✅ ✅✅ ❌

大型项目稳定性 ✅ ✅✅ ⚠️ 争议较大

七、一句话选型建议(2026 年)

• 🟢 新手 / 想快 → GetX

• 🔵 正规军 / 长期维护 / 团队协作 → Riverpod

• 🟡 老项目 / 简单状态 → Provider

⚠️ 注意:  

GetX 很强,但 不是 Flutter 官方生态,在复杂项目中常被诟病:

- 黑魔法多

- 调试困难

- 升级风险

 

posted @ 2026-06-17 16:25  黄增松  阅读(9)  评论(0)    收藏  举报