在 Flutter 中构建应用程序,我想使用导航抽屉并添加了一些 FlatButtons。每个FlatButton都有一个onPressed()方法,我可以Navigator.push()移动到所需的页面,它工作得很好。
我想知道这是否会随着时间的推移填满内存,因为我总是在推送但从不从堆栈中弹出页面。总是将 aNavigator.pop()与 aNavigator.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);
}
}
Run Code Online (Sandbox Code Playgroud)
您可以通过在此处添加它来使用它:
MaterialApp(
navigatorObservers: [
HistoryLimit(10)
],
...
)
Run Code Online (Sandbox Code Playgroud)
Navigator.pop()当您希望后退按钮导航到上一个路线时使用。在这种情况下,是的,堆栈不断填满。
还有其他方法,例如
用新路线替换当前路线。这样您就无法使用 Android 后退按钮返回之前的每条路线。
| 归档时间: |
|
| 查看次数: |
9059 次 |
| 最近记录: |