web-dev-qa-db-ja.com

Flutter:戻ることなく新しい画面に移動する

Flutterアプリに認証フローを実装しています。

サインインの試行後、CheckAuth(ユーザーがサインインしているかどうかを確認し、それに応じてホーム画面またはサインアップ画面を開きます)が開きますこのコードで:

  void _signIn() async {
    await _auth
        .signInWithEmailAndPassword(
            email: _userEmail.trim(), password: _userPassword.trim())
        .then((task) {
      // go to home screen
      if (task.getIdToken() != null) {
        setState(() {
          Navigator.pushReplacement(
              context,
              new MaterialPageRoute(
                  builder: (BuildContext context) => new CheckAuth()));
        });
      } else {
        print("Authentication failed");
      }
    });
  }

問題:アプリに正常にサインインできますが、サインイン後に戻るボタンをタップすると、サインイン画面に戻ります(アプリから終了する予定です)。

質問:戻ることなくFlutterで1つの画面から別の画面に移動する方法

ナビゲーター履歴を何らかの方法で削除する必要がありますか?または、ナビゲーターをまったく使用しませんか? Navigator.replaceメソッドを試しましたが、うまくいかないようでした。

17
Darkhan

終了認証画面でもNavigator.pushReplacementを使用する必要があります。ログインページにリダイレクトするときだけではありません。

46
Rémi Rousselet

使用する必要があります

Navigator
    .of(_context)
    .pushReplacement(new MaterialPageRoute(builder: (BuildContext context) => page));

どこ _contextBuildContextのオブジェクトであり、pageはあなたがどのページに送ったかです。

9
Pullat Junaid

pushAndRemoveUntilメソッドを使用できます。

指定されたコンテキストを最も厳密に囲むナビゲーターに指定されたルートをプッシュし、predicateがtrueを返すまで、以前のすべてのルートを削除します。 プッシュされたルートの下のすべてのルートを削除するには、常にfalseを返す[RoutePredicate]を使用します(例:(Route<dynamic> route) => false)。

Navigator.pushAndRemoveUntil(
  context,
  MaterialPageRoute(builder: (context) => MainPage()),
  (Route<dynamic> route) => false,
);
6
Meysam