gpt4 book ai didi

flutter - 无法识别特定状态下的内部方法,BloC 模式

转载 作者:行者123 更新时间:2023-12-03 03:56:43 26 4
gpt4 key购买 nike

我使用 Bloc State management 构建了一个 flutter 项目。但有一些我不明白。我知道如何将 State 作为抽象类,它为每个它的 child 实现。
我下面有类州湖,请关注类MainHomeLoaded

abstract class MainHomeState extends Equatable{

MainHomeState();
}

class MainHomeUnInitialized extends MainHomeState{

@override
List<Object> get props => null;

}

class MainHomeLoading extends MainHomeState{

@override
List<Object> get props => null;

}

class MainHomeLoaded extends MainHomeState{

final List<Article> listArticle;
final bool hasReachedMax;

MainHomeLoaded({@required this.listArticle, this.hasReachedMax});

MainHomeLoaded copyWith({
List<Article> article,
bool hasReacedMax,
}){
return MainHomeLoaded(
listArticle: article ?? this.listArticle,
hasReachedMax: hasReacedMax ?? this.hasReachedMax);

}

@override
List<Object> get props => null;

}

class MainHomeError extends MainHomeState{

final String errorMsg;

MainHomeError({@required this.errorMsg});

@override
List<Object> get props => [errorMsg];

}

那么我有 MainHomeBloc具有实现 Bloc 方法的类,如 mapEventtoState()在这个方法中,我做了如下条件(再次请关注条件 MainHomeLoaded):
@override
Stream<MainHomeState> mapEventToState(MainHomeEvent event) async*{

if(event is CallHomeLatestNews && !_hasReachedMax(state)){

if(state is MainHomeUnInitialized){

ResponseArticle responseArticle = await mainHomeRepository.latestNews(event.page);

if(responseArticle.status == 'success'){
List<Article> data = responseArticle.data;
yield MainHomeLoaded(listArticle: data);
}else{
yield MainHomeError(errorMsg: responseArticle.message);
}
}

if(state is MainHomeLoaded){

ResponseArticle responseArticle = await mainHomeRepository.latestNews(event.page);
if(responseArticle.status == 'success'){
List<Article> data = responseArticle.data;


yield data.isEmpty ? state.copyWith(hasReacedMax: true)
: MainHomeLoaded(listArticle: state.listArticle + data, hasReachedMax: false);

}
}
}

这是我完全不明白的部分,正如您所看到的,我们认为状态在 MainHomeLoaded 中,因为在 if 中有条件,但我在构建时出错,我的 IDE 显示红线和方法 copyWith()不认识。错误显示如下:
error pic
IDE 说的是

method copyWith() is not define for the class 'MainHomeState'



有人可以帮我对这种情况做简单的解释吗?谢谢
仅供引用,我在此版本 1.12.13 和 Dart 版本 2.7.0 中使用了 Flutter

最佳答案

最后我找到了我的主要问题。当我们在 BlocBuilder(在屏幕中)中使用自动知道特定状态的状态时,可能会有所不同。所以我要做的就是把它变成我想要的 child 。所以这个案例的解决方法是这样的:

if(state is MainHomeLoaded){

MainHomeLoaded mainHomeLoaded = state as MainHomeLoaded; // what i need

ResponseArticle responseArticle = await mainHomeRepository.latestNews(defaultPage);
if(responseArticle.status == 'success'){

List<Article> newData = responseArticle.data;


if(newData.isEmpty){

mainHomeLoaded.copyWith(hasReacedMax: true);
yield mainHomeLoaded;
}
defaultPage++;
}else{
print('gagal');

yield MainHomeError(errorMsg: responseArticle.message);

}
}

我希望它会在 future 帮助某人。

关于flutter - 无法识别特定状态下的内部方法,BloC 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60576760/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com