升级Freezed 3.x.x后Riverpod状态类缺失getter实现报错求助
Freezed 3.x.x升级后Riverpod状态类Getter缺失错误修复
升级Freezed从2.x.x到3.x.x版本后,Riverpod状态文件出现编译错误,提示需实现_$PremiumDataState.aiCredits和_$PremiumDataState.premium的getter方法。
相关代码
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; part 'premium.userdata.freezed.dart'; final premiumUserStateProvider = NotifierProvider<PremiumDataProvider, PremiumDataState>(() { return PremiumDataProvider(); }); @freezed class PremiumDataState with _$PremiumDataState { const factory PremiumDataState({ @Default(false) bool premium, @Default(0) int aiCredits, }) = _PremiumDataState; } class PremiumDataProvider extends Notifier<PremiumDataState> { @override PremiumDataState build() { return const PremiumDataState(); } }
错误信息
Missing concrete implementations of 'getter _$PremiumDataState.aiCredits' and 'getter _$PremiumDataState.premium'. Try implementing the missing methods, or make the class abstract.dartnon_abstract_class_inherits_abstract_member
修复步骤
- 在状态类文件头部新增
part 'premium.userdata.g.dart';语句,Freezed 3.x.x版本开始,即使不需要JSON序列化,也需要该文件生成完整的类成员实现:import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; part 'premium.userdata.freezed.dart'; part 'premium.userdata.g.dart'; // 新增行 - 确保
pubspec.yaml中freezed_annotation、build_runner为最新版本,执行以下命令重新生成代码:dart run build_runner build --delete-conflicting-outputs
Freezed 3.x.x调整了代码生成逻辑,必须通过.g.dart文件补全类的具体实现,这是和2.x.x版本的核心差异,执行上述步骤后即可解决getter缺失问题。
内容的提问来源于stack exchange,提问作者Bamsen
相关产品推荐
相关产品推荐

