A lot of the improvements made to Flutter happen via improvements to Dart, like the recent null safety feature.
While it's posited as a UI framework, Flutter is similar in a lot of ways to React: mobile applications are based around user interfaces, and you can use Flutter to build fully-featured applications, with state management, authentication, and everything else you'd need for a production-grade application.
Flutter has a big following on YouTube because it's really visual: like most UI frameworks, you can use it to quickly flesh out full application layouts. Andrea Bizzotto's Code With Andrea channel will teach you everything you need to know about Flutter, like state management, learning Dart, and more.
🤔 Why it matters
All cross-platform frameworks (e.g. React Native, Cordova, etc.) allow you to do more with less. Using a single codebase to build multiple applications allows you to ship your product to a larger audience without getting bogged down in specialization.
Because of this, you're less constrained by implementation details. You can quickly take projects from idea to app, and with the ubiquity of mobile devices, you can reach unexpected audiences.
Flutter compiles to native code. Unlike React Native, there's no intermediary bridge translating your code to the device you're running on. This means that Flutter apps are faster than React Native apps, but not as fast as 100% native apps.
Flutter is in an interesting spot because there isn't a definitive set of patterns that have been ordained as the way to build Flutter apps. For instance, state management remains an open question: developers have ported familiar tooling like Redux into Dart.
Like with React, composing your Flutter components is also a wheel constantly being reinvented, though seemingly the most popular pattern right now for building them is with the bloc package.
Flutter's biggest problem, according to developers, is that development needs to slow down. The team has been adding more platforms and deploy targets at the expense of engine performance and the quality of first-party plugins.
Flutter doesn't build native components. It replicates them well (by providing Material UI components for Android, and the Cupertino library for iOS), but at the end of the day, it isn't native, and savvy users might notice that your Flutter app feels a bit different than the other apps they use day-to-day.
Cross-platform development as a whole remains experimental. As famously covered by Airbnb's "Sunsetting React Native" blog post, working with cross-platform frameworks is great when they work. When they don't, it's extremely painful, and in Airbnb's case, it was enough for them to abandon the approach entirely.
When you pick up a cross-platform framework, you're heavily relying on the ecosystem and the maintainers of that framework to stay up-to-date with the underlying operating systems and platforms you're building apps for. This means supporting new iOS and Android versions at least once a year, as well as constantly supporting new hardware and APIs. Andres Avendano cites this as a primary reason not to build hybrid apps.
Flutter Widget of the Week is a long-standing weekly YouTube series from the Flutter team covering the Flutter SDK and introducing various components with high-quality videos. Even if you aren't going to pick up Flutter, it's a fun watch!