作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Navigator.push(
context,
MaterialPageRoute(builder: (context) => MyNewPage()),
)
这会加载一个新页面。
最佳答案
要清除整个当前上下文,您可以使用:
Navigator.of(context)
.pushAndRemoveUntil(MaterialPageRoute(builder: (context) =>
MyNewPage()), (Route<dynamic> route) => false)
确保使用 RoutePredicate,它总是返回 false
(Route<dynamic> route) => false
.在这种情况下,它会删除除新的
MyNewPage()
之外的所有路由。路由插入堆栈。
dispose()
方法:setState
是错误的。在这里并确保通过调用 super.dispose()
来结束您的方法覆盖它时。 @override
void dispose() {
// Your function.
super.dispose();
}
initState()
您在堆栈中推送的路由方法:当此对象插入树时调用它。如果您覆盖它,请确保您的方法以调用 super.initState()
开始。 . @override
void initState() {
super.initState();
// Your function.
}
BuildContext
对于您的清理功能,您可以使用 didChangeDependencies()
:当此 State 对象的依赖关系发生变化时调用它,并且在 initState
之后立即调用它。 ,使用 BuildContext
是安全的这里。子类很少覆盖此方法,因为框架总是在依赖项更改后调用 build。一些子类确实覆盖了这个方法,因为当它们的依赖关系发生变化时,它们需要做一些昂贵的工作(例如,网络获取),而且每次构建都做这些工作太昂贵了。 @override
void didChangeDependencies() {
// Your function.
super.didChangeDependencies();
}
Getx包也有多种插入中间件函数的方法:
GetPage redirect( ) {
final authService = Get.find<AuthService>();
return authService.authed.value ? null : RouteSettings(name: '/login')
}
GetPage onPageCalled(GetPage page) {
final authService = Get.find<AuthService>();
return page.copyWith(title: 'Welcome ${authService.UserName}');
}
List<Bindings> onBindingsStart(List<Bindings> bindings) {
final authService = Get.find<AuthService>();
if (authService.isAdmin) {
bindings.add(AdminBinding());
}
return bindings;
}
GetPageBuilder onPageBuildStart(GetPageBuilder page) {
print('bindings are ready');
return page;
}
关于flutter - 在 flutter 导航器上启动另一个页面时如何调用析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66462901/
我是一名优秀的程序员,十分优秀!