【问题标题】:How do I check if device needs SafeArea? (needs bottom/top padding)如何检查设备是否需要 SafeArea? (需要底部/顶部填充)
【发布时间】:2020-03-09 22:24:41
【问题描述】:

有没有一种方法可以检查运行应用程序的设备是否需要 SafeArea。我需要根据这个真假值运行代码。我不需要使用 SafeArea 小部件。如果设备需要填充,我只需要正确或错误的答案。

例如。像 iPhone 8 这样的设备不需要填充,即使 Widget 被包裹在 SafeArea 小部件中也不会有填充。

例如。像 iPhone X 这样的设备确实需要填充,如果 Widget 被包裹在 SafeArea 中,那么它们也会有填充。

SafeArea 小部件如何判断设备是否需要填充?我查看了 SafeArea 小部件代码,但无法理解如何告诉它设备是否需要填充。

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    您可以使用MediaQuery 并从中获取viewPadding

    MediaQuery.of(context).viewPadding
    

    【讨论】:

    • 这应该是 Flutter 的正确答案
    【解决方案2】:

    您可以检查顶部和底部填充是否 > 0 以查看用户的设备是否有凹口:

    window.viewPadding
    

    以下是 iPhone 11 Pro Max 的示例:

    【讨论】:

    • 这帮助我实现了我所需要的。我仔细检查了多个设备,无论是否需要 SafeArea。谢谢。
    • 注意:这与 MediaQuery.of(context).viewPadding 有很大不同。对我来说 MediaQuery.of(context).viewPadding 没有产生任何东西,但是这样做了。再次感谢。
    • 这是处理 iOS 设备底部空间的最佳方式。谢谢
    • @punjabi4life 您在自定义应用栏中使用 window.viewPadding 吗?
    • 这适用于 iOS,但似乎不适用于 Android。
    【解决方案3】:

    预测SafeArea()是否需要的最佳方法可以根据您是否使用过Scaffold()小部件来推断。

    假设您没有在页面或路由中使用 Scaffold 小部件,那么您应该将其包装在 SafeArea() 中,否则它也会将您的巴塞尔部件或状态栏或凹槽视为您的屏幕主体。

    另外,如果你使用了Scaffold(),但你没有在其中包含 appbar,那么你必须将你的 body 包裹在 SafeArea() 中,以确保屏幕不会将状态栏或巴塞尔或缺口视为安全部分屏幕。

    【讨论】:

    • SliverAppBar 也与AppBar 一样工作。总结,如果有AppBar,则不需要SafeArea
    猜你喜欢
    • 2020-10-24
    • 2014-08-28
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    • 2014-10-13
    • 1970-01-01
    • 2017-12-25
    • 1970-01-01
    相关资源
    最近更新 更多