前提
firestoreのデータを取得し、freezedとriverpodを用いたMVVMでデータをviewに渡そうとすると、stringの変数では成功していたのですが、priceのところでintを扱おうとしたらエラーが起きて読み込めませんでした。
発生している問題・エラーメッセージ
view_mode
"type 'int' is not a subtype of type 'String' in type cast"
該当のソースコード
view model
dart
Future<void> retrieveItems({bool isRefreshing = false}) async { if (isRefreshing) state = const AsyncValue.loading(); try { final items = await _read(itemRepositoryProvider).retrieveItems(); if (mounted) { state = AsyncValue.data(items); } } catch (e) { throw e.toString(); } }
ripository
dart
final firebaseFirestoreProvider = Provider<FirebaseFirestore>((ref) => FirebaseFirestore.instance); final itemRepositoryProvider = Provider<ItemRepository>((ref) => ItemRepository(ref.read)); class ItemRepository implements BaseItemRepository { final Reader _read; const ItemRepository(this._read); Future<List<Item>> retrieveItems() async { try { final snap = await _read(firebaseFirestoreProvider).collection('projects').get(); return snap.docs.map((doc) => Item.fromDocument(doc)).toList(); } catch (e) { throw e.toString(); } }}
model
dart
abstract class BudgetInfo with _$BudgetInfo { (explicitToJson: true, nullable: true) const BudgetInfo._(); const factory BudgetInfo({ int? price, String? currency, String? method, }) = _BudgetInfo; factory BudgetInfo.fromJson(Map<String, dynamic> json) => _$BudgetInfoFromJson(json);}
試したこと
jsonkeyにて下記のように変換するコードを書いてみましたが、全く同じエラーが起きました。
model
dart
abstract class BudgetInfo with _$BudgetInfo { (explicitToJson: true, nullable: true) const BudgetInfo._(); const factory BudgetInfo({ (fromJson: BudgetInfo._stringToInt, toJson: BudgetInfo._stringFromInt) int? price, String? currency, String? method, }) = _BudgetInfo; static int? _stringToInt(String number) => number == null ? null : int.parse(number); static String? _stringFromInt(int? number) => number?.toString(); factory BudgetInfo.fromJson(Map<String, dynamic> json) => _$BudgetInfoFromJson(json);}
0 コメント