Flutter简单动画:无法无条件调用方法“[]”,因为接收器可以为“null”

bsxbgnwa  于 2023-10-22  发布在  Flutter
关注(0)|答案(1)|浏览(145)

所以我使用的是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
        ),
      ),
    );
  }
}
cig3rfwq

cig3rfwq1#

一般来说,这意味着你应该把空检查操作符放在**[**]之前。因此,您将使用:用途:

*如果您要分配给变量的参数/变量(在您的情况下,它是code,可以为null),或者
***!**如果您要将变量赋给的参数/变量,则不能为null。在这种情况下,你必须确保它也不是null。

例如:* 孩子?不透明性]* 或 * 孩子!不透明性]*
如果你使用的是vscode或者android studio,你可以在类似的情况下使用“快速修复”来更快地解决问题。

相关问题