gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 12:30:00 24 4
gpt4 key购买 nike

我正在尝试创建一个统一的抽屉,可以在我的应用中的所有页面上访问。如何让它在所有这些页面中持续存在,而不必在每个 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,以便它可以实际更改其中的页面。

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

关于dart - 在所有页面 Flutter 中持久化 AppBar Drawer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51659805/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com