web-dev-qa-db-ja.com

Flutterアプリで基本ルートをリセットする方法-ルートをポップし、ナビゲーターを使用してルートを新しいルートに置き換える

これが明らかな場合は許してくださいFlutterの新機能ですが、ドキュメントを読み、ナビゲーターのオプションをいくつか試しましたが、どれも希望どおりに機能しません。問題セット:ログイン/認可/登録プロセスを処理する複雑な(まあ、半複雑な)一連の画面などがあります。これは、ルートスタックで3レベルまたは4レベルに低下する可能性があります。これで問題ありません。心配する必要はありません。

問題は、(いくつかの異なるパスから)成功した​​ログインイベントを取得し、「ホーム」ページに移動したいときに発生します。ルートツリーの新しい「ルート」になるはずのホームページに到達したら(これは正しい用語ではないに違いありませんが、その考え方は確かです)。

したがって、1/2/3または4レベル下になり、スタック全体を(任意の遷移イベントで)「ポップ」して、新しい最上位ルートに置き換えたい場合、どのような魔法のナビゲーターセットまたはメソッドがきれいにこれを行いますか?

私の現在の(恐ろしい)アプローチは、レベルを「pop()」に渡してNavigator.pushReplacementNamed()呼び出しを実行することです(これらはすべて名前付きルートです)が、これは一般的な解決策ではありません(レベルの数を正確に把握する必要があります)さらに悪いことに、それは画面上で各pop()の1秒間に「ポップ」への「アニメーション」遷移を引き起こします。

TIA!

10
sjmcdowall

ナビゲーターはpopだけではありません。次のようなことができます。

Navigator.pushNamedAndRemoveUntil(context, '/', (_) => false);

これは基本的にホームをプッシュして削除しますall新しいルートの背後にあるルート

23
Rémi Rousselet

このコードを試してください:

    Navigator.pushAndRemoveUntil(
                    context,
                    MaterialPageRoute(
                      builder: (BuildContext context) => YourInitialPage(),
                    ),
                    ModalRoute.withName('/'));

トランジションが必要ない場合は、MaterialPageRouteクラスをオーバーライドまたは拡張できます

1
diegoveloper