在Flutter中构建应用程序,我想使用导航抽屉并添加一些FlatButtons。
每个08-31 13:36:19.018 13207-13207/com.knowyourmeds E/com.facebook.internal.AttributionIdentifiers: getAttributionIdentifiers should not be called from the main thread
都有一个FlatButton
方法,在这里我onPressed()
移到所需的页面,效果很好。
我想知道随着时间的推移这是否会填满内存,因为我一直在推动但从未从堆栈中弹出页面。
总是将Navigator.push()
与Navigator.pop()
依次相结合似乎有点奇怪,而且与良好实践相距甚远。
也许有人可以启发我正确的做事方法。
答案 0 :(得分: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 :(得分:1)
当您希望后退按钮导航到上一条路线时,请使用Navigator.pop()
。在这种情况下,是的,堆栈不断填满。
还有其他类似的方法
,用新路径替换当前路径。 这样,您将无法使用Android的“后退”按钮在上一条路线中向后导航。
答案 2 :(得分:1)
你试过了吗
Navigator
.of(context)
.pushReplacement(...
?