Skip to content
On this page

状态管理

GetX安装

dart
// 方式一
// 在pubspec.yaml文件中添加get依赖
dependencies:
  get: 4.6.6

// 执行:flutter packages get 重新安装依赖即可

// 方式二
flutter pub add http

// 如果提示没有安装成功可以尝试重启ide

GetX状态管理

GetX的状态管理原理是基于响应式编程和依赖注入的。在GetX中,Controller是状态的管理者,它通常继承自GetxControllerController中的变量可以是observable类型的变量,这意味着它们可以被观察,并在变化时通知所有依赖它们的WidgetGetX使用Rx库来实现响应式编程,它可以监听observable对象的变化,并在变化时触发更新。当一个observable对象的值改变时,GetX会自动通知所有依赖它的Widget,并触发它们的重建。

GetX还提供了依赖注入的功能,它可以帮助我们轻松地管理Controller的生命周期,并提高应用程序的性能和内存使用效率。使用依赖注入,我们可以将Controller实例化并注册到GetX中。当我们需要使用Controller时,GetX会将已经实例化的Controller注入到我们需要使用它的Widget中,这可以避免重复实例化Controller,提高应用程序的性能和内存使用效率。 参考资料:https://juejin.cn/post/7231184167735820346

Obx

ObxGetX库中的一个特殊Widget,它可以将Widgetobservable对象绑定在一起。当observabel对象的值改变时,Obx会自动重新构建WidgetObx通常用于绑定单个变量的情况。

dart
import 'package:flutter/material.dart';
import 'package:get/get.dart';

void main() => runApp(MaterialApp(home: Home()));

class Home extends StatelessWidget {
  var count = 0.obs; // observable类型的变量

  @override
  Widget build(context) => Scaffold(
      appBar: AppBar(title: Text("counter")),
      body: Center(
        child: Obx(() => Text("$count")),
      ),
      floatingActionButton: FloatingActionButton(
        child: Icon(Icons.savings),
        onPressed: () => {
          count = count + 10
        }
      ));
}
dart
import 'package:flutter/material.dart';
import 'package:get/get.dart';

void main() => runApp(MaterialApp(home: MyWidget()));

class MyController extends GetxController {
  var count = 0.obs;
  increment() => count++;
}

class MyWidget extends StatelessWidget {
  final MyController controller = Get.put(MyController());
  MyWidget({super.key});

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

路由管理

GetX路由管理:https://juejin.cn/post/7234324615015497787?searchId=202310241527044F1DA052B7258FB7A7F1