您可以使用状态机,获取状态并在需要时决定要做什么
// Getting state machine
void _onRiveInit(Artboard artboard) async {
final controller =
StateMachineController.fromArtboard(artboard, 'State Machine 1');
if (controller != null) {
artboard.addController(controller);
_lick = controller.findInput<bool>('Lick') as SMITrigger;
}
}
void _onHandlerStateMachine() => _lick?.value = !_lick!.value;
_onRiveInit是在加载 Rive 文件时触发的函数,在您将控制器带到状态机以修改其状态后(这很重要,状态机的名称必须与动画状态机名称相同)
并且要修改触发器的值,您必须以这种方式获得参考
_lick = controller.findInput('Lick') as SMITrigger;
那么你可以使用
无效 _onHandlerStateMachine() => _lick?.value = !_lick!.value;
随时放置或删除动画,您也可以有多个触发器。如果您需要您的动画做某事并在一段时间后做其他事情,您可以使用 debouncer 功能
_debouncer.run(() {
_onHandlerStateMachine()
});
**如果使用状态管理,请记住更新视图
加载 rive 文件时
// Loads a Rive file
Future<void> _loadRiveFile() async {
final bytes = await rootBundle.load(riveFileName);
RiveFile rFile = RiveFile.import(bytes);
final artboard = rFile.mainArtboard;
_onRiveInit(artboard);
globalArtboard = artboard
..addController(
_animationController = SimpleAnimation('idle'),
);
}
在这里,我有一个泰迪的 Rive 动画示例,使用 Flutter 和提供者
https://github.com/alcampospalacios/flutter-rive-animations