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

问题描述 投票:1回答:2

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

我想知道这是否随着时间的推移填满了内存,因为我总是在推,但从不从堆栈中弹出页面。始终将Navigator.pop()Navigator.push()相结合似乎有点奇怪,远离良好的练习。

也许有人可以告诉我正确的方法。

dart flutter
2个回答
2
投票

这确实会导致潜在的内存问题。要解决此问题,您可以弹出不需要的路由。您还可以添加自定义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);
  }
}

你在这里添加它使用的:

MaterialApp(
  navigatorObservers: [
   HistoryLimit(10) 
  ],
  ...
)

1
投票

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

还有其他方法

用新的路线替换当前路线。这样您就无法使用Android后退按钮来浏览每个以前的路径。

© www.soinside.com 2019 - 2024. All rights reserved.