显示类似于SnackBar的自定义Flutter微件

sqyvllje  于 2023-02-25  发布在  Flutter
关注(0)|答案(1)|浏览(126)

当一些异步数据进入时,我希望在当前屏幕上显示一个小部件。但是,我不希望它是一个SnackBar或MaterialBanner,而是一个具有自己外观和感觉的小部件。
问题是,我还没有能够弄清楚如何确定哪个“屏幕”/路线是当前的;我已经查看了Scaffold.of、RouteObserver、provider和其他一些东西,但是还没有任何东西能够工作。
我也看过ScaffoldMessenger,但还没有弄清楚如何让它显示除了SnackBar或MaterialBanner之外的任何东西。(我知道SnackBar和MaterialBanner都可以自定义,但这不是我想要的。)
为了简化一点,我需要的是下面的xxxxx

static void gotData(Object data) {
      Widget msgbox = messageBox(data); // similar to SnackBar. a message widget.
      globalstuff.msgbox = msgbox;      // my routes will position/display this in each build()
      xxxxx.setState(() {});            // how do i get xxxxx?
    }

这可能看起来很简单/很愚蠢,但我就是没能取得任何进展。

6pp0gazn

6pp0gazn1#

您可以使用叠加来显示您自己的自定义构件,而不是默认的小吃栏。
下面是一个代码片段:

Future<void> showCustomNotification({
  required BuildContext context,
  required Widget child,
}) async {
  OverlayState? overlayState = Overlay.of(context);
  OverlayEntry overlayEntry = OverlayEntry(
    builder: (c) {
      return Positioned(
        bottom: 16,
        left: 0,
        right: 0,
        child: Material(
          color: Colors.transparent,
          child: child,
        ),
      );
    },
  );
  overlayState?.insert(overlayEntry);
  overlayState?.setState(() {});
  await Future.delayed(const Duration(seconds: 1, milliseconds: 500));
  overlayEntry.remove();
}

相关问题