flutter:如何防止Scaffold抽屉被重建?

问题描述 投票:0回答:1

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);
       ...
    }
}
flutter keep-alive drawer
1个回答
0
投票

这就是

DrawerController
的内部工作原理,当动画消失或抽屉完成(隐藏)时,控制器显示一个空的小部件,因此该小部件被销毁,下次重新创建该小部件。

您可以将变量从父状态传递到小部件或在抽屉内使用 Provider/Bloc/等:

Scaffold(
  drawer: Drawer(child: MyWidget(myParamsFromParentState)),
  body: ...
);
© www.soinside.com 2019 - 2024. All rights reserved.