【问题标题】:Flutter Provider - Call function on value change without calling build()Flutter Provider - 在值更改时调用函数而不调用 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()。

【问题讨论】:

    标签: flutter dart flutter-provider


    【解决方案1】:

    这里不是提供者用户(bloc fan),但您应该能够使用服务公开的 ValueNotifier 做您想做的事。在您的 initState 中,您将向通知程序添加一个侦听器。

    而且我相信你可以通过使用context.select&lt;T, R&gt;(R cb(T value)) 来避免构建调用,它允许小部件只监听 T 的一小部分。 提供者文档摘录:

    Widget build(BuildContext context) {
      final name = context.select((Person p) => p.name);
      return Text(name);
    }
    

    但我不确定这是否有必要。

    如果您找到更简洁的解决方案,请分享,学习在 Flutter 社区的其他部分有效的方法总是很好。

    【讨论】:

      猜你喜欢
      • 2020-11-19
      • 2012-09-28
      • 1970-01-01
      • 1970-01-01
      • 2020-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-23
      相关资源
      最近更新 更多