【问题标题】:How to update screen or state on coming back to route using pop如何使用 pop 更新返回路由时的屏幕或状态
【发布时间】:2020-12-15 22:37:18
【问题描述】:

我想使用Navigator.pop 更新返回到该屏幕的屏幕。 例如。我有Home 屏幕和一些步骤屏幕(Step1Step2Step3Step4

主屏幕是一个有状态的小部件,显示已完成的步骤数。

流程是这样的

首页 => Step1 => Step2 => Step3 => Step4

在任何步骤上,按返回或按关闭按钮,它应该返回到Home 屏幕并且主屏幕应该显示已完成步骤的更新状态。所以我正在使用Navigator.popAndPushNamed 导航到步骤屏幕中的下一步,以便Navigator.pop 将转到Home 屏幕。

并在Home 屏幕中使用Navigator.pushNamed(context, 'Step1').then 来更新它。 但问题是 .then 仅在 Step1 本身上被调用,因为它被弹出并且如果用户喜欢

Home => Step1 => Step2 => Step3 => Home(使用pop)

主屏幕只会显示 Step1 已完成,因为当从 Step1 to Step2 转到时,它的 .then 回调被调用,当从 Step3 使用 Navigator.pop 转到 Home 时,没有代码正在执行,我正在无法更新主屏幕。 我知道我可以使用步骤中的Navigator.pushNamed(context, 'Home') 转到主屏幕,但它看起来不正常(看起来主屏幕被推到它上面,而不是动画应该像它返回一样)。

【问题讨论】:

    标签: flutter


    【解决方案1】:

    您可以在上一个页面中使用一个变量来跟踪,如果您来自下一页并返回一个布尔值 true 变量,说明它已从上一个活动返回。您可以在 init 方法中使用该变量,如果该变量的值为 true,您可以触发一个返回适当状态的事件。

    【讨论】:

    • 我将如何返回一个变量?确切地说,我想要一个地方,当我回到那个屏幕时我可以执行代码,并且当我在Navigator.pop 之后回到屏幕时,initState 不会再次被调用(我不知道是否有任何方法可以被调用)
    • 这是一个从pop返回数据的例子。 flutter.dev/docs/cookbook/navigation/returning-data
    • 是的,但问题是您只能从下一个屏幕返回变量,并且处理返回值的回调会在下一个屏幕弹出时立即执行,这并不一定意味着您在前一个屏幕上例如我在ScreenA,使用Navigator.pushNamed(context, 'ScreenB').then((value) { debugPrint('screen is poped from screenA'); }) 转到ScreenB,从ScreenB 使用Navigator.popAndPushNamed(context, 'ScreenC') 转到ScreenC 所以这里它打印screen is poped from screenA,即使我们在ScreenC
    【解决方案2】:

    使用RouteObserver 找到了解决方案并实现了类似于https://api.flutter.dev/flutter/widgets/RouteObserver-class.html 中给出的示例

    我正在寻找RouteAware的didPopNext的方法。

    【讨论】:

      【解决方案3】:

      检查一下,它对我有用!

      Navigator.of(context).push(route).then((val){
          //you can update you data here, when coming back
      })
      

      【讨论】:

      • 正如我所说的,在这种情况下,在从导航器中弹出route 之后调用对.then 的回调,这并不意味着它返回到前一个屏幕。因为在另一个屏幕上,我正在做popAndPush,它将当前屏幕替换为另一个屏幕。
      猜你喜欢
      • 2021-04-26
      • 2020-09-05
      • 2020-12-20
      • 2022-10-23
      • 2022-01-20
      • 1970-01-01
      • 2016-10-21
      • 2022-01-18
      • 2016-11-26
      相关资源
      最近更新 更多