当前位置: 首页 > article >正文

Getx:响应式数据,实现数据的局部刷新

Flutter官网demo实现计数器

这个demo中,如果要更新_count++,调用setState就会重新build,这样做比较耗费性能,此时可以使用Getx的响应式状态管理器实现局部刷新

import 'package:flutter/material.dart';

class JiShu extends StatefulWidget {
  const JiShu({Key? key}):super(key:key);
  @override
  State<JiShu> createState() => _JiShuState();
}

class _JiShuState extends State<JiShu> {
  int _count = 0;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('计数器'),),
      body: Column(
        children: [
          Text('计数器:${_count}'),
          ElevatedButton(onPressed: (){
            setState(() {
              _count++;
            });
          }, child: Text('计数器++'))
        ],
      ),
    );
  }
}

Getx响应式状态管理器,实现刷新局部数据

Flutter中无状态组件StatelessWidget 是不能触发计数器的,通过Getx响应式状态管理器实现了数字的更新

final _count = 0.obs; // 定义响应式状态
Obx(()=> Text('计数器:${_count.value}')),  // 通过Obx渲染数据
_count.value++; // 改变数据
// main 文件入口必须使用GetMaterialApp包裹以下
return const GetMaterialApp(
  home: JiShu(),
);

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

class JiShu extends StatelessWidget {
  const JiShu({Key?key}):super(key: key);
  @override
  Widget build(BuildContext context) {
    final _count = 0.obs;
    final _name = '张三'.obs;
    return Scaffold(
      appBar: AppBar(title: Text('计数器'),),
      body: Column(
        children: [
          Obx(()=> Text('计数器:${_count.value},姓名:${_name.value}')),
          ElevatedButton(onPressed: (){
            _count.value++;
            _name.value = '李四';
          }, child: Text('计数器++'))
        ],
      ),
    );
  }
}

响应式数据定义的方式

final name = ''.obs;
final isLogged = false.obs;
final count = 0.obs;
final balance = 0.0.obs;
final number = 0.obs;
final items = <String>[].obs;
final myMap = <String, int>{}.obs;
自定义类 - 可以是任何类
final user = User().obs;

在这里插入图片描述

自定义响应式类

class Animal {
  String name;
  int age;
  Animal(this.name,this.age);
}

// 下个页面中使用这个类
import 'animal.dart';
var _animal = Animal('张三', 30).obs;

...

Obx(()=> Text('计数器:${_animal.value.name},年龄:${_animal.value.age}')),
ElevatedButton(onPressed: (){
  _animal.value.name = '李四';
  _animal.value.age = 40;
  _animal.value = _animal.value;
}, child: Text('修改自定义类响应式')),

http://www.kler.cn/a/400779.html

相关文章:

  • 版本控制【Git Bash】【Gitee】
  • TDSQL 免密码登录
  • STM32 ADC --- 任意单通道采样
  • 【ACM独立出版|高校主办】第四届信号处理与通信技术国际学术会议(SPCT 2024)
  • 使用Python编写一个简单的网页爬虫,从网站抓取标题和内容。
  • Django5 2024全栈开发指南(三):数据库模型与ORM操作
  • Hybird和WebView
  • 《Python网络安全项目实战》项目5 编写网站扫描程序
  • CANoe发送和接收CAN DataBase(DBC文件)数据
  • MySQL:数据库的约束
  • QT<30> Qt中使鼠标变为转圈忙状态
  • 第 12 章 - Go语言 方法
  • 【机器学习】数学知识:欧式距离(Euclidean Distance)和曼哈顿距离(Manhattan Distance)
  • Siglus引擎 Unpack | 未完待续
  • 单用户模式下执行passwd root ,返回的是(current) UNIX passwd
  • WPF命令
  • OAI-5G开源通信平台实践(二)
  • 【数据结构】【线性表】静态链表(附C语言源码)
  • 多模态基础模型:从专家到通用助手
  • 【后端】版本控制
  • 特权帐户安全 CyberArk
  • 开源财富管理软件Ghostfolio的安装
  • el-table中增加校验方法(二)
  • JavaScript 原型
  • golang通用后台管理系统09(系统操作日志记录)
  • MySQL —— MySQL索引介绍、索引数据结构、聚集索引和辅助索引、索引覆盖