Флуттер Медиакуери для Surface Duo

Важно!

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

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

Новые свойства Медиакуери

  • displayFeatures -> List<DisplayFeature> — Области экрана, которые могут быть отключены аппаратными компонентами.
  • hinge -> DisplayFeature? - hinge -> DisplayFeature? Область экрана, которая затронула около петель.

Функции экрана

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

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

Свойства объекта DisplayFeature :

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

Свойство hinge.

Из трех типов функций вывода, cutout а fold типы будут использоваться реже. Вы уже используете SafeArea для предотвращения cutout функций, и вам не нужно избегать fold функций, так как отображение непрерывно. hingeСвойство было добавлено в MediaQuery качестве удобного способа получения шарнира без необходимости фильтрации displayFeatures списка. Его можно просмотреть в виде ярлыка, который упрощает чтение кода. Это реализация в DART:

DisplayFeature? get hinge {
    for (DisplayFeature e in displayFeatures) {
      if (e.type == DisplayFeatureType.hinge) return e;
    }
    return null;
  }

Значение hinge будет равно null, если устройство не имеет шарнира, или если приложение не является составным и поэтому шарнир не перекрывает наше приложение. Ниже приведен пример того, как можно понять, есть ли у экрана, доступного для приложения, на шарнир:

final hinge = MediaQuery.of(context).hinge;
if (hinge==null) {
    print('No hinge');
} else {
    print('Hinge is ${hinge.bounds.width} logical pixels wide');
}

Работая со hinge свойством, вы можете легко адаптировать макеты для Surface Duo, используя мини-приложение hinge , чтобы еще больше упростить определение макета, который масштабируется для Surface Duo, но также для планшетов и настольных компьютеров.