Flutter Navigation push() 和 pop(),填满堆栈?

Fuz*_*per 6 dart flutter

在 Flutter 中构建应用程序,我想使用导航抽屉并添加了一些 FlatButtons。每个FlatButton都有一个onPressed()方法,我可以Navigator.push()移动到所需的页面,它工作得很好。

我想知道这是否会随着时间的推移填满内存,因为我总是在推送但从不从堆栈中弹出页面。总是将 aNavigator.pop()与 aNavigator.push()连续组合似乎有点奇怪,而且与良好实践相去甚远。

也许有人可以启发我了解正确的方法。

Rém*_*let 6

这确实会导致潜在的内存问题。为了解决这个问题,你可以弹出不需要的路由。您还可以添加自定义NavigatorObserver来添加历史限制。

例子:

class HistoryLimit extends NavigatorObserver {
  final int limit;
  final history = <Route>[];

  HistoryLimit([this.limit = 42]);


  @override
  void didReplace({Route<dynamic> newRoute, Route<dynamic> oldRoute}) {
    final index = history.indexOf(oldRoute);
    history[index] = newRoute;
  }


  @override
  void didPush(Route route, Route previousRoute) {
    history.add(route);
    if (history.length >= limit) {
      this.navigator.removeRoute(history.first);
    }
  }

  @override
  void didPop(Route route, Route previousRoute) {
    history.remove(route);
  }

  @override
  void didRemove(Route route, Route previousRoute) {
    history.remove(route);
  }
}
Run Code Online (Sandbox Code Playgroud)

您可以通过在此处添加它来使用它:

MaterialApp(
  navigatorObservers: [
   HistoryLimit(10) 
  ],
  ...
)
Run Code Online (Sandbox Code Playgroud)


Gün*_*uer 3

Navigator.pop()当您希望后退按钮导航到上一个路线时使用。在这种情况下,是的,堆栈不断填满。

还有其他方法,例如

用新路线替换当前路线。这样您就无法使用 Android 后退按钮返回之前的每条路线。