フラッター ヒンジ対応ポップアップ ルート

アプリケーションが Surface Duo にまたがると、最初の画面 (左から右への構成の左側の画面) にダイアログが表示されます。 メソッドのshowDialog省略可能なパラメーターanchorPointを使用すると、この動作をオーバーライドできます。 ポップアップ メニューは、既定ではヒンジを回避します。 コードにカスタム モーダル ルートがある場合は、ヒンジが重ならないように DisplayFeatureSubScreen でラップできます。

既定では、このダイアログは左から右の構成の場合は左側の画面に表示され、右から左の構成の場合は右画面に表示されます。

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

左側の画面の Surface Duo Flutter ダイアログ

パラメーターを使用して、ダイアログを強制的に右の画面に anchorPoint 移動させることができます。 この関数は、目的の画面を選択するために使用できるターゲットと同様に機能します。

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

右側の画面の Surface Duo Flutter ダイアログ

カスタム ルート

独自のモーダル またはポップアップ ルート クラスをアプリに含め、ヒンジ対応にしたい場合があります。 ウィジェットを DisplayFeatureSubScreen 使用してモーダル ルートをラップします。 ルート レイアウトの上部に追加して、ヒンジを回避します。 このウィジェットは、パラメーターも受け取ります anchorPoint

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,
        );
    }
}