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;
有两种方法可以解决这个问题。
已由 Juan Carlos Ramón Condezo 回答,使用 late 关键字,您必须在使用任何地方之前对其进行初始化。
您可以使变量可为空。通过使用 '?'声明变量类型后。
Animation?<Offset> sbarAnimation;
AnimationController? sbarAnimationController;
因此,您可以检查变量是否为空,并在需要时对其进行初始化。
我是 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;
有两种方法可以解决这个问题。
已由 Juan Carlos Ramón Condezo 回答,使用 late 关键字,您必须在使用任何地方之前对其进行初始化。
您可以使变量可为空。通过使用 '?'声明变量类型后。
Animation?<Offset> sbarAnimation;
AnimationController? sbarAnimationController;
因此,您可以检查变量是否为空,并在需要时对其进行初始化。