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