簡體   English   中英

Flutter:如何在flutter中從堆棧中彈出上次訪問的屏幕

[英]Flutter: How to pop last visited screen from stack in flutter

假設我有三個屏幕: walletpaymentsadd card 當我在add card屏幕時,我想從堆棧中彈出payments屏幕並將其導航到wallet屏幕,而不使用navigator.push點擊圖標和設備的后退圖標。

請幫助如何做到這一點。

從您的問題中,您的導航堆棧應該如何看起來不是很清楚: payments是堆棧中的第一個,您可以從那里add cardwallet嗎? 還是應該只存在一個?

我認為您可以使用pushReplacementhttps ://api.flutter.dev/flutter/widgets/Navigator/pushReplacement.html

這樣,它會自動將當前路線替換為新路線,並且您的后退按鈕將簡單地關閉應用程序(或返回之前的屏幕)。 如果您在按下后退按鈕時想要一些自定義行為,您可以隨時使用WillPopScopehttps ://api.flutter.dev/flutter/widgets/WillPopScope-class.html

Navigator.removeRoute(context, MaterialPageRoute(builder: (context) => payments()));

刪除付款屏幕時使用此代碼

請嘗試以下代碼

  1. PopAndPushNamed -> 從導航器中彈出當前路線,該路線最緊密地包圍給定上下文,並在其位置推送命名路線。

它從導航堆棧中彈出付款屏幕,並且導航堆棧中僅保留錢包屏幕

Navigator.popAndPushNamed(context, '/addCard');
  1. PushNamedAndRemoveUntil -> 它將具有給定名稱(錢包)的路由推送到導航器上,然后刪除所有先前的路由,直到謂詞返回 true。 這里它使用了一個始終返回 false(Route route)=> false 的 RoutePredicate。 在這種情況下,它會刪除所有路由,除了推送的錢包路由。
//named
Navigator.of(context)
    .pushNamedAndRemoveUntil('\wallets', (Route<dynamic> route) => false);
    
//not named
Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (context) =>
    Wallets()), (Route<dynamic> route) => false),

  1. PopUntil -> 在最緊密地包圍給定上下文的導航器上重復調用 pop,直到謂詞返回 true。 如果 Route.willHandlePopInternally 為真,則謂詞可以多次應用於同一路由。 要彈出直到具有特定名稱的路由,請使用從 ModalRoute.withName 返回的 RoutePredicate。
Navigator.popUntil(context, ModalRoute.withName('/wallets'));

嘗試這個:

Navigator.pushReplacement()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM