我产生了相同的状态,但是在我的bloc中具有不同的对象,但是没有再次调用BlocBuilder。 我该怎么办? 我的mapEventToState是
if (event is EditUserProfileImageChanged) {
UserProfile newUserProfile = state.userProfile;
newUserProfile.avatar = event.imgSrc;
yield EditUserProfileTotalState(userProfile: newUserProfile);
}
答案 0 :(得分:1)
当我们在私有mapEventToState处理程序中产生一个状态时,我们总是在产生一个新状态,而不是对该状态进行突变。这是因为每次我们屈服时,块都会将状态与nextState进行比较,并且仅在两个状态不相等时才会触发状态更改(转换)。如果仅突变并产生相同的state实例,则state == nextState的评估结果为true,并且不会发生状态更改。
如果要更改状态的值,请为模型类创建一个copyWith函数。
class UserProfile extends Equatable {
final String name;
final Image avatar;
const UserProfile({this.name, this.avatar});
UserProfile copyWith({String name, Image avatar,}) {
return UserProfile(
name: name ?? this.name,
avatar: avatar?? this.avatar,
);
}
@override
List<Object> get props => [name, avatar];
}
if (event is EditUserProfileImageChanged) {
var newState = state.userProfile.copyWith(avatar: event.imgSrc);
yield EditUserProfileTotalState(userProfile: newState);
}
答案 1 :(得分:0)
删除Equatable
可解决问题。
答案 2 :(得分:0)
即使属性值未更改,每次删除equatbale都会重新生成。而是每次都创建一个新的状态实例。