所以我使用的是simple_animations: ^5.0.2
包,但我尝试运行的项目是在一个旧版本的简单动画上制作的,所以我对这个包没有太多的了解,但我试图模仿旧版本的功能:
import 'package:flutter/material.dart';
import 'package:simple_animations/simple_animations.dart';
class FadeAnimation extends StatelessWidget {
final double delay;
final Widget child;
FadeAnimation(this.delay, this.child);
@override
Widget build(BuildContext context) {
final tween = MovieTween();
tween.tween('opacity', Tween(begin: 0.0, end: 1.0), duration: Duration(milliseconds: 500));
tween.tween('translateY', Tween(begin: -30.0, end: 0.0), duration: Duration(milliseconds: 500), curve: Curves.easeOut);
return PlayAnimationBuilder(
delay: Duration(milliseconds: (500 * delay).round()),
duration: tween.duration,
tween: tween,
child: child,
builder: (context, movie, child) => Opacity(
opacity: child['opacity'], // The method '[]' can't be unconditionally invoked because the receiver can be 'null'. Try making the call conditional (using '?.') or adding a null check to the target ('!').
child: Transform.translate(
offset: Offset(0, child["translateY"]), child: child), // The method '[]' can't be unconditionally invoked because the receiver can be 'null'. Try making the call conditional (using '?.') or adding a null check to the target ('!').
),
);
}
}
我在第23行和第25行得到了错误,它们基本上都说了同样的话,“方法'[]'不能被无条件调用,因为接收者可以是'null'。尝试使调用有条件(使用'?.')或向目标('!我不知道该怎么办,也不知道该怎么办。
旧版本
import 'package:flutter/material.dart';
import 'package:simple_animations/simple_animations.dart';
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
),
),
);
}
}
1条答案
按热度按时间cig3rfwq1#
一般来说,这意味着你应该把空检查操作符放在**[**]之前。因此,您将使用:用途:
*?如果您要分配给变量的参数/变量(在您的情况下,它是code,可以为null),或者
***!**如果您要将变量赋给的参数/变量,则不能为null。在这种情况下,你必须确保它也不是null。
例如:* 孩子?不透明性]* 或 * 孩子!不透明性]*
如果你使用的是vscode或者android studio,你可以在类似的情况下使用“快速修复”来更快地解决问题。