Flutter rxflare 响应式进阶:Map/List 精准字段更新(高性能实战)

前言

上一篇我们学习了 rxflare 基础类型 .obs 响应式 ,这一篇我们进入进阶用法:Map / List 响应式 + 字段级精准刷新

rxflare 最强大的特性之一,就是支持 Map 单独更新某个字段,只刷新对应 UI,不全局重建,性能极高,非常适合复杂数据状态管理。

核心亮点

  • Map / List 一键 .obs 响应式
  • 支持字段级精准更新精准刷新
  • 不冗余重建、性能拉满
  • API 极简:getItem + updateField
  • 依旧无 Stateful、无 setState

一、依赖安装

yaml

yaml 复制代码
dependencies:
  flutter:
    sdk: flutter
  rxflare: ^1.5.1

plaintext

arduino 复制代码
flutter pub get

二、你提供的完整可运行代码(Map 精准更新)

dart

less 复制代码
import 'package:flutter/material.dart';
import 'package:rxflare/rxflare.dart';

// ==================== 2. Map/List 精准更新 ====================
class MapListPreciseDemo extends StatelessWidget {
  MapListPreciseDemo({super.key});

  // 1. 定义响应式 Map
  final user = {
    "name": "Tom",
    "age": 25,
    "score": 88,
    "vip": true
  }.obs;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("rxflare Map 精准更新"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            // 每个 Rx 只监听自己用到的字段 → 精准刷新
            Rx(() => Text("👤 姓名: ${user.getItem('name')}", style: const TextStyle(fontSize: 26))),
            const SizedBox(height: 12),
            Rx(() => Text("🎂 年龄: ${user.getItem('age')} 岁", style: const TextStyle(fontSize: 26))),
            const SizedBox(height: 12),
            Rx(() => Text("🏆 分数: ${user.getItem('score')}", style: const TextStyle(fontSize: 26, color: Colors.orange))),
            const SizedBox(height: 12),
            Rx(() => Text(
              user.getItem('vip') ? "💎 VIP 用户" : "普通用户",
              style: const TextStyle(fontSize: 26),
            )),

            const SizedBox(height: 60),
            Wrap(
              spacing: 12,
              children: [
                // 精准更新 name 字段
                ElevatedButton(
                  onPressed: () => user.updateField("name", "Jerry"),
                  child: const Text("改名"),
                ),
                // 精准更新 age 字段
                ElevatedButton(
                  onPressed: () => user.updateField("age", user.getItem("age") + 1),
                  child: const Text("年龄+1"),
                ),
                // 精准更新 score 字段
                ElevatedButton(
                  onPressed: () => user.updateField("score", user.getItem("score") + 10),
                  child: const Text("加分"),
                ),
                // 精准更新 vip 字段
                ElevatedButton(
                  onPressed: () => user.updateField("vip", !user.getItem("vip")),
                  child: const Text("切换VIP"),
                ),
              ],
            ),
          ],
        ),
      ),
    );
  }
}

void main() {
  runApp(const MaterialApp(
    home: MapListPreciseDemo(),
  ));
}

三、核心 API 超清晰讲解

1. 定义响应式 Map

dart

sql 复制代码
final user = {
  "name": "Tom",
  "age": 25,
  "score": 88,
  "vip": true
}.obs;
  • 普通 Map 后面加 .obs → 立即变成 rxflare 响应式 Map
  • 支持任意字段类型(String/int/bool/double 等)

2. 获取字段值:getItem

dart

arduino 复制代码
user.getItem('name')
user.getItem('age')
user.getItem('vip')
  • 安全获取 Map 字段
  • 会被 Rx 组件自动监听

3. 精准更新字段:updateField

dart

arduino 复制代码
user.updateField("name", "Jerry");
user.updateField("age", 26);
user.updateField("vip", false);
  • 只更新一个字段
  • 只刷新监听该字段的 Rx 组件
  • 其他 UI 完全不重建 → 性能极高

四、运行效果

  • 点击【改名】:只刷新姓名文本
  • 点击【年龄 + 1】:只刷新年龄文本
  • 点击【加分】:只刷新分数文本
  • 点击【切换 VIP】:只刷新 VIP 状态文本
  • 每个文本独立刷新,不互相影响
  • 全程无 setState、无状态类、无冗余构建

五、为什么这个写法超牛?

  • 精准刷新:哪个字段变,刷新哪个 UI
  • 性能极致:大型列表 / 复杂页面优势巨大
  • 写法极简:不用状态管理模板
  • 零学习成本 :记住 .obs / Rx / getItem / updateField 即可
相关推荐
mldong33 分钟前
你的 Vue3 项目也能有钉钉同款审批流设计器:npm 装包,10 分钟画出第一条审批流
前端·vue.js
2分钟速写快排1 小时前
什么是 RAG?如何用 RAG 实现一个用户记忆?
前端·后端·ai编程
passerby60612 小时前
如何自己造一个时间处理库
前端·javascript·github
走到天涯海角3 小时前
react里面的长列表渲染优化
前端·react.js·前端框架
小羊没烦恼!3 小时前
Hello Web API系列教程——Web API与国际化
java·服务器·前端·javascript·php
北岛贰3 小时前
迷茫焦虑期,我做了一个带支付带官网的 AI 聊天虚拟恋人 App
前端·人工智能·后端
mayaairi5 小时前
Vue2 组件通讯(三):全局事件总线、PubSub、插槽与组件实例属性
前端·javascript·vue.js
kyriewen5 小时前
面试官问我:AI 都能写代码了,前端凭什么还值 25K
前端·javascript·人工智能
风骏时光牛马6 小时前
AI源码分析:拆解模型底层实现逻辑
前端
IT_陈寒6 小时前
React子组件莫名其妙重渲染?你可能漏了这个Hook
前端·人工智能·后端