Flutter 在颤振中更改Rive 2动画
我有一个用Rive 2创建的.riv文件。 它包含多个动画 我想播放默认动画,但根据流的输入对其进行更改 下面的代码仅播放“默认”动画,即使开关大小写发生更改,也不会更新。 代码跳转到右边的switch case语句中,我通过日志检查了它。 但动画并没有改变 如何从Rive artboard播放不同的动画 国家级:Flutter 在颤振中更改Rive 2动画,flutter,animation,flutter-animation,rive,Flutter,Animation,Flutter Animation,Rive,我有一个用Rive 2创建的.riv文件。 它包含多个动画 我想播放默认动画,但根据流的输入对其进行更改 下面的代码仅播放“默认”动画,即使开关大小写发生更改,也不会更新。 代码跳转到右边的switch case语句中,我通过日志检查了它。 但动画并没有改变 如何从Rive artboard播放不同的动画 国家级: class _GraphicState extends State<Graphic> { final riveFileName = 'assets/rive/char
class _GraphicState extends State<Graphic> {
final riveFileName = 'assets/rive/character.riv';
Artboard _artboard;
@override
void initState() {
_loadRiveFile();
super.initState();
}
// loads a Rive file
void _loadRiveFile() async {
final bytes = await rootBundle.load(riveFileName);
final file = RiveFile();
if (file.import(bytes)) {
// Select an animation by its name
setState(() => _artboard = file.mainArtboard
..addController(
SimpleAnimation('default'),
));
}
}
每次执行
\u artboard.artboard..addController时,请尝试调用setState(()=>{})
。
好的,您可以使用“混合驱动动画”
代码:
然后把小部件放在任何地方
Container(
height: 100.0, width: 100.0,
child: Rive(
artboard: _artboard,
fit: BoxFit.scaleDown,
alignment: Alignment.center,
),
)
Widget selectGraphic(state) {
if (_artboard != null) {
switch (state) {
case 1:
_artboard.artboard..addController(SimpleAnimation('run'));
break;
case 2:
_artboard.artboard..addController(SimpleAnimation('stand'));
break;
case 3:
_artboard.artboard..addController(SimpleAnimation('dead'));
break;
default:
_artboard.artboard..addController(SimpleAnimation('default'));
}
return Rive(
artboard: _artboard,
fit: BoxFit.cover,
);
} else {
return Container();
}
}
AnimationController animationController;
final String animationSell = "sell_item";
final String animationAdd = "add_item";
final String animationEmpty = "empty_cart";
final riveFileName = 'assets/animation/cart.riv';
Artboard _artboard;
RiveAnimationController _wipersController;
@override
void initState() {
_loadRiveFile();
super.initState();
}
void _loadRiveFile() async {
final bytes = await rootBundle.load(riveFileName);
final file = rive.RiveFile();
if (file.import(bytes)) {
setState(() => _artboard = file.mainArtboard..addController(rive.SimpleAnimation(animationSell)));
}
}
void _wipersChange(KartState state) {
switch (state.index) {
case 0:
_artboard.addController(
_wipersController = rive.SimpleAnimation(animationEmpty),
);
break;
case 1:
_artboard.addController(
_wipersController = rive.SimpleAnimation(animationAdd),
);
break;
case 2:
_artboard.addController(
_wipersController = rive.SimpleAnimation(animationSell),
);
break;
default:
_artboard.addController(
_wipersController = rive.SimpleAnimation(animationEmpty),
);
}
}
Container(
height: 100.0, width: 100.0,
child: Rive(
artboard: _artboard,
fit: BoxFit.scaleDown,
alignment: Alignment.center,
),
)