【问题标题】:Navigation to a different instance of an existing page导航到现有页面的不同实例
【发布时间】:2020-10-16 13:32:41
【问题描述】:

我正在处理一个场景,我有一个 Apartment 页面 (StatefulWidget),在这个页面上,我还有一个“类似公寓”列表。

当用户点击任何类似的公寓时,他们将Navigateed 到Apartment 类的不同实例,但具有新内容。

但是,我通过日志意识到,每次导航到新的 Apartment 页面时,堆栈上 Apartment 类的所有现有实例也会重新创建,这会导致问题。

这是我用来导航到新实例的代码:

  Navigator.push(
    context,
    CupertinoPageRoute(
      builder: (context) => AptPage(
          key: ObjectKey("$buildingId$unitNum"),
          unitNumber: unitNum,
          buildingId: buildingId,
          cubit: BlocProvider.of<BuildingInfoCubit>(context)),
    ),
  );

我希望之前创建的 Apartment 页面不会再次被重新创建,而且我仍然希望能够回到堆栈上之前的 Apartment 页面。

(我使用 ObjectKey 错了吗????)

【问题讨论】:

    标签: flutter dart navigation flutter-bloc


    【解决方案1】:

    在这种情况下,简而言之,在处理从 api 获取的变量或其他任何情况时,您需要更改整个过程,您需要使用此 MVC 插件将信息和变量保存到 Controller 类并实现小部件的控制器,因此您可以在无限数量的小部件中获取所需的变量,或者如果您发现很难更改 MVC 模式,您可以使用 notifiable 变量 并在使用变量时通过应用程序将其分配为公共,因此从它自己的变量中获取数据并在更新时通知它,因此不要在每次小部件调用时重新加载它,我不建议在两者之间发送数据小部件作为路由参数

    【讨论】:

    • 我认为这个问题与架构无关。问题是每次我导航到一个新的Apartment 类时,Stack 中所有现有Apartment 类的build() 函数都会被调用。我只希望调用新的Apartment 页面的build() 方法。
    【解决方案2】:

    我不确定我是否正确地回答了您的问题,但是如果您想检查某些内容是否与前一个对象相同以不创建新对象,那么“equatable”可能会有所帮助。您的对象将从“equatable”扩展。

    但在您的情况下,即使它与您所在的小部件相同,您也将导航到新的小部件,创建它的新实例是正常的。

    如果你能给我一个大图,那就太好了……

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多