9

Flutter Navigator 2.0 の主なメカニズムの 1 つは、RouterDelegate > build > Navigator 内の関数 onPopPage です。ただし、route.didPop(result) が false を返すタイミングがわかりません。

ジョン・ライアンの有名な例を使用して、私の質問を示します。彼のデモコード

onPopPage: (route, result) {
  if (!route.didPop(result)) {
    return false;
  }

  // Update the list of pages by setting _selectedBook to null
  _selectedBook = null;
  show404 = false;
  notifyListeners();

  return true;
},

すべてのテストで、AppBar の自動生成された戻るボタンを使用すると、route.didPop(result) は true を返します。

ドキュメントはそのままです:

bool didPop(dynamic result)
package:flutter/src/widgets/navigator.dart

A request was made to pop this route. If the route can handle it internally (e.g. because it has its own stack of internal state) then return false, otherwise return true (by returning the value of calling super.didPop). Returning false will prevent the default behavior of [NavigatorState.pop].

When this function returns true, the navigator removes this route from the history but does not yet call [dispose]. Instead, it is the route's responsibility to call [NavigatorState.finalizeRoute], which will in turn call [dispose] on the route. This sequence lets the route perform an exit animation (or some other visual effect) after being popped but prior to being disposed.

This method should call [didComplete] to resolve the [popped] future (and this is all that the default implementation does); routes should not wait for their exit animation to complete before doing so.

See [popped], [didComplete], and [currentResult] for a discussion of the result argument.

しかし、「ルートが内部的にそれを処理できる場合 (たとえば、内部状態の独自のスタックがあるため)、false を返す」という意味ですか? ルートには内部状態の独自のスタックがありますか? この結果を生成する方法は?

ありがとう、ご安全に

4

1 に答える 1