The down sides for me for me are Dart - no thanks to learning another language, and to Google lock in. As others have pointed out, Google has a pattern of developing and then abandoning products and technology. See https://gcemetery.co/
https://www.dartlang.org/faq#q-why-are-generics-covariant
Of course this is from the company that brought us interface{} and people seem to be OK with that...
Why are covariant generics bad? (also just a link is fine)
As an example, here's approximately how the Function trait is defined in Scala. The square brackets indicate type parameters (like angle brackets in Java), the - indicates covariance, and the + indicates contravariance.
trait Function1[-T, +R] {
def apply(arg1: T): R
}