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

相关推荐
CHHH_HHH10 分钟前
【C++11】深入解析C++可变参数模板
开发语言·c++·算法·stl·c++11
竹林8182 小时前
从 ethers.js 迁移到 Viem:一个签名验证 Bug 让我彻底放弃旧爱
javascript
jimy12 小时前
C语言模拟对象、方法:“函数指针+结构体“复用函数指针指向的函数体
c语言·开发语言
你挚爱的强哥2 小时前
Vue2 实现 1.5s 十连击监听(连续点击若干次),封装通用可复用点击检测工具,不用 data!Vue 封装通用连击监听方法,支持自定义时长与点击次数
前端·javascript·vue.js
半个落月3 小时前
用 LangChain.js 手写一个能读写文件和执行命令的 Mini Cursor
javascript·人工智能·后端
天外天-亮3 小时前
HBuilder X 使用 uview-plus 方式
开发语言·javascript·hbuilder x·uview-plus
木木子223 小时前
[特殊字符] 音乐播放器——状态驱动的多媒体控制
android·开发语言·华为·php·harmonyos
六个九十度4 小时前
用python脚本访问被网关隔离的嵌入式设备
开发语言·python
酷酷的身影4 小时前
Drivers/LedManager.cs
开发语言·php
小樱花的樱花4 小时前
Linux 线程的创建
linux·c语言·开发语言