I just realized: Flutter is fuc*** up! O.o

I was ~fighting with stupid~, I mean, talking to some nice friends over Reddit about why Flutter is superior to Kotlin Compose and I just realize one thing:

The only reason Flutter is awesome is because of a) it draws the components, so it can literally do anything (even put a youtube video as the title of an appbar) b) the user experience is awesome, especially hot reload

But…

a) Dart is a crap language, especially for building tools. b) VSCode is a piece of crap (there are a LOT of bugs in Dart/Flutter plugins that are because of VSCode. The situation in android studio plugins is worse), c) Flutter is backed up (lol) by Google. And Google made clear that it doesn’t want to play with this toy anymore.

Consider now JetBrain’s Kotlin Multiplatform: a) it is backed by an awesome language (with a VERY mature SDK: JavaSDK), b) they are very well known in building good IDEs c) they have the interest to make things happen, as they are exclusively a development company, so I doubt they’ll ever abandon kotlin/km.

So, in my narrowed shortsightedness opinion, the only reason Flutter is da best is because of developer experience (especially hot reload). The moment JetBrains figure this out, Flutter is so fucked.

You leverage some interesting points but it would have been wise to go gently and not shake personal beliefs too much :smiley:

Can you edit your post in a manner that would invite a maximum of readers to enter the discussion?

Flutter is not doomed and not going anywhere. A lot has already been built on it and adoption is still an on going process. Larges companies are moving in and won’t let go before long. I even predict we’re moving from mobile to industries, that’s were I’m at now.

I too meet some bugs sometimes with VS Code and others points you listed but on my daily experience the main differentiator is the maturity and involvement of the community in the packages. And obviously Jetbrain is making a grandiose work to optimize Dev Ex with crazy response time while I can still break the analyzer…

The JVM brotherhood is really strong and people work together on large libs. They’re also more experienced or with a background in larges structures so they bring back their knowledge in open-source.

Their build tools rely on decades of experimentations (ant, maven, gradle) and the support of larges institutions (Apache foundation) I wonder how we can bring this back in the Flutter world… :wink:

Flutter community is structured differently and I’ve strong opinion on why…

There’s a real question here on how to help the Flutter community mature to the same level of Java, C# and others well established communities codes that goes beyond technics to serve the common good.

For the rest it’s only a question of patience. Meta-programming gonna land probably next year and it will start a rebirth of tools and best practices. While this land we can take a lot of inspiration from others communities and try the build the same here.

Dart and Flutter are solid enough to now go beyond only tech but it’s mainly on us.

7 Likes

WDYM, Dart is great.

I’m cruising in Android Studio.

Cool…

Mature SDK, sure. Awesome language what?

Android Studio is just repackaged Idea, you know that right?

1 Like

I agree with @BlueAquilae. It would be interesting to get more facts on how KMP has advantages/disadvantages when writing an app. Just because people prefer Kotlin over Dart isn’t an argument for me to even consider a switch. Also please refrain from statements like “Dart is a crap language” because that’s not giving any reason beyond your dislike. I personally like Dart a lot for a lot of reasons.
If we want to make this discussion worthwhile we need to clearly discuss pros/cons.
Can you share experiences with KMT? On which platform is it how mature?
How big is the current market share. Jetbrains is awesome but small looking at the size of the mobile market.

5 Likes

Mature SDK, sure. Awesome language what?

I talked about Kotlin.

Jetbrains is awesome but small looking at the size of the mobile market.

Kotlin is JetBrains work. It’s present in all Android devices, which is 74% of the planet market share. O.o

Anyway… potato potato.

Just because programs that are built using your IDEs/compilers are used everywhere doesn’t mean that your company earns a lot of money or is a big player compared to Google.
And I want to ask you to try to be less aggressive and smug in your replies please.

Ah, ok. Still, I had some experience with Kotlin and honestly it didn’t click or strike me as something amazing. If anything it was just extra overhead, as we had some projects that mixed Java and Kotlin it was a nightmare of context switching between the two.

