You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Rive点击触发动画报错:期望SMITrigger却获SMIBool

解决Flutter中Rive点击触发动画的类型错误问题

问题原因

你遇到的Expected a value of type 'SMITrigger', but got one of type 'SMIBool'错误,是因为代码里强行把状态机的第一个输入(类型为SMIBool)转换成了SMITrigger。你原本已经用findSMI('look up')尝试查找正确的触发器,但后面又覆盖了这个结果,导致类型不匹配。

解决方案

  1. 移除trigger = stateMachineController!.inputs.first as SMITrigger;这行错误代码,保留通过findSMI精准查找触发器的逻辑。
  2. 增加类型判断,确保找到的输入确实是SMITrigger类型,避免后续调用fire()时出错。

修改后的完整代码

class GlassCard extends StatefulWidget {
  const GlassCard({super.key});

  @override
  State<GlassCard> createState() => _GlassCardState();
}

class _GlassCardState extends State<GlassCard> {
  Artboard? _birdArtboard;
  SMITrigger? _lookUpTrigger;
  StateMachineController? _stateMachineController;

  @override
  void initState() {
    super.initState();
    rootBundle.load('assets/bird.riv').then(
      (data) {
        final file = RiveFile.import(data);
        final artboard = file.mainArtboard;
        
        // 获取状态机控制器
        _stateMachineController = StateMachineController.fromArtboard(artboard, "birb");
        if (_stateMachineController != null) {
          artboard.addController(_stateMachineController!);
          
          // 精准查找名为"look up"的触发器,并判断类型
          final input = _stateMachineController!.findSMI('look up');
          if (input is SMITrigger) {
            _lookUpTrigger = input;
          }
        }

        setState(() => _birdArtboard = artboard);
      },
    );
  }

  void _triggerLookUp() {
    _lookUpTrigger?.fire();
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: SizedBox(
        height: 400,
        width: 400,
        child: _birdArtboard == null
            ? const SizedBox()
            : GestureDetector(
                onTap: _triggerLookUp,
                child: Rive(artboard: _birdArtboard!),
              ),
      ),
    );
  }
}

关键说明

  • 通过findSMI('look up')精准获取对应名称的状态机输入,避免了取第一个输入的盲目性。
  • 增加input is SMITrigger的类型判断,确保只有当找到的输入是触发器类型时才赋值,防止类型转换错误。
  • 变量名做了更清晰的命名(比如_lookUpTrigger、_stateMachineController),提升代码可读性。

内容的提问来源于stack exchange,提问作者Regnas01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 08:50:16