我想要一些关于使用 Flutter 编码的一般建议。
我目前正在开发移动应用程序,并且不断遇到同样的问题。未来的构建器和流构建器非常有用,因为您可以选择在获取数据时显示加载小部件,然后在数据准备好时显示数据。这一切都很棒。但作为用户,您只想在切换到页面时看到一次加载指示符,而不是每次数据有轻微更新时都连续看到。
这会造成非常不愉快的用户体验,用户界面上的小部件不断消失和重新出现。特别是在每次更新单个项目时都会重建整个列表的列表中。
我必须投入最多的编码时间来寻找创造性的方法来存储先前加载的数据,并尝试让未来的构建器显示该数据,直到数据更新完成加载。到目前为止,我认为解决方案是使用 bloc 状态管理,因为它会以不同的方式更新用户界面,但现在在下面的示例中,尽管使用 bloc,但我还是遇到了相同的问题。
这是 Flutter 特有的问题吗?根据我之前使用其他语言的经验,我以前从未遇到过这样的事情。您如何解决这个问题?在状态管理或块的使用方面我有什么遗漏的吗?
return BlocBuilder<ChatBloc, ChatBlocState>(builder: (context, state) {
List<Message> messages = state.messages;
return ScrollablePositionedList.builder(
itemScrollController: itemScrollController,
scrollOffsetController: scrollOffsetController,
itemPositionsListener: itemPositionsListener,
scrollOffsetListener: scrollOffsetListener,
reverse: true,
shrinkWrap: true,
itemCount: messages.length,
itemBuilder: (context, index) {
return MessageItem(
message: messages[index]);
},
);
});
我希望在加载新状态之前显示以前的状态。显示装载指示器或空容器的地方不应有间隙。
我认为buildWhen应该能够解决你的问题
BlocBuilder<ChatBloc, ChatBlocState>(
buildWhen: (previousState, state) {
// return true/false to determine whether or not
// to rebuild the widget with state
},