【发布时间】:2021-06-01 12:26:08
【问题描述】:
在我的 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 携手合作,我将不胜感激。
【问题讨论】: