gpt4 book ai didi

flutter - 在 flutter 导航器上启动另一个页面时如何调用析构函数?

转载 作者:行者123 更新时间:2023-12-04 08:01:07 25 4
gpt4 key购买 nike

  Navigator.push(
context,
MaterialPageRoute(builder: (context) => MyNewPage()),
)
这会加载一个新页面。
我怎样才能让它在当前页面上调用一个析构函数,以便它可以正确地清除它的东西?
我尝试添加一个 dispose 方法,但是当我更改页面时它没有执行。

最佳答案

要清除整个当前上下文,您可以使用:

 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包也有多种插入中间件函数的方法:
  • 重定向 :在搜索被调用路由的页面时会调用该函数。它需要 RouteSettings 作为重定向到的结果。或者给它 null 并且不会有重定向。

  • GetPage redirect( ) {
    final authService = Get.find<AuthService>();
    return authService.authed.value ? null : RouteSettings(name: '/login')
    }
  • onPageCalled :在创建任何内容之前调用此页面时,将调用此函数,您可以使用它来更改页面的某些内容或为其提供新页面。

  • GetPage onPageCalled(GetPage page) {
    final authService = Get.find<AuthService>();
    return page.copyWith(title: 'Welcome ${authService.UserName}');
    }
  • OnBindingsStart :这个函数将在绑定(bind)初始化之前被调用。在这里您可以更改此页面的绑定(bind)。

  • List<Bindings> onBindingsStart(List<Bindings> bindings) {
    final authService = Get.find<AuthService>();
    if (authService.isAdmin) {
    bindings.add(AdminBinding());
    }
    return bindings;
    }
  • OnPageBuildStart : 这个函数将在绑定(bind)初始化后立即调用。在这里,您可以在创建绑定(bind)之后和创建页面小部件之前执行一些操作。

  • GetPageBuilder onPageBuildStart(GetPageBuilder page) {
    print('bindings are ready');
    return page;
    }
  • OnPageBuilt :该函数将在调用 GetPage.page 函数后立即调用,并为您提供该函数的结果。并获取将显示的小部件。
  • OnPageDispose : 这个函数会在处理完页面的所有相关对象( Controller , View ,...)后立即调用。
  • 关于flutter - 在 flutter 导航器上启动另一个页面时如何调用析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66462901/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com