dart - 在所有页面 Flutter 中持久化 AppBar Drawer

我正在尝试创建一个统一的抽屉,可以在我的应用中的所有页面上访问。如何让它在所有这些页面中持续存在,而不必在每个 dart 文件中重新创建我的自定义 Drawer 小部件?

最佳答案

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

1:为你的抽屉创建一个类

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

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

然后在每个页面使用的时候:

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

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

2:为你的脚手架创建一个类

如果必须在每个页面的脚手架中包含相同的抽屉仍然需要太多代码,您可以改用封装脚手架的类。它基本上会为您实际使用的每个脚手架输入输入输入。

class MyScaffold extends StatelessWidget {

  final Widget body;

  MyScaffold({this.body});

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

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

3:多级脚手架

我只是为了完整而包含这种方式,我不推荐它。话虽如此,有些事情在 Flutter 的正常工作流程中是无法完成的,但您可以通过这样做来完成 - 例如,如果您想要在用户点击抽屉中的不同项目时自定义动画。

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

正如我所说,我不推荐这种方法,因此我不会再详细介绍,而是将其作为练习留给想要进入兔子洞的读者!

https://stackoverflow.com/questions/51659805/

相关文章:

dart - 如何查看已安装的 Flutter 版本?

testing - Flutter 测试的代码覆盖率数据如何显示?

dart - Flutter:在简历上更新小部件?

dart - Flutter:使用按钮更改标签栏 View 中的当前标签

flutter - 如何在 Flutter 中更改状态栏和应用栏颜色?

flutter - 如何让应用程序保持清醒?

flutter - 没有 ScrollView 的刷新指示器

flutter - 如何在 flutter 中听焦点变化?

visual-studio-code - Visual Studio 代码中的 Flutter 检查

google-maps - 如何在 flutter 的谷歌地图自定义标记中添加额外的文本?