Flutter中如何正确初始化Either Right为空值?解决常量报错问题
解决Dart中Either对象的初始化问题
问题核心
你遇到的矛盾点在于:Dart要求可选参数的默认值必须是常量,但担心用const Right([])后无法后续将状态更新为Left类型。实际上这个顾虑是不必要的——const仅作用于初始状态的默认值,后续Bloc更新状态时,完全可以生成新的JobListState实例,将jobListSections赋值为Left类型。
正确初始化代码
修改代码,给默认值添加const关键字以满足Dart的常量要求,同时不影响后续状态更新:
class JobListState extends Equatable { const JobListState({ this.status = JobListStatus.initial, this.jobListSections = const Right([]), // 添加const关键字 this.filter, }); final JobListStatus status; final Either<Failure, List<JobListViewmodel?>> jobListSections; final JobListFilter? filter; // 必须重写Equatable的props方法以保证状态对比正确性 @override List<Object?> get props => [status, jobListSections, filter]; }
后续状态更新示例
在Bloc的事件处理逻辑中,你可以正常生成包含Left状态的新JobListState,完全不受初始默认值的const限制:
// 示例:请求失败时,emit带有Left状态的新状态 emit( JobListState( status: JobListStatus.failure, jobListSections: Left(Failure('加载失败')), filter: state.filter, ), );
关键说明
const Right([])只是初始状态的默认值,它不会限制后续创建新JobListState实例时使用非const的Left或Right对象。- Dart强制要求可选命名参数的默认值为编译时常量,因此必须添加
const关键字才能消除编译错误。
内容的提问来源于stack exchange,提问作者w461
相关产品推荐
相关产品推荐

