The thing is Dart semantics are that if you erase all type annotations from a program, it behaves the same. So you can't have an is check behave differently depending on whether a function's return type was explicitly provided by the programmer or not.