错误:无法无条件调用方法“[]”,因为接收者可以为“null”

时间:2021-06-21 11:26:02

标签: flutter dart

我知道解决方案很简单,但我是 nullsafety 和动画的新手,请帮我解决这个问题:

代码如下:

class FadeAnimation extends StatelessWidget {
  final double delay;
  final Widget child;

  FadeAnimation(this.delay, this.child);

  @override
  Widget build(BuildContext context) {
    final tween = MultiTrackTween([
      Track("opacity")
          .add(Duration(milliseconds: 500), Tween(begin: 0.0, end: 1.0)),
      Track("translateY").add(
          Duration(milliseconds: 500), Tween(begin: -30.0, end: 0.0),
          curve: Curves.easeOut)
    ]);

    return ControlledAnimation(
      delay: Duration(milliseconds: (500 * delay).round()),
      duration: tween.duration,
      tween: tween,
      child: child,
      builderWithChild: (context, child, animation) => Opacity(
        opacity: animation["opacity"],
        child: Transform.translate(
            offset: Offset(0, animation["translateY"]), child: child),
      ),
    );
  }
}

问题出在这 2 行

opacity: animation["opacity"],

还有这个:

 offset: Offset(0, animation["translateY"]), child: child),

注意:空操作符不起作用。 感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

  1. 看起来像 Map,从您那里检索值是 nullable
  2. Opacity 小部件具有必填字段 opacity,不能为 null
  3. Offset 也有必填字段,也不能是 null

因此您必须将这些值转换为非 nullabe,例如:

  Opacity(
    opacity: animation?["opacity"] ?? .1, //we return default value (any suitable default value, for example 0.1) if animation["opacity"] returns null
    child: Transform.translate(
        offset: Offset(0, animation?["translateY"] ?? .1), child: child), //same
  )