我的问题:是否可以保留由另一个状态调用时由一个状态构建的构建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)),
],
);
如果我使用的这种错误是可以理解的,我只是想知道是否有更好的解决方案来解决该问题,因为每个类别的类别项都不相同,因此不需要每次都获取类别时状态更改。
该应用实质上是一个菜单。水平部分是菜单“我只需要加载一次”的类别,垂直部分是“用户选择类别时我需要加载”的项目。每个类别的项目都不同,但是除非服务器设置,否则类别永远不会改变。
答案 0 :(得分:0)
似乎您具有主从详细信息视图,而详细信息状态只是主从无详细信息状态的超集。
您可以从主状态中导出详细状态,并向其添加更多信息(主列表,将选定的详细信息列表添加到派生类),也可以仅对两种状态都使用一个状态(主列表,选择,详细信息列表),如果尚未选择,则未设置某些内容。
如果您的详细信息视图确实很复杂,您还可以为其创建一个全新的BLoC,并在小部件树中使用其自己的逻辑和构建器,那么您可以拥有完全不同的状态。
但是从同一个BLoC中声明,您不能选择仅重建构建器下面树的一部分。
(嗯,从技术上讲,您可以做任何事情,但是解决一种模式没有意义。如果不合适,请使用其他模式。我认为您可以如上所述轻松地使其适合)