[英]LateInitializationError: Field 'controller' has not been initialized
我在 SideBarWidget() 中使用SideBar()
小部件並在我的主屏幕SideBarScreen()
SideBarWidget()
使用它,但我無法在Sidebar()
小部件中初始化controller
...我該如何解決這個問題
側邊欄_屏幕
class _SideBarScreenState extends State<SideBarScreen> {
@override
Widget build(BuildContext context) {
return SafeArea(
child: Stack(
children: [
ScaffoldScreen(
iconButton: IconButton(
onPressed: () {SideBarWidget().toggle();},
icon: kScaffoldScreenButtonIcon,
),
),
SideBarWidget(),
],
),
);
}
}
側邊欄控件
class SideBarWidget extends StatelessWidget {
SideBarWidget({Key? key}) : super(key: key);
void toggle() {
SideBarState().toggle();
}
late final SideBar sideBarWidget = SideBar();
@override
Widget build(BuildContext context) {
return sideBarWidget;
}
}
側邊欄
class SideBar extends StatefulWidget {}
class SideBarState extends State<SideBar> with SingleTickerProviderStateMixin{
late AnimationController controller;
late Animation<Offset> _offsetAnimation;
@override
void initState() {
super.initState();
controller = AnimationController(vsync: this, duration: const Duration(seconds: 2));
_offsetAnimation = Tween<Offset>(
begin: const Offset(-1.0, 0.0),
end: const Offset(0.0, 0.0),
).animate(CurvedAnimation(parent: controller, curve: Curves.easeOut));
}
@override
void dispose() {
controller.dispose();
super.dispose();
}
void toggle() {
if (controller.isCompleted) {
controller.reverse();
}
else {controller.forward();}
}
@override
Widget build(BuildContext context) {
return SlideTransition();
}
}
這給出了錯誤LateInitializationError: Field 'controller' has not been initialized。
我嘗試將controller
作為參數傳遞給SideBar()
但它給出了一個異常:此小部件已被卸載,因此 State 不再具有上下文(並且應被視為已失效)。
問題是每次調用SideBarWidget().toggle()
時都會創建一個新的SideBar
實例。 相反,您應該使用SideBar
的相同實例,以便保留 state。
class SideBarWidget extends StatelessWidget {
SideBarWidget({Key? key}) : super(key: key);
final sideBar = SideBar();
void toggle() {
sideBar.state.toggle();
}
@override
Widget build(BuildContext context) {
return sideBar;
}
}
所以現在你每次都使用同一個SideBar
實例,你不需要傳遞任何參數。
筆記:
為此,您還需要將SideBar
class 更改為StatefulWidget
class SideBar extends StatefulWidget {
@override
_SideBarState createState() => _SideBarState();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.