除了 setstate 颤振之外,如何在小部件构建中获取值

Posted

技术标签:

【中文标题】除了 setstate 颤振之外,如何在小部件构建中获取值【英文标题】:How is to get a value down in the widget build other than setstate flutter 【发布时间】:2021-06-07 14:19:23 【问题描述】:

我正在使用 Agora 设置音频和视频通话。我想在接听电话后显示通话时间。

Agora 提供带有通话时长的回调:

  rtcStats: (stats) 
          print('stats');
          print(stats.cpuAppUsage);
          print(stats.totalDuration);
          setState(() 
            duration = Duration(seconds: stats.totalDuration!);
          );
        ,

而不是像上面那样使用 setState,这基本上是每秒重建小部件,我这里有什么选择?

【问题讨论】:

【参考方案1】:

像这样使用 valueNotifier

ValueNotifier<double?> secondsNotifier = ValueNotifier(null)
and  double become like this 
 rtcStats: (stats) 
          print('stats');
          print(stats.cpuAppUsage);
          print(stats.totalDuration);
          secondNotifier.value = stats.totalDuration
        ,
in build add ValueListenableBuilder<double> (
valueListenable:secondNotifier,
build:(ctx,second,_)
 if(second == null)
   return SizedBox.shrink();

return Text("$second");


)

【讨论】:

完美。非常感谢!

以上是关于除了 setstate 颤振之外,如何在小部件构建中获取值的主要内容,如果未能解决你的问题,请参考以下文章

通过 addPostFrameCallback 访问 Flutter Provider 时说小部件在小部件树之外,但颤振检查器显示其他情况

如何迭代对象列表并使用颤振在小部件中获取它们的属性?

Setstate 在小部件列表中不起作用

在颤振中从父小部件调用 setState 不会更新状态

setState() 如何重建子部件?

ScaffoldMessenger.of(context).showSnackBar() 在小部件构建函数中直接调用时不起作用