在Flutter中构建应用程序,我想使用导航抽屉并添加一些FlatButtons。每个FlatButton
有一个onPressed()
方法,我做Navigator.push()
移动到所需的页面,这工作得很好。
我想知道这是否随着时间的推移填满了内存,因为我总是在推,但从不从堆栈中弹出页面。始终将Navigator.pop()
与Navigator.push()
相结合似乎有点奇怪,远离良好的练习。
也许有人可以告诉我正确的方法。
这确实会导致潜在的内存问题。要解决此问题,您可以弹出不需要的路由。您还可以添加自定义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)
],
...
)
如果希望后退按钮导航到上一个路线,请使用Navigator.pop()
。在这种情况下,是的,堆栈不断填满。
还有其他方法
用新的路线替换当前路线。这样您就无法使用Android后退按钮来浏览每个以前的路径。