flutter 安全区域在showModalBottomSheet中不工作

z9smfwbn  于 2022-12-19  发布在  Flutter
关注(0)|答案(2)|浏览(266)

Safearea()没有正确 Package showModalBottomSheet。我需要在状态栏下显示模态。

class ModalBottomSheet {
  static void renderModalBottomSheet(BuildContext context, Widget widget) {
    showModalBottomSheet(
      isScrollControlled: true,
      shape: const RoundedRectangleBorder(
        borderRadius: BorderRadius.vertical(
          top: Radius.circular(border2),
        ),
      ),
      context: context,
      builder: (BuildContext context) {
        return SafeArea(
          child: Container(
            padding: EdgeInsets.only(
              bottom: MediaQuery.of(context).viewInsets.bottom,
            ),
            child: widget,
          ),
        );
      },
    );
  }
}

我尝试了以下解决方案,但仍然无法正常工作

MediaQuery.of(context).padding.top

MediaQueryData.fromWindow(WidgetsBinding.instance.window).padding.top

更新:
我设法用这种方法解决了它。
把这个加到底页

backgroundColor: Colors.transparent,

和填充顶部

top: MediaQuery.of(context).padding.top,

完整代码:

class ModalBottomSheet {
  static void renderModalBottomSheet(BuildContext context, Widget widget) {
    showModalBottomSheet(
      isScrollControlled: true,
      backgroundColor: Colors.transparent,
      context: context,
      builder: (_) {
        return SafeArea(
          child: Padding(
            padding: EdgeInsets.only(
              top: MediaQuery.of(context).padding.top,
              bottom: MediaQuery.of(context).viewInsets.bottom,
            ),
            child: widget,
          ),
        );
      },
    );
  }
}

你的子部件可以用边界半径和颜色来代替。
开放式键盘

封闭式键盘

unguejic

unguejic1#

试试这个。如果不起作用,请参考page

showModalBottomSheet<void>(
    context: context,
    builder: (BuildContext context) {
      return SafeArea(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: <Widget>[...
rslzwgfq

rslzwgfq2#

你应该在showModalBottomSheet之前得到MediaQuery.of(context).viewPadding.top,并将其传递到工作表内部,然后在工作表内部使用EdgeInsets.top

相关问题