Share via


Rutas emergentes compatibles con bisagra flutter

Cuando la aplicación se distribuye en Surface Duo, los cuadros de diálogo van en la primera pantalla, que es la pantalla izquierda para las configuraciones de izquierda a derecha. El parámetro anchorPoint opcional del showDialog método permite invalidar este comportamiento. Los menús emergentes evitan la bisagra de forma predeterminada. Si el código tiene rutas modales personalizadas, puede encapsularlas con DisplayFeatureSubScreen para evitar superponer la bisagra.

De forma predeterminada, este cuadro de diálogo se muestra en la pantalla izquierda para las configuraciones de izquierda a derecha y la pantalla derecha para las configuraciones de derecha a izquierda:

showDialog(
    context: context,
    builder: (_) => AlertDialog(
        title: Text("Hinge Aware Dialog"),
        content: Text("Going on the left screen"),
    ),
);

Cuadro de diálogo flutter de Surface Duo en la pantalla izquierda

Podemos forzar que el cuadro de diálogo vaya a la pantalla derecha mediante el anchorPoint parámetro . Esto funciona como un destino que se puede usar para seleccionar la pantalla deseada:

showDialog(
    context: context,
    builder: (_) => AlertDialog(
        title: Text("Hinge Aware Dialog"),
        content: Text("Going on the right screen"),
    ),
    anchorPoint: Offset(1000, 1000),
);

Cuadro de diálogo flutter de Surface Duo en la pantalla derecha

Rutas personalizadas

Es posible que tengas tus propias clases de ruta modal o emergente en tu aplicación, que quieres hacer que sea compatible con la bisagra. Use el widget para ajustar la DisplayFeatureSubScreen ruta modal. Agréguelo en la parte superior del diseño de ruta para evitar la bisagra. Este widget también toma un anchorPoint parámetro:

class _MyRoute<T> extends PopupRoute<T> {
    @override
    Widget buildPage(BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation) {
        return DisplayFeatureSubScreen(
            child: _myPageLayout(), // the previous content of buildPage
            anchorPoint: Offset.infinite,
        );
    }
}