Closed
Description
In my sample code, on the Web platform, noSuchMethod(...)
is not getting invoked. It works fine on stable, but is not working on beta/dev/master.
I have tested with MacOS (latest, 13.0.1) on Chrome (latest, Version 108.0.5359.124 (Official Build) (x86_64)). Also tested on DartPad.
Problematic versions:
- current beta (dart 2.19.0-444.1.beta)
- current dev
- current master (2.19.0-467.0.dev)
Works fine on the latest stable version (2.18.5)!
Expected behavior:
inside noSuchMethod
Actual behavior:
Uncaught Error: NoSuchMethodError: method not found: '_value'
Receiver: Instance of 'MyDateTime'
Arguments: []
Sample code:
class MyDateTime implements DateTime {
const MyDateTime(int year)
: _year = year;
final int _year;
DateTime get dateTime {
return DateTime(_year);
}
@override
DateTime add(Duration duration) {
return dateTime.add(duration);
}
@override
int compareTo(DateTime other) {
return dateTime.compareTo(other);
}
@override
int get day => dateTime.day;
@override
Duration difference(DateTime other) {
return dateTime.difference(other);
}
@override
int get hashCode => dateTime.hashCode;
@override
int get hour => dateTime.hour;
@override
bool isAfter(DateTime other) {
return dateTime.isAfter(other);
}
@override
bool isAtSameMomentAs(DateTime other) {
return dateTime.isAtSameMomentAs(other);
}
@override
bool isBefore(DateTime other) {
return dateTime.isBefore(other);
}
@override
bool get isUtc => dateTime.isUtc;
@override
int get microsecond => dateTime.microsecond;
@override
int get microsecondsSinceEpoch => dateTime.microsecondsSinceEpoch;
@override
int get millisecond => dateTime.millisecond;
@override
int get millisecondsSinceEpoch => dateTime.millisecondsSinceEpoch;
@override
int get minute => dateTime.minute;
@override
int get month => dateTime.month;
@override
int get second => dateTime.second;
@override
DateTime subtract(Duration duration) {
return dateTime.subtract(duration);
}
@override
String get timeZoneName => dateTime.timeZoneName;
@override
Duration get timeZoneOffset => dateTime.timeZoneOffset;
@override
String toIso8601String() {
return dateTime.toIso8601String();
}
@override
DateTime toLocal() {
return dateTime.toLocal();
}
@override
DateTime toUtc() {
return dateTime.toUtc();
}
@override
int get weekday => dateTime.weekday;
@override
int get year => dateTime.year;
@override
bool operator ==(Object other) {
return dateTime == other;
}
@override
dynamic noSuchMethod(Invocation invocation) {
print('inside noSuchMethod');
return 0;
}
}
void main() {
final d1 = DateTime(2022, 2);
final d2 = const MyDateTime(2022);
d1.difference(d2);
}
Metadata
Metadata
Assignees
Labels
No labels