在发出状态更改Cubit Flutter后保留UI



我的问题:当调用另一个状态时,你能保留由一个状态构建的UI吗?

如果我用错了立体花纹,请纠正我。我有一个独特的例子要解决。我已经设置好了隔间,它正在按照文档工作。

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

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

ui有一个blockbuilder并处理这两个状态,但当一个状态更改时,第一个构建状态的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的州,你不能选择只重建生成器下方的树的一部分。

(好吧,从技术上讲,你可以做任何事情,但围绕一个模式工作都没有意义。如果它不适合,请使用不同的模式。我认为你可以很容易地使它适合上面描述的(

最新更新