导航到现有页面的其他实例

时间:2020-10-16 13:32:41

标签: flutter dart navigation flutter-bloc

我正在处理一个我有一个select p.id, p.name, d.v1, d.v2, d.v3, d.date from people p inner join data d on d.id = p.id where d.date = (select max(d1.date) from data d1 where d1.id = d.id) 页面(Apartment)的情况,并且在此页面上,我还有一个“类似公寓”列表。

当用户单击任何类似的公寓时,它们会StatefulWidget进入Navigate类的其他实例,但是具有新内容。

但是,通过日志我意识到,每次导航到新的Apartment页时,堆栈上Apartment类的所有现有实例也会被重新创建,并且会引起问题。 / p>

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

Apartment

我希望以前创建的 Navigator.push( context, CupertinoPageRoute( builder: (context) => AptPage( key: ObjectKey("$buildingId$unitNum"), unitNumber: unitNum, buildingId: buildingId, cubit: BlocProvider.of<BuildingInfoCubit>(context)), ), ); 页不会再次被创建,而且我仍然希望能够返回到堆栈上的先前Apartment页。

(我使用ObjectKey错误吗??)

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我不确定我是否正确回答了您的问题,但是如果您要检查与以前的对象相同的对象而不创建新对象,则可以使用“ 等同”。您的对象将从“ equatable ”扩展。

但是如果您要导航到新的小部件,即使它与您所在的同一个,创建新的实例也是正常的。

如果您能给我带来美好的一面……