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メソッドを試しましたが、うまくいかないようでした。
終了認証画面でもNavigator.pushReplacement
を使用する必要があります。ログインページにリダイレクトするときだけではありません。
使用する必要があります
Navigator
.of(_context)
.pushReplacement(new MaterialPageRoute(builder: (BuildContext context) => page));
どこ _context
はBuildContext
のオブジェクトであり、page
はあなたがどのページに送ったかです。
pushAndRemoveUntil
メソッドを使用できます。
指定されたコンテキストを最も厳密に囲むナビゲーターに指定されたルートをプッシュし、
predicate
がtrueを返すまで、以前のすべてのルートを削除します。 プッシュされたルートの下のすべてのルートを削除するには、常にfalseを返す[RoutePredicate]を使用します(例:(Route<dynamic> route) => false
)。
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(builder: (context) => MainPage()),
(Route<dynamic> route) => false,
);