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);
    }
    }

相关推荐
MY_TEUCK9 小时前
【Java 后端】SpringBoot 登录认证与会话跟踪实战(JWT + Filter/Interceptor)
java·开发语言·spring boot
镜宇秋霖丶9 小时前
2026.5.6@霖宇博客制作中遇见的问题
前端·javascript·vue.js
QQ2422199799 小时前
基于python+微信小程序的家教管理系统_mh3j9
开发语言·python·微信小程序
沐知全栈开发10 小时前
JavaScript 条件语句
开发语言
RSTJ_162510 小时前
PYTHON+AI LLM DAY THREETY-SEVEN
开发语言·人工智能·python
吴声子夜歌10 小时前
Vue3——TypeScript基础
javascript·typescript
清水白石00810 小时前
《Python性能深潜:从对象分配开销到“小对象风暴”的破解之道(含实战与最佳实践)》
开发语言·python
Je1lyfish10 小时前
CMU15-445 (2025 Fall/2026 Spring) Project#3 - QueryExecution
linux·c语言·开发语言·数据结构·数据库·c++·算法
小李子呢021110 小时前
前端八股Vue---Vue-router路由管理器
前端·javascript·vue.js
Brilliantwxx11 小时前
【C++】 vector(代码实现+坑点讲解)
开发语言·c++·笔记·算法