【问题标题】:Flutter - Error while creating a widget around RiveFlutter - 在 Rive 周围创建小部件时出错
【发布时间】:2021-04-28 12:56:28
【问题描述】:

为了在多个地方使用 rive,我在 Rive 小部件周围创建了一个包装小部件。

//imports...
class RiveAnimation extends StatefulWidget {
  final String path;
  final String animation;
  final Alignment alignment;
  final bool useArtboardSize;
  RiveAnimation({
    @required this.path,
    this.animation = animTrigger,
    this.alignment = Alignment.center,
    this.useArtboardSize = true,
  });
  @override
  _RiveAnimationState createState() => _RiveAnimationState();
}

class _RiveAnimationState extends State<RiveAnimation> {
  Artboard _riveArtboard;
  RiveAnimationController _controller;

  @override
  void initState() {
    rootBundle.load(widget.path).then(
      (data) async {
        print('animation loaded');
        final RiveFile file = RiveFile.import(data);
        if (file != null) {
          final Artboard artboard = file.mainArtboard;
          artboard.addController(
            _controller = SimpleAnimation(widget.animation),
          );
          setState(() {
            _riveArtboard = artboard;
          });
        }
      },
    );
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Rive(
      artboard: _riveArtboard,
      alignment: widget.alignment,
      useArtboardSize: widget.useArtboardSize,
      fit: BoxFit.fill,
    );
  }
}

使用此小部件时,我收到一条错误消息:

I/flutter ( 7139): The getter 'redraw' was called on null.
I/flutter ( 7139): Receiver: null
I/flutter ( 7139): Tried calling: redraw

有时会显示动画,但有时我会看到 Flutter 错误屏幕。

谢谢。

【问题讨论】:

    标签: flutter rive


    【解决方案1】:

    尝试调用

    super.initState();
    

    在加载动画之前。

      @override
      void initState() {
        super.initState();
        rootBundle.load(widget.path).then(
          (data) async {
            print('animation loaded');
            final RiveFile file = RiveFile.import(data);
            if (file != null) {
              final Artboard artboard = file.mainArtboard;
              artboard.addController(
                _controller = SimpleAnimation(widget.animation),
              );
              setState(() {
                _riveArtboard = artboard;
              });
            }
          },
        );
      }
    

    【讨论】:

      猜你喜欢
      • 2022-07-08
      • 2021-11-03
      • 2017-11-02
      • 2022-12-17
      • 2020-05-15
      • 2020-12-06
      • 2019-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多