发出状态更改后保持UI Cubit Flutter

问题描述

我的问题:是否可以保留由另一个状态调用时由一个状态构建的构建UI?

如果我使用的肘部模式错误,请纠正我。我有一个独特的示例正在尝试解决。我已经设置好手肘,并且按照文档的说明工作。

我有一个屏幕,其中有一个通过肘节返回的水平列表。然后,如果您单击其中一项,则根据返回的水平列表,肘节将获取第二个列表,以垂直显示水平列表下方。

var _responseCategories = await _repository.postGetRootCategories();
      emit(ShowCategories(state,_responseCategories));
      var _responseCategoryItems = await _repository.postGetCategoryItems(_responseCategories[0].id);
      emit(ShowCategoriesItems(state,_responseCategoryItems));

ui拥有一个整体生成器并处理这两个状态,但是当一个状态更改时,不存在用于第一个已建立状态的UI,我理解为什么会发生这种情况,但是有一种方法可以停止它,直到发出状态为止再次。 UI对构建器中的状态进行解码,如下所示:

return Column(
              crossAxisAlignment: CrossAxisAlignment.stretch,children: <Widget>[
                if (state is ShowCategories) buildCategories(context,state),state is ShowCategoriesItems
                    ? Expanded(child: buildMenuItems(context,state))
                    : SizedBox.shrink(),//getMenuList(_activeSelection)),],);

如果我使用的这种错误是可以理解的,我只是想知道是否有更好的解决方案来解决该问题,因为每个类别的类别项都不相同,因此不需要每次都获取类别时状态更改。

该应用实质上是一个菜单。水平部分是菜单“我只需要加载一次”的类别,垂直部分是“用户选择类别时我需要加载”的项目。每个类别的项目都不同,但是除非服务器设置,否则类别永远不会改变。

解决方法

似乎您具有主从详细信息视图,而详细信息状态只是主从无详细信息状态的超集。

您可以从主状态中导出详细状态,并向其添加更多信息(主列表,将选定的详细信息列表添加到派生类),也可以仅对两种状态都使用一个状态(主列表,选择,详细信息列表),如果尚未选择,则未设置某些内容。

如果您的详细信息视图确实很复杂,您还可以为其创建一个全新的BLoC,并在小部件树中使用其自己的逻辑和构建器,那么您可以拥有完全不同的状态。

但是从同一个BLoC中声明,您不能选择仅重建构建器下面树的一部分。

(嗯,从技术上讲,您可以做任何事情,但是解决一种模式没有意义。如果不合适,请使用其他模式。我认为您可以如上所述轻松地使其适合)