首页 文章

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

提问于
浏览
0

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

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

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

2 回答

  • 1

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

    还有其他方法

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

  • 1

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

相关问题