flutter开发实战-GetX响应式状态管理使用

flutter开发实战-GetX响应式状态管理使用

GetX是一个简单的响应式状态管理解决方案。GetX是Flutter的一款超轻、功能强大的解决方案。它将高性能状态管理、智能依赖注入和路由管理快速而实用地结合在一起。这里简单使用一下GetX

一、引入GetX

在工程的pubspec.yaml中引入插件

  get: 4.6.5
    

GetX功能强大,里面包括routes, snackbars, internationalization, bottomSheets, dialogs等等,使用这些功能可以将MaterialApp更改成GetMaterialApp。但是我这里暂时不使用到这些功能。

二、使用GetX

在flutter创建后会有一个计数的示例。这里使用GetxController,Controller中定义变量都是可被观察的。

ZCounterController代码如下

class ZCounterController extends GetxController {
  RxInt timestamp = 0.obs;

  void getTimestamp() {
    print("getTimestamp");
    int cur = DateTime.now().millisecondsSinceEpoch;
    timestamp.value = cur;
  }
}
    

当点击按钮时候,重新获取时间戳,更改timestamp.value的值。

在使用的地方,我们需要实现

final ZCounterController c = Get.put(ZCounterController());

展示用到Obx函数

 Obx(() => Text(
               "获取的timestamp: ${c.timestamp}",
               style: TextStyle(fontSize: 12, color: Colors.white),
             )),

点击按钮调用c.getTimestamp();

效果图如下

在这里插入图片描述
使用完整代码如下

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

class ZGetXPage extends StatefulWidget {
  const ZGetXPage({super.key});

  @override
  State<ZGetXPage> createState() => _ZGetXPageState();
}

class _ZGetXPageState extends State<ZGetXPage> {
  @override
  void initState() {
    // TODO: implement initState
    super.initState();
  }

  @override
  void dispose() {
    // TODO: implement dispose
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    // Instantiate your class using Get.put() to make it available for all "child" routes there.
    final ZCounterController c = Get.put(ZCounterController());

    return Scaffold(
      appBar: AppBar(
        title: const Text('测试GetX'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            Container(
              height: 136,
              width: 200,
              color: Colors.blue,
              alignment: Alignment.center,
              child: Obx(() => Text(
                "获取的timestamp: ${c.timestamp}",
                style: TextStyle(fontSize: 12, color: Colors.white),
              )),
            ),
            SizedBox(height: 20,),
            TextButton(
              onPressed: () {
                c.getTimestamp();
              },
              child: Container(
                height: 36,
                width: 100,
                color: Colors.lightGreen,
                alignment: Alignment.center,
                child: Text(
                  '点击获取',
                  style: TextStyle(fontSize: 12, color: Colors.white),
                ),
              ),
            ),
          ],
        )
      ),
    );
  }
}

class ZCounterController extends GetxController {
  RxInt timestamp = 0.obs;

  void getTimestamp() {
    print("getTimestamp");
    int cur = DateTime.now().millisecondsSinceEpoch;
    timestamp.value = cur;
  }
}

    

三、小结

flutter开发实战-GetX响应式状态管理使用

学习记录,每天不停进步。

相关推荐

  1. React使用Valtio的hook实现响应状态管理

    2024-05-10 19:34:04       54 阅读
  2. Flutter GetX状态管理

    2024-05-10 19:34:04       56 阅读
  3. Flutter 官方状态管理 Provider基本使用

    2024-05-10 19:34:04       58 阅读
  4. [Flutter]使用Provider进行状态管理

    2024-05-10 19:34:04       46 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-10 19:34:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-10 19:34:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-10 19:34:04       82 阅读
  4. Python语言-面向对象

    2024-05-10 19:34:04       91 阅读

热门阅读

  1. 基于springboot的校园管理系统源码数据库

    2024-05-10 19:34:04       27 阅读
  2. 使用vscode时快速生成console.log()

    2024-05-10 19:34:04       36 阅读
  3. 了解Ansible Playbook

    2024-05-10 19:34:04       33 阅读
  4. 力扣 300. 最长递增子序列 python AC

    2024-05-10 19:34:04       29 阅读
  5. LeetCode hot100-31-G

    2024-05-10 19:34:04       34 阅读
  6. Golang 并发 Mutex 互斥锁的使用

    2024-05-10 19:34:04       30 阅读
  7. SpringBoot笔记

    2024-05-10 19:34:04       29 阅读
  8. Mysql .frm 和 .ibd 文件区别

    2024-05-10 19:34:04       35 阅读
  9. String是最基本的数据类型吗?

    2024-05-10 19:34:04       36 阅读
  10. NIO BIO AIO详解

    2024-05-10 19:34:04       35 阅读
  11. auto encoder笔记

    2024-05-10 19:34:04       32 阅读