Getx库的使用

Getx库在flutter应用中的使用

obx

  • ObxGetX 库中结合 Rx 可观察者对象实现状态管理的 Widget 组件,使其在 Flutter 开发中实现状态管理变得更加快捷方便,让代码变得更加简洁。如下面的一个计数器的例子:

    先在 pubspec.yaml文件中添加get库依赖

    复制代码
    dependencies:
      flutter:
        sdk: flutter
    
      get: ^4.6.1
    import 复制代码
    import 'package:flutter/material.dart';
    import 'package:get/get.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class CounterPage extends StatelessWidget {
      // 创建一个可观察者对象,用于存储计数器的值
      var count = 0.obs;
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            appBar: AppBar(title: const Text("Counter")),
            body: Center(
              child: Obx(() {
                // 在 Obx 小部件中使用数据
                return Text("${count.value}", style: const TextStyle(fontSize: 50));
              }),
            ),
            floatingActionButton: FloatingActionButton(
              child: const Icon(Icons.add),
              onPressed: () {
                // 更新数据:通过修改数据对象的值来增加计数器的值
                count += 1;
              },
            ),
          ),
        );
      }
    }
  • 我们创建了一个名为 CounterPage 的无状态小部件 StatelessWidget

  • 使用 .obs 创建了一个可观察者对象 count,它表示整数类型的计数器值。

  • build 方法中,我们返回了一个 Scaffold,其中包含了一个 AppBar、一个居中的文本小部件和一个浮动操作按钮。

  • 在居中的文本小部件中,我们使用 Obx 小部件来监听 count 的变化。当 count 的值发生变化时,Obx 会自动刷新界面,显示最新的计数器值。

路由

  • 默认导航

    // 默认的Flutter导航
    Navigator.of(context).push(
    context,
    MaterialPageRoute(
    builder: (BuildContext context) {
    return HomePage();
    },
    ),
    );

  • Get导航

在 GetX 库中,提供了多种路由跳转的方法,主要包括以下几种:

Get.to():跳转到新的页面,并将新页面压入堆栈。例如:

Get .to (NextPage () );

Get.off():跳转到新的页面,并将当前页面从堆栈中移除。例如:

Get .off (NextPage () );

Get.offAll():跳转到新的页面,并清空堆栈。例如:

Get .offAll (NextPage () );

Get.back():返回上一个页面。例如:

Get .back ();

Get.toNamed()Get.offNamed()Get.offAllNamed():使用命名路由进行跳转。例如:

Get .toNamed ('/next' );

put

在Getx框架中,Get.putGet.lazyPut都是用来向依赖注入系统添加实例的方法。

  • Get.put:这个方法会立即实例化对象,并将其存储在Getx的依赖注入系统中。这意味着无论是否有代码使用这个对象,它都会被创建。这对于你希望在应用启动时立即初始化的对象(例如,服务或控制器)非常有用。

  • Get.lazyPut:这个方法会在第一次使用对象时才实例化对象。这对于可能不会立即使用,或者可能根本不会使用的对象非常有用,因为它可以帮助节省内存和初始化时间。

    class Service {
    static Future<void> init() async {
    // 添加 fenix: true 参数,会强制重新创建
    Get.lazyPut(() => ApiService());
    Get.lazyPut(() => StorageService());
    // 这个方法会异步地初始化一个AuthService对象,并等待它的init方法完成
    await Get.putAsync(() => AuthService().init());
    Get.lazyPut(() => NavigationController(), fenix: true);
    Get.lazyPut(() => AuthController(), fenix: true);
    Get.lazyPut(() => WordsService());
    Get.lazyPut(() => WordsController(), fenix: true);
    }
    }

相关推荐
柳杉7 分钟前
从零打造 AI 全球趋势监测大屏
前端·javascript·aigc
simple_lau8 分钟前
Cursor配置MasterGo MCP:一键读取设计稿生成高还原度前端代码
前端·javascript·vue.js
睡不着先生10 分钟前
如何设计一个真正可扩展的表单生成器?
前端·javascript·vue.js
进击的尘埃24 分钟前
AI 代码审查工具链搭建:用 AST 解析 + LLM 实现自动化 Code Review 的前端工程方案
javascript
juejin_cn33 分钟前
[转][译] 从零开始构建 OpenClaw — 第五部分(对话压缩)
javascript
willow2 小时前
Promise由浅入深
javascript·promise
董员外2 小时前
LangChain.js 快速上手指南:Tool的使用,给大模型安上了双手
前端·javascript·后端
willow3 小时前
Generator与Iterator
javascript
wuhen_n3 小时前
Pinia状态管理原理:从响应式核心到源码实现
前端·javascript·vue.js
晴殇i4 小时前
CommonJS 与 ES6 模块引入的区别详解
前端·javascript·面试