Dart 安全区域在颤振持续底板中不工作

Dart 安全区域在颤振持续底板中不工作,dart,flutter,Dart,Flutter,我使用MaterialApp和脚手架+安全区域作为屏幕。在我尝试使用持久的底部工作表之前,一切都很好。底页内容在系统控件下方显示,例如在iPhone X中 我试图用另一个SafeArea元素来包装底部的内容,但没有用 有没有一种方法可以在底部工作时获得与SafeArea相同的功能?如果是,那怎么办 我试用了这段简单的代码,它在iPhone X的iOS模拟器中正常工作: import 'package:flutter/material.dart'; void main() => runAp

我使用MaterialApp和脚手架+安全区域作为屏幕。在我尝试使用持久的底部工作表之前,一切都很好。底页内容在系统控件下方显示,例如在iPhone X中

我试图用另一个SafeArea元素来包装底部的内容,但没有用


有没有一种方法可以在底部工作时获得与SafeArea相同的功能?如果是,那怎么办

我试用了这段简单的代码,它在iPhone X的iOS模拟器中正常工作:

import 'package:flutter/material.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
        title: 'Flutter Demo',
        theme: new ThemeData(
          primarySwatch: Colors.blue,
        ),
        home: new SafeArea(
          child: new Scaffold(
            appBar: new AppBar(
              title: new Text('SafeArea demo'),
            ),
            body: new Center(
              child: new TapMe(),
            ),
          ),
        ));
  }
}

class TapMe extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new RaisedButton(
      child: new Text('Tap Me'),
      onPressed: () => Scaffold
          .of(context)
          .showBottomSheet((context) => new Text('I\'ve been tapped')),
    );
  }
}

您使用的是哪个版本的颤振?

只需将showModalBottomSheet的根小部件设置为安全区域小部件即可

showModalBottomSheet<void>(
    context: context,
    builder: (BuildContext context) {
      return SafeArea(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: <Widget>[...
showModalBottomSheet(
上下文:上下文,
生成器:(BuildContext上下文){
返回安全区(
子:列(
mainAxisSize:mainAxisSize.min,
儿童:[…]。。。

我也遇到了这个问题。当我将代码从
showModalBottomSheet
更改为
\u scaffoldKey.currentState.showBottomSheet
my
SafeArea
停止工作时

您可以通过以下步骤解决此问题:

  • 为脚手架创建密钥
    GlobalKey\u scaffoldKey=GlobalKey();
  • 将创建的密钥分配给脚手架
    密钥:\u scaffoldKey,
  • 将底部填充设置为底部板材
    padding:EdgeInsets.only(底部:MediaQuery.of(\u scaffoldKey.currentState.context).viewPadding.bottom)
  • 结果是,我在顶部、左侧和右侧添加了15个填充


    在我的例子中,最安全的区域是问题所在,一个实际的解决方法是使用AppBar()将填充设置为AppBar的高度。preferredSize.height

    Padding(
              padding: EdgeInsets.fromLTRB(0,AppBar().preferredSize.height,0,0),
              child: Text(
                'Your Order',
                style: headingMediumBlack,
              ),
            ),
    

    您可以发布一段代码来重现错误吗?只需尝试使用showBottomSheet创建任何持久的底部表单,并在iPhone X上运行它。您要求人们做大量工作来开始帮助您解决问题。您应该创建一个最小的、完整的、可验证的示例,按照此处的指导原则创建底部表单是一个简单的过程工作范围?关于如何重复这一点的说明很清楚。如果您无法帮助,那么为什么要发表评论?也许最好在github上提交一个问题,并附上代码和屏幕截图。我想它应该在开箱即用的情况下使用SafeArea。我想如果您将脚手架本身放在SafeArea中,它会工作。但它正确吗?它确实不正确。工具栏变成black和底部区域也是。你是对的。我可以尝试修改代码,但我不确定你所说的iPhone X上的系统控件下面显示的是什么意思。你能给出一个屏幕截图来显示你的意思吗?仅仅
    SafeArea
    是不够的。一定要同时为
    SafeArea
    设置
    top:false
    ,否则底部将得到顶部填充正在运行。仅通过忽略
    top
    我才能获得此答案屏幕截图上的结果。在颤振1.22.4上检查。P.S.编辑答案以将
    top
    添加到代码片段中,但它只有在同行审查后才会出现。