You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Avatar类属性变化时刷新Flutter Widget组件?

解决Avatar静态属性变更时刷新Widget的直接方法

要让Info1和Info2感知到Avatar.val的变化并自动刷新,最直接的方式是用Flutter自带的ValueNotifier来管理状态,它能在值变更时主动通知监听者,触发Widget重建。

具体改造步骤:

  1. 重构Avatar类,用ValueNotifier管理状态
    把原来的静态int属性替换为ValueNotifier<int>,周期性任务更新其value属性:
import 'dart:async';
import 'package:flutter/material.dart';

class Avatar {
  static final ValueNotifier<int> valNotifier = ValueNotifier(0); 

  static void periodicTendencyValueChange() {
    Timer.periodic(const Duration(seconds: 90), (timer) {
      valNotifier.value++; 
    });
  }
}
  1. 修改Info1和Info2的State类,添加状态监听
    在State的生命周期中注册valNotifier的监听,值变化时调用setState触发Widget重建,同时在销毁时移除监听避免内存泄漏:

Info1改造后代码:

class Info1 extends StatefulWidget { 
  Info1({super.key });

  @override
  Info1Impl createState() => Info1Impl();
}

class Info1Impl extends State<Info1> {
  late final VoidCallback _valueChangeListener;

  @override
  void initState() {
    super.initState();
    // 注册监听:值变化时触发setState
    _valueChangeListener = () => setState(() {});
    Avatar.valNotifier.addListener(_valueChangeListener);
  }

  @override
  void dispose() {
    // 移除监听,释放资源
    Avatar.valNotifier.removeListener(_valueChangeListener);
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
   return Text(Avatar.valNotifier.value.toString()); 
  }
}

Info2改造后代码:

class Info2 extends StatefulWidget { 
  Info2({super.key });

  @override
  Info2Impl createState() => Info2Impl();
}

class Info2Impl extends State<Info2> {
  late final VoidCallback _valueChangeListener;

  @override
  void initState() {
    super.initState();
    _valueChangeListener = () => setState(() {});
    Avatar.valNotifier.addListener(_valueChangeListener);
  }

  @override
  void dispose() {
    Avatar.valNotifier.removeListener(_valueChangeListener);
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
   return Text((Avatar.valNotifier.value + 1).toString()); 
  }
}

说明

这种方案完全基于Flutter核心API实现,无需引入第三方状态管理库,逻辑简洁直接。每当valNotifier.value更新时,所有注册了监听的State都会收到通知,通过setState触发对应Widget的重建,确保显示内容与最新值同步。

内容的提问来源于stack exchange,提问作者user21161308

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 17:53:17