One of the best things about Flutter is not hot reload, in my opinion. It’s the fact that it strips all of the unnecessary layers of complexity and context switching and gives the simplest setup you can get for cross platform development.

You only need to know one programming language, one package manager, one SDK, one testing framework, one Futures implementation, one Streams implementation, comprehensive standard library, everything is async by default, AOT/JIT compilation, non-nullability, flexible and simple object/class model.

No Kotlin will be able to fix that, I’m afraid.

3 Likes

I don’t know how many frameworks you had tried, but I used, Unity, Unreal, Xamarin, React (web and native), Node, VueJs, Swift (with Xcode), .Net (with visual studio), android studio and Java…

And I’m really grateful for the language and tools that we have in Dart.

They are not perfect but do their job 95% of the time.

I suppose that the best thing for all that ppl that see the dark side over here, the best thing for them is just go and try the new other thing.

In my case I always come back and feel home in Flutter.

Is not perfect, but it is in our hand to make it better.

8 Likes

In fact JetBrains is working on hot reload for CMP, they showcased something like that on a recent conference.

Imho CMP is limited here due to fundamental differences between Dart VM and JVM, but in general this experiment looks great. Not sure if they are able to reload parts of the code outside of the Composables. You can compare first demos of Dart hot reload from 2016 https://www.youtube.com/watch?v=iPlPk43RbpA.

I think it’s great to see JetBrains following the footsteps of Flutter and Dart. They have a head-start in some areas (e.g. platform views, hopefully they won’t make the same mistake), but at their foundation they work in a vastly different environment, that spans to early 2010s or even earlier. They may end up reinventing the wheel or avoiding some of the challenges that Flutter has to deal with (e.g. focus on web vs desktop).

Who knows, maybe in few years you will use CMP for desktop apps and Flutter for Android and iOS :slight_smile:

5 Likes

Kotlin is JetBrains work. It’s present in all Android devices, which is 74% of the planet market share. O.o

I’m afraid you are very much mistaken making that assertion. Kotlin is not present on a single Android device. For Android app development, Kotlin compiles to Dalvik bytecode which is then run JIT (sometimes with on device AOT) but it is not present on any Android device.

Anyway… potato potato.

No, its not, you are just simply factually incorrect.

6 Likes

Hey @anon92706177, I’m happy to discuss advantages/disadvantages of Flutter&Dart compared to Kotlin/Compose, but did you really need to use profanity? Your post is the forum equivalent of clickbait.

As for the points you’re making, I think you’re miring your good points with things like “Dart is a crap language” (hard disagree), “especially for building tools” (what?), “[Jetbrains] are exclusively a development company, so I doubt they’ll ever abandon kotlin/km” (how does that follow? I like to remind people that the really big languages like C, C++ or Java all come from very big corporations and institutions; to be clear, I’m not worried about Kotlin, but by the same token I’m even less worried about Dart; there’s a good talk about this called “The economics of programming languages”).

In summary, please keep things civil and discussions free of curse words. You’ll find that the Flutter community loves to discuss Dart’s and Flutter’s failures and shortcomings — they don’t need to be wrapped in “fucked” and titled “Flutter is fuc*** up! O.o”.

11 Likes

I have used Swift before, and I must say that it is not much different from Dart. However, I have never used Kotlin, so I cannot compare Dart with it.

On the other hand, I completely disagree about VSCode. VSCode is undoubtedly a gem compared to Android Studio. It is a very lightweight editor that makes it possible to run builds even on very old computers.

Hot reload is good, but that is not why I like Flutter. I appreciate Flutter because it meets business needs, and the community is amazing.

3 Likes

