flutterにて、freezed x riverpodのMVVMでfirestoreのデータを管理しようとすると、型でエラーが起きる

前提

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 コメント