如何在不使用 SafeArea 的情况下检查设备是不是有缺口?

Posted

技术标签:

【中文标题】如何在不使用 SafeArea 的情况下检查设备是不是有缺口?【英文标题】:How can i check that device has notch without using SafeArea in flutter?如何在不使用 SafeArea 的情况下检查设备是否有缺口? 【发布时间】:2021-10-20 21:17:11 【问题描述】:

我正在设计一个视频通话屏幕,我必须在孔屏幕之间管理 selfViewContainer。

在这个屏幕上,我已经管理了大部分用于水平对齐的部分,但是对于 vertical,它在有凹槽的设备中无法正常工作。

我想在拖动时从顶部最小填充 50

这是可拖动的橙色容器的代码

Widget _selfView() 

    return Positioned(
      top: _selfViewTop,
      left: _selfViewLeft,
      child: Draggable(
        feedback: _draggableView(),
        childWhenDragging: Container(),
        child: _draggableView(),
        onDragEnd: (dragDetail) 
          var screenWidth = AspectSize.getScreenWidth(context: context);
          var screenHeight = AspectSize.getScreenHeight(context: context);

          _selfViewLeft = dragDetail.offset.dx;
          _selfViewTop = dragDetail.offset.dy;

          if (_selfViewLeft < (screenWidth / 2)) 
            _selfViewLeft = 16.0;
           else if (_selfViewLeft > (screenWidth / 2)) 
            _selfViewLeft = (screenWidth) - (_selfViewWidth + 16);
          

          if (_selfViewLeft < 1.0) 
            _selfViewLeft = 16.0;
           else if ((_selfViewLeft + _selfViewWidth) > screenWidth) 
            _selfViewLeft = (screenWidth) - (_selfViewWidth + 16);
          
          if (_selfViewTop < 1.0) 
            _selfViewTop = 50;
           else if ((_selfViewTop + _selfViewHeight) > screenHeight) 
            _selfViewTop = (screenHeight) - (_selfViewWidth + 50);
          

          setState(() );
        ,
      ),
    );
  

对于这个 UI,我使用 Stack 小部件来管理容器,橙色容器用于显示呼叫者屏幕,蓝色容器将显示另一个人的照片。

请给我一些解决方案。

谢谢。

【问题讨论】:

【参考方案1】:

你可以使用 MediaQuery.of(context).viewPadding 并检查填充是否大于零,然后你需要一个安全区域,因为有一个缺口 .

处理缺口行为的最佳方法是使用flutter_device_type 包。

上述包中的以下代码可以确定缺口:

if( Device.get().hasNotch )
//Do some notch business
 

谢谢。

【讨论】:

以上是关于如何在不使用 SafeArea 的情况下检查设备是不是有缺口?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用对象的情况下检查 DataGridViewComboBoxColumn 中的项目?

如何在不使用 sqrt 的情况下检查整数是不是是完美的正方形 [重复]

iOS 11 中的 SafeArea:如何在没有安全区域的情况下使用自定义导航栏在主屏幕上添加来自 Objective-c 代码的视图

如何在不使用额外空间的情况下检查双向链表是不是为回文?

如何在不插入的情况下检查 std::map 是不是包含键?

如何在不使用 GPS、加速度计的情况下检测设备是不是静止