Угол петли на флаттере

Петля на устройстве Surface Duo и других складных устройствах оснащена датчиком, который сообщает об угле между двумя экранами. Значение угла петли в диапазоне от 0 до 360:

  • 0 — экраны обращены друг к другу и не видны. Устройство закрыто.
  • 90 — устройство представляет собой форму "L" с внутренними экранами, иногда называемой режимом ноутбука, столешницы или книги.
  • 180 — устройство является плоским. Экраны обращены в одном направлении.
  • 360 — экраны находятся в противоположных направлениях, и работает только один экран.

Осанка устройства и угол шарнирования

Угол петли уже используется для вычисления положения устройства. Состояние устройства уже доступно через MediaQuery , но бывают ситуации, когда сам угол петли важен для вашего приложения. Эти необработанные данные не являются частью MediaQuery, так как они слишком часто обновляют все приложение. Для доступа к этим данным можно использовать подключаемый модуль Dual_screen Flutter.

Измерение угла петли

Добавьте dual_screen в раздел pub.dev dependencies .

dependencies:
  dual_screen: ^1.0.2+2

Импортируйте и используйте в файлах dart.

import 'package:dual_screen/dual_screen_info.dart';

DualScreenInfo.hingeAngleEvents.listen((double hingeAngle) {
  print(hingeAngle);
});

DualScreenInfo.hasHingeAngleSensor.then((bool hasHingeSensor) {
  print(hasHingeSensor);
});

Теперь у вас есть доступ к двум новым статическим свойствам:

  • hingeAngleEvents: широковещательный поток событий с датчика угла петли устройства. Если устройство не оснащено датчиком угла петли, поток не создает никаких событий.
  • hasHingeAngleSensor: в будущем возвращается значение true, если устройство имеет датчик угла петли. Кроме того, если ваше приложение уже использует MediaQuery.displayFeatures или MediaQuery.hinge для адаптации к складным или двухэкранным форм-факторам, можно с уверенностью предположить, что датчик угла шарнирования существует и создает hingeAngleEvents пригодные для использования значения.

Образец

На этой странице GitHub доступен пример с открытым кодом. Вы можете протестировать его с помощью обычных складных эмуляторов, доступных в Android Studio, или с помощью эмулятора Surface Duo.

Пример dual_screen Flutter в эмуляторе Surface Duo

Разница между эмулятором Surface Duo и другими устройствами и эмуляторами заключается в том, что он поддерживает угол наклона от 0 до 360 градусов, а также имеет два отдельных экрана.

Пример dual_screen Flutter, работающий в складном эмуляторе Android Studio