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 — это мини-приложение, которое упрощает заполнение обоих экранов при развертывании приложения. Оно также упрощает использование макетов для планшетов, настольных компьютеров и более крупных экранов.
Диалоговые окна и всплывающие меню учитывают функции отображения и не допускают их перекрытия. Чтобы лучше управлять размещением диалогов и поведением всплывающих окон, ознакомьтесь со статьей Маршруты всплывающих окон с поддержкой петли .