我知道解决方案很简单,但我是 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),
注意:空操作符不起作用。 感谢您的帮助。
答案 0 :(得分:0)
Map
,从您那里检索值是 nullable
。Opacity
小部件具有必填字段 opacity
,不能为 null
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
)