您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在所有页面上都存在AppBar抽屉

在所有页面上都存在AppBar抽屉

有几种不同的选择。最基本的希望是您已经完成的事情,但是无论如何我都会列出它:

您的小部件应该是其自己的有状态或无状态小部件。这样,您只需每次都实例化它。

class MyDrawer extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Drawer(...);
  }
}

然后在每个页面中使用它时:

Scaffold(
  drawer: MyDrawer(...),
  ...
)

希望您已经这样做了;如果不是,你应该是。类的构建函数不应太大,否则会导致性能降低和难以维护代码;从长远来看,将事物分解为逻辑单元将对您有帮助。

为脚手架创建一个

如果必须为每个页面在支架中包含相同的抽屉仍然太多代码,则可以改用封装支架的类。本质上,它将为您实际使用的每个支架输入获取输入。

class MyScaffold extends StatelessWidget {

  final Widget body;

  MyScaffold({this.body});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
     body: body,
     drawer: MyDrawer(...),
    );
  }
}

然后,不要在代码中使用Scaffold,而要使用MyScaffold(但请使用更好的名称= D)。

我只是将这种完成方式包括在内,我不建议这样做。话虽这么说,但在某些情况下,您无法通过Flutter的正常工作流程来完成这些工作,例如,当用户点击抽屉中的不同项目时,是否需要自定义动画。

基本上,在这种情况下,您要做的是在MaterialApp或Navigator外部安装一个Scaffold(我相信这也意味着您必须在此之外另安装一个Navigator,但是我不确定100%)。您将在导航之外的支架上显示抽屉,而另一个支架(在导航内的每个页面上)将做您需要做的其他事情。有一些警告- 您必须确保获得正确的脚手架(即Scaffold.of(context),就其本身而言,它不会削减- 您必须获取一个脚手架的上下文并使用它来找到更高级别的脚手架) ,您可能需要将GlobalKey(位于较低级别的脚手架中)传递给Drawer,以便它实际上可以更改其中的页面

就像我说的那样,我不建议您使用这种方法,因此,我不会再详细介绍它,而是将其作为练习供读者阅读,如果他们想钻研那个兔子洞!

其他 2022/1/1 18:14:13 有330人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