Flutter ValueNotifier 倒计时 局部刷新组件 在StatelessWidget 中刷新倒计时

Posted 安果移不动

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter ValueNotifier 倒计时 局部刷新组件 在StatelessWidget 中刷新倒计时相关的知识,希望对你有一定的参考价值。

class ContentItem extends StatelessWidget {
  Timer _timer;
  ValueNotifier<int> _timerValueNotifier = ValueNotifier(-1);

构造方法中初始化timer

  ContentItem(
      {this.age
     )
      : super(key: key) {
    _timer = Timer.periodic(Duration(seconds: 1), (timer) {
      if (_timerValueNotifier == 0) {
        _timer.cancel();
      } else {
        _timerValueNotifier.value -= 1;
      }
    });

-=1代表 _timerValueNotifier 的局部刷新 

使用到的地方

      _timerValueNotifier.value = hour;

      return ValueListenableBuilder(
          valueListenable: _timerValueNotifier,
          builder: (BuildContext context, int value, Widget child) {
            //todo
            String timeText = value.toString();
            return _getTextByNomal(timeText);
          });

首先赋值给他要倒计时的时间 赋值后 可以通过value拿到当前的倒计时

在控件销毁的时候要注意关闭Timer

关闭方法需要在StatelessWidget中重写 createElement控件

class ContentItem extends StatelessWidget {


  @override
  StatelessElement createElement() =>
      StatelessElementDestoryTimer(this, _timer);

 传入Timer并进行注销

class StatelessElementDestoryTimer extends StatelessElement {
  final Timer timer;

  StatelessElementDestoryTimer(StatelessWidget widget, this.timer)
      : super(widget);

  @override
  void unmount() {
    super.unmount();
    if (timer != null) {
      timer.cancel();
    }
  }
}

以上是关于Flutter ValueNotifier 倒计时 局部刷新组件 在StatelessWidget 中刷新倒计时的主要内容,如果未能解决你的问题,请参考以下文章

Flutter ValueNotifier实际开发使用

Flutter 中 ValueNotifier<List<T>> 监听问题解决

Flutter 异步加载多个函数一个接一个

如何在 Flutter 中添加多个相同类型的 ChangeNotifierProvider

Flutter 中 ChangeNotifier 的构建器小部件

Flutter 实现局部刷新 StreamBuilder 实例详解