dart Flutter超越主航路的小部件

vcirk6k6  于 2023-01-18  发布在  Flutter
关注(0)|答案(1)|浏览(136)

我有一个AppBar小部件在我的小部件树的顶部。我想用一个孩子的小部件的appbar "覆盖"这个AppBar。我查找了InheritedWidget,但不喜欢它,因为我不喜欢一直管理状态。我如何有效地-用最少的代码量-克服这个问题呢?

    • 主省道**
... Scaffold(appBar: AppBar(title: 'My App'), body: ChildPage())
      ........
    • 子页面. dart**
... Scaffold(appBar: AppBar(title: 'My App'), leading: ..., actions: ...)
xqkwcwgp

xqkwcwgp1#

如果我理解正确的话,您希望有一个父屏幕,其中包含多个子屏幕,这些子屏幕共享父屏幕属性并对其进行自定义。
首先,根据API Documentation,单个屏幕/路径不应有多个Scaffold。
Scaffold被设计为MaterialApp的顶级容器。这意味着将Scaffold添加到Material App上的每个路径将为该App提供Material的基本视觉布局结构。
因此,你的问题的简短答案是,没有办法完全实现你所要求的。
不过也有一些替代方案。

  • 您可以将AppBar提取到小部件或方法中。
  • 一个更好的替代方案(可以适用于应用中的几乎所有内容)是定义一个应用主题,其中包含您希望AppBar拥有的所有属性,然后在每个屏幕上覆盖这些属性。

举个简单的例子:

MaterialApp(
  title: 'Flutter Demo',
  theme: ThemeData(
    appBarTheme: AppBarTheme(
      elevation: 0,
    ),
    primarySwatch: Colors.blue,
  ),
  home: const MyHomePage(title: 'Flutter Demo Home Page'),
);

相关问题