flutter - 为什么在 Fluttter 中调用加载状态后调用 loadInitTopStory 方法?
问题描述
HackerNewsLoadedState 在 HackerNewsLoadingState 之前调用,它从 API 加载所有数据,但不集成到 _topStories 列表中,并在调用 HackerNewsLoadedState 后将数据存储到 _topstories。
@override
Stream<HackerNewsState> mapEventToState(HackerNewsEvent event) async* {
if (event is FetchHackerNewsEvent) {
yield HackerNewsLoadingState();
try {
_loadInitTopStories();
yield HackerNewsLoadedState(story: _topStories);
} catch (e) {
yield HackerNewsErrorState(message: e.toString());
}
}
}
void _loadInitTopStories() async {
try {
_topStoryIds.addAll(await _repository.loadTopStoryIds());
} catch (e) {
_topStoriesStreamController.sink.addError('Unknown Error');
return;
}
loadMoreTopStories(pageSize: INIT_PAGE_SIZE);
}
void loadMoreTopStories({int pageSize = PAGE_SIZE}) async {
if (_isLoadingMoreTopStories) return;
_isLoadingMoreTopStories = true;
final storySize = min(_currentStoryIndex + pageSize, _topStoryIds.length);
for (int index = _currentStoryIndex; index < storySize; index++) {
try {
_topStories.add(await _repository.loadStory(_topStoryIds[index]));
} catch (e) {
print('Failed to load story with id ${_topStoryIds[index]}');
}
}
_currentStoryIndex = _topStories.length;
_topStoriesStreamController.sink.add(_topStories);
_isLoadingMoreTopStories = false;
}
解决方案
找到解决方案它返回 void 但这是一个错误,它返回 Stream
Stream<HackerNewsState> _loadInitTopStories() async* {
yield HackerNewsLoadingState();
try {
_topStoryIds.addAll(await repository.loadTopStoryIds());
} catch (e) {
_topStoriesStreamController.sink.addError('Unknown Error');
return;
}
yield* loadMoreTopStories(pageSize: INIT_PAGE_SIZE);
yield HackerNewsLoadedState(story: _topStories);
}
Stream<HackerNewsState> loadMoreTopStories(
{int pageSize = PAGE_SIZE}) async* {
if (_isLoadingMoreTopStories) return;
_isLoadingMoreTopStories = true;
final storySize = min(_currentStoryIndex + pageSize, _topStoryIds.length);
for (int index = _currentStoryIndex; index < storySize; index++) {
try {
_topStories.add(await repository.loadStory(_topStoryIds[index]));
} catch (e) {
print('Failed to load story with id ${_topStoryIds[index]}');
}
}
_currentStoryIndex = _topStories.length;
_topStoriesStreamController.sink.add(_topStories);
_isLoadingMoreTopStories = false;
}
推荐阅读
- ffmpeg - FFmpeg:无法为“mpegts”找到合适的输出格式
- json - 防止空值从 JSON 响应 Flutter 中显示在 ListView 中
- python - 在python中运行for循环以获得更多的迭代次数
- c - 在没有任何格式说明符的情况下将字符串文字作为参数传递给打印函数?
- azure - 从 Graph API 获取所有已登录/登录的 AD B2C 用户
- swagger - 分离开放 API 文档
- python - Pip 安装和 python 头文件
- ios - 注销后 MSALwebView 仍然在 MSAL 中显示以前的用户凭据
- awk - 计算 awk 中每一行的标准差
- android - React Native:react-native run-android 没有启动 Android 模拟器