flutter:如何防止Scaffold抽屉被重建?
Scaffold(
drawer: Drawer(child.MyWidget),
body: ...
);
每次关闭和打开抽屉时,抽屉内的小部件树都会被重建,所有状态信息都将丢失。例如,可折叠选项卡/树节点打开/关闭状态和文本输入等
尝试过自动保持活动:
Scaffold(
drawer: AutomaticKeepAlive(child: Drawer(child.MyWidget)),
body: ...
);
class MyWidget extends StatefuleWidget {
@override
State<MyWidget> createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> with AutomaticKeepAliveClientMixin {
bool wantKeepAlive => true;
Widget build(BuildContext context) {
super.build(context);
...
}
}
这就是
DrawerController
的内部工作原理,当动画消失或抽屉完成(隐藏)时,控制器显示一个空的小部件,因此该小部件被销毁,下次重新创建该小部件。
您可以将变量从父状态传递到小部件或在抽屉内使用 Provider/Bloc/等:
Scaffold(
drawer: Drawer(child: MyWidget(myParamsFromParentState)),
body: ...
);