Flutter - 如何处理小部件属性的不可空实例

Flutter - How to handle Non-Nullable Instance of widget properties

我是 Flutter 的新手,目前正在尝试在我的组件上制作简单的动画,但我不断收到“不可为空实例”错误,我查看了其他视频教程,但他们的视频教程运行良好,而我的却不断抛出错误。

这是我的代码。

class HomeScreen extends StatefulWidget {
  @override
  State<HomeScreen> createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {

  Animation<Offset> sbarAnimation;
  AnimationController sbarAnimationController;

  @override

  void initState() {

    super.initState();

    sbarAnimationController = AnimationController(
      vsync: this,
      duration: Duration(milliseconds: 250),
    );

    sbarAnimation = Tween<Offset>(
      begin: Offset(-1, 0),
      end: Offset(0, 0),
    ).animate(
      CurvedAnimation(
        parent: sbarAnimationController,
        curve: Curves.easeInOut,
      ),
    );

  }

下面是小部件的代码

  @override
  Widget build(BuildContext context) {
    return Scaffold(

      body: Container(
        color: kBackgroundColor,
        child: Stack(

          children: [
            SafeArea(
              //so the background covers the entire app..
              child: Column(
                children: [
                  HomeScreenNavBar(),                     
                  ExploreCourseList(),
                ],
              ),
            ),

            SlideTransition(

              position: sbarAnimation,   // this is where i call the _animation

              child: SafeArea(
                child: SidebarScreen(),
                bottom: false,  
              ),
            ),
          ],

        ),
      ),
    );
  }
}

下面是我不断遇到的错误,我见过的大多数解决方案都做了完全相同的事情,他们的工作正常,但我的却给出了这个错误。请问我应该怎么做。

稍后使用 late 关键字初始化变量,就像您在 initState

中所做的那样
late Animation<Offset> sbarAnimation;
late AnimationController sbarAnimationController;

有两种方法可以解决这个问题。

  1. 已由 Juan Carlos Ramón Condezo 回答,使用 late 关键字,您必须在使用任何地方之前对其进行初始化。

  2. 您可以使变量可为空。通过使用 '?'声明变量类型后。

Animation?<Offset> sbarAnimation;
AnimationController? sbarAnimationController;

因此,您可以检查变量是否为空,并在需要时对其进行初始化。