Condividi tramite


Angolo della cerniera su Flutter

La cerniera su Surface Duo e altri dispositivi piegabili contiene un sensore che indica l'angolo tra i due schermi. Il valore dell'angolo della cerniera è compreso tra 0 e 360:

  • 0 - Gli schermi si trovano l'uno all'altro e non sono visibili. Il dispositivo è chiuso.
  • 90 - Il dispositivo è una forma "L" con le schermate all'interno, talvolta denominata laptop, tavolo o modalità libro.
  • 180 - Il dispositivo è flat. Le schermate si trovano di fronte alla stessa direzione.
  • 360 - Le schermate si trovano di fronte a direzioni opposte e funziona solo uno schermo.

Posizione del dispositivo e angolo della cerniera

L'angolo della cerniera è già utilizzato per calcolare la postura del dispositivo. Il comportamento del dispositivo è già esposto tramite MediaQuery , ma in alcune situazioni l'angolo della cerniera è importante per l'app. Questi dati non elaborati non fanno parte di MediaQuery, perché l'intera app viene aggiornata troppo spesso. Per accedere a questi dati, è possibile usare il plug-in Dual_screen Flutter.

Misurare l'angolo della cerniera

Aggiungere dual_screen alla sezione pub.dev dependencies .

dependencies:
  dual_screen: ^1.0.2+2

Importare e usare nei file dart.

import 'package:dual_screen/dual_screen_info.dart';

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

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

È ora possibile accedere a due nuove proprietà statiche:

  • hingeAngleEvents: trasmissione del flusso di eventi dal sensore dell'angolo della cerniera del dispositivo. Se il dispositivo non è dotato di un sensore dell'angolo della cerniera, il flusso non produce eventi.
  • hasHingeAngleSensor: restituisce true in futuro se il dispositivo ha un sensore dell'angolo della cerniera. In alternativa, se l'app usa MediaQuery.displayFeatures già o MediaQuery.hinge per adattarsi a fattori di forma piegabili o a doppio schermo, è possibile presupporre che il sensore dell'angolo della cerniera esista e che hingeAngleEvents produci valori utilizzabili.

Esempio

In questa pagina GitHub è disponibile un esempio open source. È possibile testarlo usando gli emulatori piegabili normali disponibili in Android Studio o usando l'emulatore di Surface Duo.

Esempio di flutter dual_screen in esecuzione nell'emulatore di Surface Duo

La differenza tra l'emulatore di Surface Duo e altri dispositivi o emulatori è che supporta angoli della cerniera da 0 a 360 gradi e ha anche due schermi separati.

Esempio di flutter dual_screen in esecuzione in un emulatore foldable di Android Studio