returnTypeSwitch<T> function
T
returnTypeSwitch<T>(
- DartType stateType,
- MethodElement element, {
- T same()?,
- T stream()?,
- T future()?,
- T futureOr()?,
- required T orElse(),
Implementation
T returnTypeSwitch<T>(
DartType stateType,
MethodElement element, {
T Function()? same,
T Function()? stream,
T Function()? future,
T Function()? futureOr,
required T Function() orElse,
}) {
final returnType = element.returnType;
if (TypeChecker.fromStatic(stateType).isExactlyType(returnType)) {
return (same ?? orElse)();
}
if (TypeChecker.fromRuntime(Stream).isExactlyType(returnType)) {
return (stream ?? orElse)();
}
if (returnType.isDartAsyncFuture) {
return (future ?? orElse)();
}
if (returnType.isDartAsyncFutureOr) {
return (futureOr ?? orElse)();
}
if (element.isAsynchronous) {
if (element.isGenerator) {
return (stream ?? orElse)();
}
return (futureOr ?? orElse)();
}
return (same ?? orElse)();
}