Before 2021 my favorite development language was Kotlin. It gave me access to the JVM or Kotlin Native. It could also even target the browser with KMP. After struggling to find a true cross platform dev stack I had hoped that KMM/KMP had matured enough to get there. It turned out no to be. But with Flutter Desktop in beta I gave it a college try despite my reservations. After finally wrapping my head around declarative UIs, something I had been kicking the can down the road on in general, I totally fell in love with Flutter and Dart. I wrote this blog post on the topic even.: Dart, Flutter, App Dev and More •

At the time I was still using my favorite language, Kotlin, for other things but then I Dart started showing up more and more as the first thing I reached for for CLI tools, small web services etc. At this point it is my favorite general purpose language. I still have a list of things I wish Dart had that I miss from Kotlin, but I only got one blog post about some of that and one of those things, assignments from switch/ifs, is in the language now.

Compose has matured since 2021 when I last looked around for a cross platform solution. I have looked at it again but only superficially. My original complaint about the KMP system feeling too Rube-Goldberg like still holds true from what I can tell. I thought that Kotlin’s ability to do DSL stuff would make it so that a more concise syntax when defining widgets could make it more attractive. I was surprised how much it didn’t seem to any longer. That’s probably because the IntelliSense is good enough to make it at most an aesthetic thing but not that much of one even.

