Поделиться через


Flutter MediaQuery для Surface Duo

Когда приложение распространяется на оба экрана Surface Duo, холст содержит оба экрана и область петли между ними. Петля — это элемент дисплея , и вы можете использовать MediaQuery, чтобы узнать, где он находится на экране. MediaQuery имеет свойство с именем displayFeatures , которое выводит список всех областей дисплея, которые заблокированы аппаратными функциями.

int featuresCount = MediaQuery.of(context).displayFeatures.length;

Метод расширения "Петля"

Чтобы упростить работу с шарнём на Surface Duo, рекомендуется добавить метод расширения в MediaQueryData. Это позволяет напрямую работать с MediaQuery.of(context).hinge. Если шарню нет на устройстве, значение будет иметь значение NULL.

/// Extension method that helps with working with the hinge directly. 
extension MediaQueryHinge on MediaQueryData { 
  DisplayFeature? get hinge { 
    for (final DisplayFeature e in displayFeatures) { 
      if (e.type == DisplayFeatureType.hinge) 
        return e; 
    } 
    return null; 
  } 
}

Проверка наличия петли:

bool hasHinge = MediaQuery.of(context).hinge != null;

Функции отображения

Функции отображения — это области дисплея, которые могут быть нефункциональными или затрудненными. Структура классов для них:

class DisplayFeature {
    final Rect bounds;
    final DisplayFeatureType type;
    final DisplayFeatureState state;
}

Свойства DisplayFeature:

  • bounds - Rect область представления, занятая этой функцией отображения
  • type — Перечисление для типов функций отображения:
    • hinge — физический разделитель между двумя дисплеями устройства. Surface Duo имеет функцию hinge отображения. Тип функции отображения: Петля
    • fold — просмотрите его как объект с нулевой hinge шириной. Он определяет, где гибкий дисплей имеет складку. Тип функции отображения: свертка
    • cutout - Сидит на краю дисплея и, как правило, дома камеры системы. Тип функции отображения: вырез
  • state — Перечисление для положения функции отображения, которая заполняется только для складок и петли. Для вырезов это unknown. Это точно соответствует определению поз из Android.
    • halfOpened - Шарнира складного устройства находится в промежуточном положении между открытым и закрытым состоянием, между частями гибкого экрана или между физическими панелями экрана имеется неплоский угол.
    • flat - Складное устройство полностью открыто, пространство экрана, которое представляется пользователю, является плоским.
    • unknown — Состояние неизвестно либо потому, что оно является новым и не поддерживается, либо, в случае cutout признаков, оно не заполнено.

Компоненты более высокого уровня

Мы рекомендуем работать с компонентами более высокого уровня, если ваш проект подходит для них. TwoPane — это мини-приложение, которое упрощает заполнение обоих экранов при развертывании приложения. Оно также упрощает использование макетов для планшетов, настольных компьютеров и более крупных экранов.

Диалоговые окна и всплывающие меню учитывают функции отображения и не допускают их перекрытия. Чтобы лучше управлять размещением диалогов и поведением всплывающих окон, ознакомьтесь со статьей Маршруты всплывающих окон с поддержкой петли .