Rive 和 Riverpod 的清洁解决方案

问题描述

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

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

我想这会在设置 _smile.value 并返回小部件后运行 Rive 小部件的构建方法

- 我做对了吗?

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

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

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

- 是否有其他建议无需使用 Consumer 即可更改控制器输入值?

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 实现,我将不胜感激。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)