The only thing I have a genuine concern about is the fact that Google is most of the force behind Dart/Flutter development. I haven’t re-run the stats since September 2022 but when I did Google was pretty much the whole thing: Dart/Flutter Open Source Contribution Stats (and why I use it despite Google's dominance in it) •

It does concern me because of Google’s penchant for killing off even popular products and dev tools, hello Reader, Stadia, and probably soon to be Fuchsia. That’s why I’m glad to see some effort to create an independent organization that could carry it on if they decided to pull the plug. It’s had most of the heavy lifting done so carrying it forward, under a probably slower deveolpment pace, would be feasible if Google pulled the plug. I had hoped to prove it could be completely rehosted without any Google services but I’ve never gotten around to doing that.

10 Likes

From all the conversations with people inside the Flutter team and with @eseidel I’m fairly sure that the risk of Google abandoning Flutter is minuscule.
They use it too much internally and some fairly big companies have committed themselves to Flutter.
@hankg thanks a lot for your experience with Kotlin

3 Likes

There’s strength in having a diversity of languages and tools for software ecosystems. Redundancy enables more resiliency. What seems evident about modern, still evolving but production-active programming languages is they are slowly evolving to converge, sharing more similarities over time. Explicit nullability, type inference, generics, asynchrony at the language-level- this is the “stone soup” we’re making and enjoying. Dart is a part of that, and is evolving by borrowing and growing, because the people involved know there’s value in learning from other languages and ecosystems.

I’d argue the biggest strength of Kotlin is its interoperability with legacy Java code. Companies invested in years or decades of Java code can bring their legacy code (their past investment) along for the ride with Kotlin. I personally also think this one of Kotlin’s biggest weaknesses, because there’s a lot of complexity introduced by the compiler to implement that interoperability.

Kotlin Multiplatform borrows a lot from other languages to provide Compose. The fact that it requires a compiler plugin to build says a lot about just how much effort it takes for Kotlin to function in a declarative and reactive way. Did you know that every Composable is secretly given an extra function parameter. It’s called a context. If that sounds familiar, it’s because it serves a similar purpose as Flutter’s BuildContext. But in Kotlin Multiplatform, the context is hidden from the code. That’s an interesting and different design choice. There’s great value in simply watching to see which approach is more practically effective. Or maybe it doesn’t matter at all. The diversity is the strength here: trying different ways of solving the same problem helps explore the solution space. Where else do fresh ideas come from?

Remember also that technology stacks tend to specialize over the long term. I think Google’s choice of Java and the JVM for mobile devices reflects the lack of other viable options at the time. The impetus for Kotlin, by Google’s own statements, was to offer a more productive choice for Android developers, but without throwing the baby out with the bathwater, so to speak, by abandoning Java altogether. Java’s origins were that it was originally designed to run TV Set Top Boxes. That’s it’s origin story, and you’d be hard-pressed to predict the path Java would take, back in 1996. A lot of Android’s design is based around the limitations of the early hardware. The core zygote process is basically a workaround for slow JVM startup times. Java was a tight fit on Android initially. If the Dart and Flutter of today were around then, I think Android would have a very different shape than it does today.

That’s where I think the OP doesn’t recognize the arc of development that brought both Dart/Flutter and Kotlin to where we are today. Kotlin Multiplatform is playing catch-up to Flutter for interoperability. If you want to write an iOS Kotlin Multiplatform app today, you have a very limited set of third-party libraries which have been retrofitted with the support for iOS. It will take a while for open-source Kotlin libraries to reach parity with the degree to which iOS is already supported in Dart/Flutter, just because Dart/Flutter has had a head-start. And remember, an iOS app in Kotlin Multiplatform cannot import anything from java- it has to be pure Kotlin, with separate code for Android (which could use java) and for iOS (which cannot use any java).

When I started my own app-development journey just 1 year ago, I picked Kotlin Multiplatform, and hoped that Compose Multiplatform would be ready for me. It wasn’t. A year ago, Compose Multiplatform was a 1.0 alpha release where you had to disable the JVM’s garbage collector to have usable performance. That’s since changed, and Compose Multiplatform has come a long way. But it’s still not the case that you can reliably expect any arbitrary third-party open source library to have Kotlin Multiplatform support for iOS. I spent weeks, one year ago trying to map out which third party libraries had Multiplatform support, so I could build an app that would run on iOS or Android… It was painful to find a library that I thought would meet all my needs, only to discover that the supposed Kotlin Multiplatform support for iOS was actually only partial, or so buggy as to be unusable for production. Not a criticism of the open source community, some of whom don’t have the incentive to build and test their libraries for iOS.

I’m not sure there’s a lot of motivation for companies who have invested in writing two separate versions of their apps to immediately decide to drop their Swift/ObjC codebases in order to adopt Kotlin Multiplatform. There’s significant risk in forklifting an entire platform of paying customers with iOS onto a basically entirely different tech stack. Sure, it happens, but it’s not free, either in terms of money or risk. Even though the languages are different, the Sonos mobile app debacle is a perfect case-study in failure to migrate fork-lift style to a new technology stack. The Ars Technica writeup is amazing.

In the end, even if Google decides to bail on Dart/Flutter, there’s enough inertia from non-Google developers that Dart/Flutter won’t die overnight. If it goes moribund, then we move on. It’s not the end of the world, and honestly, having a diverse set of language skills is more valuable than being a one-language-to-rule-them sort of developer. I love my comfort zone as much as the next person, but it’s important to remember that this decade’s comfort zone is often the next decade’s legacy debt. What I hope most for the future of Dart/Flutter is that we develop some of the most amazing apps that push the envelope for beautiful UIs, performant codebases, fast development, fast multi-platform support and app reliability. That’s how we maintain the pressure on Java, Kotlin and Swift. And hopefully have some fun along the way.

11 Likes

Lol funi post go brrr

Anyway, I just want to address one thing I like with Dart respond to this very vague sentence

Dart is a crap language

I absolute love that when you run dart pub get, all imports; including the autocomplete and whatnot will just work in the IDE.

Then there are some languages that I never experience to manage to do this really well or not very straightforward to do (most definitely not skill issue in my part as a beginner in those even though I’ve been using them in Flutter for years):

  • C
  • C++

Obviously there are other languages that usually do this too, although not as reliably as Dart, in order of usually works for me:

  1. TypeScript
  2. Rust
  3. Swift (If using Swift Package Manager, I wish Flutter will migrate 100% to SPM soon)

Oh and I very much hate that Dart doesn’t have shared memory multithreading because I recently needed that but it’s impossible to do in Dart so I have to reimplement it in Swift and C++ instead which I abhor

3 Likes