Api 页面之间的颤振共享区

Api 页面之间的颤振共享区,api,flutter,dart,flutter-bloc,Api,Flutter,Dart,Flutter Bloc,我有一个基本的颤振应用程序,2页1块 主页显示用户列表(仅2个属性) 单击用户项时,详细信息页面将显示所有属性 用户数据是使用发出两种状态的bloc获取的 来自api domain.com/users的AllUsersSloadedState 来自api domain.com/users/id的UserLoadedState 因为当我导航到详细信息页面并点击后退按钮时,主页和详细信息页面都在BlocBuilder中使用相同的bloc,所以主页崩溃 有没有办法不用写两个单独的集团来处理 如

我有一个基本的颤振应用程序,2页1块

  • 主页显示用户列表(仅2个属性)
  • 单击用户项时,详细信息页面将显示所有属性
用户数据是使用发出两种状态的bloc获取的

  • 来自api domain.com/users的AllUsersSloadedState
  • 来自api domain.com/users/id的UserLoadedState
因为当我导航到详细信息页面并点击后退按钮时,主页和详细信息页面都在BlocBuilder中使用相同的bloc,所以主页崩溃


有没有办法不用写两个单独的集团来处理

如果您想在两个屏幕之间共享一个BLoC,那么您应该以这样一种方式创建BLoC,即当这两个屏幕处于活动状态时,BLoC不会被破坏

一种方法是使用包或作为
InheritedWidget
提供BLoC。如果您使用
Provider
,那么在每个屏幕上,您只需使用
Provider.of(context)
请求BLoC。您必须阅读更多关于
提供者的信息才能了解如何使用它


另一种方法是将BLoC作为变量传递给小部件的构造函数。

如果您想在屏幕之间共享BLoC,那么您应该以这样一种方式创建BLoC,即当这两个屏幕处于活动状态时,BLoC不会被破坏

一种方法是使用包或作为
InheritedWidget
提供BLoC。如果您使用
Provider
,那么在每个屏幕上,您只需使用
Provider.of(context)
请求BLoC。您必须阅读更多关于
提供者的信息才能了解如何使用它


另一种方法是将BLoC作为变量传递给小部件的构造函数。

我发现了问题所在。 因为两个页面使用的是同一个bloc,所以它们将在两个状态下重建,而预期的行为是主页仅在AllUsersLoadedState上重建,而详细信息页面仅在UserLoadedState上重建

因此,当我导航到详细信息页面并收到UserLoadedState时,主页不知道如何处理该状态,会崩溃


解决方案是使用bloc builder中的condition参数跳过不需要的状态的重建。

我发现了问题所在。 因为两个页面使用的是同一个bloc,所以它们将在两个状态下重建,而预期的行为是主页仅在AllUsersLoadedState上重建,而详细信息页面仅在UserLoadedState上重建

因此,当我导航到详细信息页面并收到UserLoadedState时,主页不知道如何处理该状态,会崩溃


解决方案是使用bloc builder中的condition参数跳过对不需要的状态的重建。

您是否可以共享事件、状态和bloc文件共享代码,后退按钮不应干扰您案例中的任何内容,因为您描述的bloc不依赖于导航。您是否可以共享您的事件,state和bloc文件共享您的代码,back按钮不应该干扰您案例中的任何内容,因为您描述的bloc不依赖于导航。