【发布时间】:2021-02-12 19:22:47
【问题描述】:
我的问题:当另一个状态被调用时,你能保留由一个状态构建的 UI 吗?
如果我使用了错误的肘形图案,请纠正我。我有一个我正在尝试解决的独特示例。我已经设置了cubit,它按照文档工作。
我有一个屏幕,其中有一个通过 cubit 返回的水平列表。然后根据返回的水平列表,如果您单击其中一个项目,cubit 会获取第二个列表以垂直显示在水平列表下方。
var _responseCategories = await _repository.postGetRootCategories();
emit(ShowCategories(state, _responseCategories));
var _responseCategoryItems = await _repository.postGetCategoryItems(_responseCategories[0].id);
emit(ShowCategoriesItems(state, _responseCategoryItems));
ui 有一个 bloc builder 并处理这两种状态,但是当一个状态发生变化时,第一个构建状态的 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)),
],
);
如果我使用这个错误是可以理解的,我只想知道是否有更好的解决方案来解决这个问题,因为每个类别的类别项目都不同,我不需要每次都获取类别状态变化。
该应用程序本质上是一个菜单。水平部分是菜单“我只需要加载一次”的类别,垂直部分是“我需要在用户选择类别时加载它们”的项目。每个类别的项目都不同,但除非服务器设置,否则类别永远不会改变。
【问题讨论】:
-
您可以在两种状态下拥有相同的属性,因此即使状态发生变化,您也可以访问所需的值来构建 UI 元素。
-
@Hamed 在多个状态下复制信息不是不好的做法。如果我理解正确,没有更好的方法可以达到我想要的结果。
-
我们使用引用对象没有数据重复。我们只是提供另一个州的信息。