【发布时间】:2023-01-31 03:26:26
【问题描述】:
我在 SideBarWidget() 中使用 SideBar() 小部件并在我的主屏幕 SideBarScreen() 中使用它
但我无法在 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:字段“控制器”尚未初始化。
我尝试将 controller 作为参数传递给 SideBar() 但它发出异常:此小部件已被卸载,因此 State 不再具有上下文(并且应被视为已失效)。
【问题讨论】:
-
你如何在 SideBar Widget 类中调用 toggle ?
-
@eamirho3ein 我使用
SideBarState().toggle();我可以使用它因为SIdeBar的状态不是私有的
标签: flutter dart controller initialization