I have declared a custom freezed model in a flutter web project as follows:
@freezed
class User with _$User {
const factory User({
required int id,
required String name,
required Address address,
@Default(null) Contact? contact,
}) = _User;
factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
}
The models for Address
and Contact
are as follows:
@Freezed()
class Address with _$Address {
const factory Address({
required String type,
required String address,
required String subDistrict,
required String district,
required String state,
required String country,
required String pincode,
Coordinates? coordinates,
}) = _Address;
factory Address.fromJson(Map<String, dynamic> json) => _$AddressFromJson(json);
}
@Freezed()
class Coordinates with _$Coordinates {
const factory Coordinates({
required double latitude,
required double longitude,
}) = _Coordinates;
factory Coordinates.fromJson(Map<String, dynamic> json) => _$CoordinatesFromJson(json);
}
@Freezed()
class Contact with _$Contact {
const factory Contact({
@Default([]) List<String> email,
@Default([]) List<String> mobile,
@Default([]) List<String> landline,
@Default([]) List<String> fax,
}) = _Contact;
factory Contact.fromJson(Map<String, dynamic> json) => _$ContactFromJson(json);
}
Now, the issue is that when I try to create an instance of this model from json, it throws the following error:
NoSuchMethodError: tried to call a non-function, such as null: 'user$.User.fromJson'
However, this is not happening for all the models in the project. I am facing this issue only for the aforementioned one.
I tried not setting @Default(null)
as well but the same issue arises. I have ensured that the data being passed is json and not a String.
What could be the issue here?
Flutter 3.7.9 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 62bd79521d (2 weeks ago) • 2023-03-30 10:59:36 -0700
Engine • revision ec975089ac
Tools • Dart 2.19.6 • DevTools 2.20.1
dependencies:
freezed_annotation: ^2.2.0
json_annotation: ^4.8.0
dev_dependencies:
build_runner: ^2.3.3
freezed: ^2.3.2
json_serializable: ^6.6.1
Just found that this happens in debug mode. Runs fine in release mode. This is the stacktrace:
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 45:50 <fn>
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/zone.dart 1660:54 runUnary
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 147:18 handleValue
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 767:44 handleValueCallback
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 796:13 _propagateToListeners
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 567:5 [_completeWithValue]
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 640:7 callback
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/schedule_microtask.dart 40:11 _microtaskLoop
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/schedule_microtask.dart 49:5 _startMicrotaskLoop
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 166:15 <fn>