Flutter Provider - 在值更改时调用函数而不调用 build()
Posted
技术标签:
【中文标题】Flutter Provider - 在值更改时调用函数而不调用 build()【英文标题】:Flutter Provider - Call function on value change without calling build() 【发布时间】:2022-01-22 01:05:58 【问题描述】:我想知道是否可以观察 initState 中的值变化,然后简单地调用一个函数?
考虑到我正在使用 Provider 观察的类的状态,我基本上需要启动和停止计时器(听:真),并且希望有一些回调功能可以触发,而不是每次都调用 build()?
例如类似..
void initState()
super.initState();
Provider.of<MyService>(context, listen: true).serviceRunning =>
//do stuff (start/stop my local timer)
if(serviceRunning)
serviceRunning()
else
serviceStopped()
void serviceRunning()
//start local timer and other bits
void serviceStopped()
//stop local timer and other bits
Widget build(BuildContext context)
..
我不记得 Provider 能够做到这一点,所以如果有任何关于如何实现这一点的建议,我将不胜感激。如上所述,我只是想避免不必要地调用 build()。
【问题讨论】:
【参考方案1】:这里不是提供者用户(bloc fan),但您应该能够使用服务公开的 ValueNotifier 做您想做的事。在您的 initState 中,您将向通知程序添加一个侦听器。
而且我相信你可以通过使用context.select<T, R>(R cb(T value))
来避免构建调用,它允许小部件只监听 T 的一小部分。
提供者文档摘录:
Widget build(BuildContext context)
final name = context.select((Person p) => p.name);
return Text(name);
但我不确定这是否有必要。
如果您找到更简洁的解决方案,请分享,学习在 Flutter 社区的其他部分有效的方法总是很好。
【讨论】:
以上是关于Flutter Provider - 在值更改时调用函数而不调用 build()的主要内容,如果未能解决你的问题,请参考以下文章
Flutter - Provider - 如何根据 Provider 的值更改 UI?
Flutter:如何在 Flutter 中使用 Switch 更改主题 - 我已经使用 Provider 实现了这个明暗主题,但不能使用 switch 更改
更改一个 Provider 中的属性会将另一个 Provider 中的属性更改为 List Flutter