使用 ScaffoldMessenger 显示自定义小部件

Show custom widget with ScaffoldMessenger

我希望在我的应用程序中有一个小部件,其运行方式与 MaterialBannerScaffoldMessenger 的运行方式大致相同。但是我想自定义横幅的外观。

有没有办法自定义 MaterialBanner 的外观?在我最初的实验中,我考虑过扩展它,但最后我发现这并没有真正奏效。还有一瞬间,我认为在我对 showMaterialBanner 的调用中输入自定义小部件可能会起作用,但很快就排除了这种可能性。

有几件事我正在努力弄清楚如何通过 MaterialBanner 小部件解决问题,如果仍然可行的话:

编辑:example 显示了我认为您正在寻找的内容。

A​​ MaterialBanner 已经可以自定义了。将您想要的小部件放在 content 参数或操作列表中。

ScaffoldMessenger.of(context).showMaterialBanner(
  MaterialBanner(
    content: const Text('This is a MaterialBanner'), // <- This can be whatever you want
    actions: <Widget>[
      TextButton(
        onPressed: () => ScaffoldMessenger.of(context).hideCurrentMaterialBanner(),
        child: const Text('DISMISS'), 
      ), // <- So can these
    ],
  ),
);

您可以在您的应用主题中更改 MaterialBanner(外部小部件)的样式:

MaterialApp(
  .
  .
  theme: ThemeData(
    .
    .
    .
    bannerTheme: MaterialBannerThemeData(
      backgroundColor: ,
      contentTextStyle: ,
      elevation: ,
      leadingPadding: ,
    ),
  ),
);

如果你想改变内部小部件的结构,你可以将任何小部件传递给 content :

MaterialBanner(
  content: Row(
    children: const[
      Icon(Icons.check),
      Expanded(
        child: Text('This is a MaterialBanner'),
      ),
    ],
  ),
  actions: [
    TextButton(
      onPressed: () => ScaffoldMessenger.of(context).hideCurrentMaterialBanner(),
      child: const Text('DISMISS'),
    ),
  ],
);