"... if the app had a reasonably complex business logic I wouldn't want to write it in Dart though."
I'm surprised by this as I've been working on a pure Dart library lately and really enjoyed it. Anything in particular you dislike?On the plus side, I wouldn't say it really needs to be learned if you know Java (and maybe Kotlin or Swift, so that you are used to the ? operator). I wrote a couple of apps in Flutter, having never read even a single line about Dart. I picked it up by looking at the Flutter examples.
One particularly annoying thing is that a whole lot of stuff is achieved through code generation (serialization, equality operators, ORM mapping, localization among others), and there are so many different way that code generation can be done - some automatic during the build, some that must be manually invoked. The build system seems really lacking.
As for Tony Hoare's billion dollar mistake, I'm not sure if you've seen the information about Sound Null-Safety[1], but it's actually one of my favorite features about the language. Static analysis in Dart feels a little bit like Rust in that as you write code your IDE can provide smart suggestions and bugs are often found as you write instead of when you compile.
Finally, I'll take the pub.dev[2] toolchain and build system over anything out there today besides Cargo. Plus, compiling to a single executable file without any dependencies that have to be installed on the deployment target is great.
"There are many better Java++ languages out there."
Any in particular you'd suggest? I'd definitely give it a shot if it blows Dart out of the water![1]: https://dart.dev/null-safety
[2]: https://pub.dev/
Kotlin looks like a good Java++ language (especially for Android); and Typescript would be the most pragmatic choice for web. But again, Dart is going to have to keep up even with modern Java.
Regarding boilerplate, can Dart define a simple data class with equals and hashcode in one or two lines?