0

在我的颤振应用程序中,我想使用 Rive 进行动画和 Riverpod 进行状态管理。所以现在我正在寻找一种高性能的方式来监听我的提供者的状态来管理我的SMIInput<bool>. 目前我用消费者包装 Rive 小部件,以从 Riverpod 获取状态并设置控制器值。

Consumer(builder: (context, watch, _) {
  _smile?.value = watch(widget._stateRef).smile;
  return Rive(
    artboard: _riveArtboard!,
  );
});

我想这会运行 Rive 小部件的构建方法,一旦_smile.value设置并返回小部件。

- 我说对了吗?

为此,我尝试将 addListener 调用到提供程序通知程序以在_smile.value那里设置。

context.read(widget._stateRef.notifier).addListener((logoState) {
   if (mounted) {
     _smile?.value = logoState.smile;
   }
});

但这只会运行一次,而不是像我希望的那样在每次状态更改时运行。

- 是否有其他建议可以更改控制器输入值而无需使用消费者?

final signInLogoSmileProvider =
    StateNotifierProvider<LogoNotifier, LogoState>((ref) {
  // ignore: unused_local_variable
  ref.watch(signInFormProvider);
  final signInFormNotifier = ref.read(signInFormProvider.notifier);
  return LogoNotifier(smile: signInFormNotifier.shouldSmile);
});

我需要观察signInFormProviders状态而不是 signInFormProvider.notifiers 状态,原因与 addListeners 只运行一次的原因相同。

- 这是不好的做法,还是我在这里做错了什么?

如果您手头有 Rive 和 Riverpod的任何不错的实现,我将不胜感激。

4

0 回答 0