In no particular order:
- The type system was essentially like java but perhaps even worse -- in a world with Rust, Haskell, Julia, Kotlin, Scala, and even Golang this seemed egregious.
- No algebraic data types (sum/union),
- class-based inheritance
- nullable values
- using exceptions instead of errors-as-values approach.
I know they worked hard on the language (rewrites are hard, there are some good talks on there about it, link @ end), but it's like they ignored all the progress in PL over the last like decade+. Anyway, continuing on:
- JSON serialization/deserialization[1] was like the worst parts of Go and the worst parts of Java (again this has to
- SQLite driver[0] couldn't be used off device. I found this out while trying to write tests that ran off-device. Now there's sqlite3[1] so maybe it's no longer an issue
- Dart2 was a played down rewrite of Dart1, with JS interop removed. Typescript is a better language than Dart.
- BloC is overcomplicated and was rolled out poorly at the time (this has more to do with Flutter than Dart). The state management patterns felt like unbaked react (flux pattern) v1.
All this said, Dart will probably be around for a very long time. Fuschia makes a LOT of sense for Google to continue pursuing, which uses Flutter. Dart could be worse, and I think it's good enough for a bunch of usecases. If it were me, I wouldn't even choose it over Nativescript.
The Boring Flutter Development Show[3] was/is fantastic, I watched it religiously when I was learning and trying out Flutter -- having a big backer like google means there are always going to be dedicated resources and smart people behind Flutter which honestly probably matters more in the long run than Dart being a shit language. As Golang has shown us, you can just iterate to having a good language.
Feels like Dart2 has it's base to build from now, and I don't like the places it's started, but it will probably continue to succeed. At the very least you won't see bad PR about it, because most people who are willing to tweet about it are invested in it's success or want jobs at Google someday, and there is dedicated money for "dev rel".
Seeing Sony embrace flutter for embedded things is pretty big as well[4]. Sony has a surprisingly strong track record of making technologically competent products:
- PS Vita (generally regarded as ahead of it's time)
- Sony SmartWatch 1 & 2 (I owned both, they were ahead of their time, and were very good quality, easily hackable)
- Sony XPeria phones & tablets (embraced open source and easy bootloader unlock, I own a tablet that I'm extremely happy with)
[EDIT] - Separate some points about the language, also add a link to the strange loop talk on the rewrite[5]
[0]: https://pub.dev/packages/sqflite
[1]: https://pub.dev/packages/json_serializable
[2]: https://pub.dev/packages/sqlite3
[3]: https://www.youtube.com/watch?v=qXAUNLWdTcw&list=PLjxrf2q8ro...
[4]: https://github.com/sony/flutter-embedded-linux
[5]: https://www.youtube.com/watch?v=WjdrUphF5l4