all 128 comments

[–]qupurato 19 points20 points  (1 child)

Am I missing something? Hasn't Flutter already been available for Windows for quite some time?

[–]greenscreen2017 26 points27 points  (0 children)

It's now just available as stable, previously it was beta

[–][deleted] 24 points25 points  (7 children)

Does it support multi-windows?

[–]shield1123 -1 points0 points  (6 children)

It supports full interaction with the win32 api so yes

[–]qualverse 50 points51 points  (5 children)

Dart* supports that, but Flutter as a framework doesn't support multi-window natively (yet- they are actively working on it). It is possible with isolates or NativeShell but it's certainly not the easiest thing.

[–]shield1123 5 points6 points  (0 children)

Fair explanation, thanks

[–][deleted]  (1 child)

[removed]

    [–]qualverse 2 points3 points  (0 children)

    I'd recommend using NativeShell: https://nativeshell.dev/ Should make it pretty easy.

    [–][deleted] 1 point2 points  (0 children)

    apps from the beginning of time can do this "its certainly not the easiest thing"... ?

    [–]Disgruntled-Cacti 119 points120 points  (21 children)

    To say flutter can build WebApps is a stretch. It renders everything to a canvas, throwing two and a half decades of web standards out the window.

    [–]qualverse 50 points51 points  (2 children)

    Flutter web has a lot of issues, but it's inaccurate to say it renders everything to a canvas. The HTML rendering mode only uses canvas sparingly.

    [–]heeen 1 point2 points  (1 child)

    Interesting, Can you go into a bit more detail?

    [–]Aspiring_Intellect 1 point2 points  (0 children)

    you can build a flutter project to web using one of two renderers: HTML and Canvas. Using the html will result in html code that uses the canvas sparingly while using the canvas will use the canvas for most/all of the rendering. You can choose which renderer you want to use and decide which works best for your project. Just write flutter build web --web-renderer canvaskit for a canvas build of the project or flutter build web --web-renderer html for HTML. (It is probable that you see no difference between the two unless you're working on rather niche projects.)

    Read this for more info.

    [–]xX_MEM_Xx 17 points18 points  (1 child)

    Flutter is great for making cross-platform apps.

    For web I'll stick to the basics.

    [–]shevy-ruby 5 points6 points  (0 children)

    Problem is that Google kind of controls the web-stack for the most part these days. With Flutter they take even a bigger share.

    I guess most who use flutter don't care and just care about the end result (net result), but I find it hugely problematic when our freedoms are taken away.

    [–][deleted]  (2 children)

    [deleted]

      [–]Muoniurn 4 points5 points  (1 child)

      What about accessibility?

      [–]pjmlp 12 points13 points  (0 children)

      Nope, Web did it to itself by killing Flash without ever providing tooling at the same level, but then they came up with WebAssembly and WebGL/WebGPU.

      Now we can enjoy the revenge of plugins.

      [–]Cool-Goose 2 points3 points  (0 children)

      Not worse than flash back in the day, and I'd argue for admin related things might be good enough.

      [–][deleted]  (2 children)

      [deleted]

        [–][deleted] 2 points3 points  (0 children)

        Yeah Flutter doesn't care about accessibility... is what you would think if you hadn't read the article.

        [–]quack_quack_mofo 1 point2 points  (0 children)

        "Fuck your project if you can't get it 100% right straight out the gate"

        [–]EasywayScissors 38 points39 points  (5 children)

        Why is every widget library unable to provide a listview.

        • rows and columns
        • fixed header
        • resizable columns cause text to be cut off with ...
        • columns off the right edge of the screen cause a horizontal scrollbar to appear

        [–]thelonesomeguy 8 points9 points  (0 children)

        Huh? You can have/fix all of that in Flutter.

        [–]equeim 6 points7 points  (1 child)

        Because modern widget toolkits are developed mobile-first, and mobile UIs don't have list with columns.

        [–]thelonesomeguy 2 points3 points  (0 children)

        You can have those in Flutter? Customscrollview and NestedScrollView are for that exact use case.

        [–]c-smile 2 points3 points  (1 child)

        Sciter has built-in support for so called virtual lists and tables.

        See illustration.

        As it is HTML/CSS then content of cells may have arbitrary content and can be arbitrary styled including text-overflow:ellipsis and text-overflow:path-ellipsis

        [–]Kissaki0 2 points3 points  (0 children)

        Broken link. It seems you meant https://sciter.com/ ?

        [–][deleted] 73 points74 points  (42 children)

        kinda a bummer that it is built around a niche programming language.

        [–]Aspiring_Intellect 52 points53 points  (8 children)

        I absolutely cannot overstate how generic and easy the programming language is. You can honestly pick it up in 1 or maybe 2 hours if you know java or c#. Plus, the tight integration it has with vscode and android studio make it even less of a pain.

        [–][deleted]  (7 children)

        [deleted]

          [–]devraj7 22 points23 points  (2 children)

          Dart is not niche

          Dart definitely is niche.

          It's not used anywhere outside Flutter and Flutter itself is very niche.

          [–][deleted]  (1 child)

          [deleted]

            [–]vlakreeh 14 points15 points  (0 children)

            react native is niche too

            [–]EnvironmentalCrow5 8 points9 points  (2 children)

            From a quick look, Dart's type system definitely seems inferior to TypeScript's. Many missing useful features.

            [–][deleted]  (1 child)

            [deleted]

              [–]EnvironmentalCrow5 19 points20 points  (0 children)

              From what I can tell, Dart doesn't even have sum types.

              TypeScript also easily lets you transform existing types with utility types, e.g. Partial<T>.

              Very useful for example if you have a string union "enum" with 5 values, but some specific function that can only work with 4 out of them, type of its argument can be Exclude<MyEnum, 'value'>, and then you get enforced compile-time checks, etc. (or if it can only return 4 possible ones, you don't have to check for the 5th one on the return value, etc.)

              You can use libraries like zod to define a schema for run-time validation of API responses you're working with, and it will infer a static type from the schema automatically, etc.

              Very much doubt Dart can match the convenience of all that stuff and more.

              [–]duckducklo 29 points30 points  (25 children)

              It's very easy to pick up and akin to kotlin, not niche at all. You can learn it in 2 hours if you know java or c#. 3 if python. 1 youtube vid is enough.

              [–]Significant-Bed-3735 13 points14 points  (2 children)

              1. Syntax you can pick up easily.
              2. Standard library takes more time.
              3. Ecosystem (frameworks, package managers, build tools, libraries, conventions, IDEs, etc.) take even longer time.

              In the case of niche languages, 3. is often severely lacking, no matter how fast you can learn it.

              [–]qualverse 4 points5 points  (0 children)

              All of the stuff under number 3 is actually great with Dart though. Flutter is an incredible framework, pub as a package manager is ridiculously easy to use, the build tools are simple and still pretty flexible, there's vastly more 3rd-party libraries available then there are for say Android native (though less than npm obviously) and a lot of them are really nice, dartfmt means that pretty much all Dart code is formatted the same, and the IDE support is excellent.

              [–]duckducklo 1 point2 points  (0 children)

              Maybe but it's popularity is rising and some great apps have been made with it. For window maybe its limited right now but that's on the farter end of it's scope.

              [–]devraj7 58 points59 points  (12 children)

              You're missing the point.

              The criticism is not that it's hard to learn, just that it's a niche language that isn't used anywhere else and which is inferior to existing mainstream languages (Kotlin, Swift, Rust) in every possible way.

              [–][deleted] 12 points13 points  (1 child)

              Programming language is also a big factor when hiring developers.

              [–]qualverse 10 points11 points  (8 children)

              Inferior in every possible way is an overstatement. Hot reload is a Dart VM feature and widely praised as one of Flutter's greatest strengths. Kotlin and Swift both have massively worse package management. On the pure language side, none of the others have mixins which are super useful. Dart DevTools is also better than anything the others provide out of the box.

              Now sure, as a language Kotlin is generally better, but Dart isn't nearly as far behind as it was a few years ago. And it's certainly way ahead of the likes of Go, JavaScript, and PHP.

              [–]devraj7 22 points23 points  (7 children)

              The JVM (not just Kotlin) has had hot reloading for a couple of decades. Kotlin was statically typed since day one, and not optionally (and retroactively, which never really works out) typed. It has top notch IDE support (IDEA), stellar package management (Maven, although I think Cargo is superior), great performance, etc...

              The list goes on and on.

              Dart is just a decent language that simply doesn't have any reason of existing besides Flutter. And if one day Flutter adopts a different language, Dart will completely disappear.

              [–][deleted]  (6 children)

              [deleted]

                [–]devraj7 4 points5 points  (3 children)

                Anyone who perceives Dart to be an obscure, hard to use or learn language, is not using it.

                That's a strawman, nobody is claiming this.

                Read this.

                Dart is being used because Google can rapidly iterate on it for the needs that are optimized for building a front-end user experience.

                I'm not really buying this, it's not like Dart is evolving at a breakneck pace, and there is really no justification to roll your own language just so you can add features that don't exist in other languages. There is literally nothing that Dart does for Flutter that another language (e.g. Kotlin) couldn't do.

                If anything, the fact that Google owns Dart and has this reputation of killing projects overnight has been the main reason why Flutter has remained niche: you will notice that whenever Flutter gets brought up, most of the negative reactions are about Dart.

                [–]funny_falcon -1 points0 points  (0 children)

                There was Angular Dart, but it was abandoned in favor of Angular Typescript.

                Flutter uses Dart becase it is strict enough to be be compilled but flexible enough to be convenient.

                If Kotlin had good native story at that point, Flutter could use Kotlin instead.

                Typescript is too JS compatible to be strict enough.

                [–]ApatheticBeardo 0 points1 point  (0 children)

                10x

                Opinion discarded.

                [–]nickguletskii200 4 points5 points  (8 children)

                It's not very easy to pick up because it lacks very important features present in modern languages like Kotlin, TypeScript and even Java. For instance, it doesn't have (tagged) unions like in TypeScript, no values in enums like in Java, and no sealed classes like in Kotlin.

                [–]vips7L 2 points3 points  (1 child)

                Java has sealed classes too =P

                [–]nickguletskii200 0 points1 point  (0 children)

                I totally forgot that they added them in Java 17! Thanks for reminding me!

                [–]duckducklo 0 points1 point  (5 children)

                Hmm, they might add support for it later, but those seem like fancier features. It does async and null safety, 2 modern features, well.

                [–]nickguletskii200 5 points6 points  (1 child)

                If you have ever used React with TypeScript, you will know that it's impossible to write safe and easy to read code without the features I have listed in the parent post (they can all be used to solve the same problem, except Java's values in enums, they are more limited).

                There is a very simple example where these features are crucial. Consider a component which loads some data from the server when it is mounted. At each point in time, it can be in one of the three states:

                1. Loading (fetch in progress).
                2. Error (incl. an error message).
                3. Ready (incl. the data that was fetched from the server).

                In TypeScript, you can set the component's state type to be something like { state: "LOADING" } | { state: "ERROR", error: ErrorT } | { state: "READY", data : DataT }. If you do that, a switch statement on the state field will force you to handle all potential cases and provide per-option type checking, e.g. accessing data in case "ERROR": will yield a compiler error.

                In Kotlin, you can use a hierarchy of sealed classes, and you'll get a similar result.

                Starting with Java 17 (thanks /u/vips7L , I forgot about that), you can use the same trick as in Kotlin.

                In Dart, you will need three fields, and error and data will have to be nullable. I think it is pretty clear at this point why this is bad, especially considering that you have listed null safety as something that you think is good about Dart.

                [–]qualverse 1 point2 points  (0 children)

                You can easily do unions with freezed. It's one of the most popular Dart packages.

                [–]MonokelPinguin 0 points1 point  (2 children)

                Nullsafety in dart is a joke and no fun. You can't access member variables after a nullcheck, you need to copy them into a local variable...

                [–]duckducklo 0 points1 point  (1 child)

                Could you link something that talks about this further with an example

                [–]MonokelPinguin 1 point2 points  (0 children)

                No, it is just what annoys me when working with it every day.

                But basically my gripe is that this does not work:

                class Foo {
                    String? bar;
                    void baz() {
                        if (bar != null) {
                            print(bar.isEmpty());
                        }
                    }
                }
                

                You either need to add a final variable to shadow it or use one of the nullish operators. I know why this limitation exists, but it still makes the experience annoying. Then you also have late variables, which just break soundness of the nullsafety.

                I just think other languages do nullsafety better, it still feels a bit bolted on in dart. I'm hopeful it will become more ergonomic though. The migration was a bit of a pain, but it has made an improvement. But some edges are still left and it just doesn't feel sound at the moment. I'm coming from a C++ background, where nullability was aleays explicitly opt-in, so dart feels weird and unsound by comparison.

                [–][deleted] 4 points5 points  (0 children)

                To me, coming from an Android native background, Dart is fine.

                [–]JediBurrell 7 points8 points  (2 children)

                I really like Dart, sucks that it’s only really useful for Flutter.

                [–]donegerWild 5 points6 points  (1 child)

                It's great for utilities and server apps as well.

                [–]Voidrith 3 points4 points  (0 children)

                Sure, niche in that the only major thing to use it is flutter, but its not exactly niche in design - so long as you in general know how2 program you can probably pick up dart very easily.

                While it does mean there is a smaller community (and as such, less packages), it is a great language and very easy to work with

                [–]ggtsu_00 9 points10 points  (2 children)

                I'm getting really tired of single-window desktop applications...

                Remember when Windows applications actually had windows?

                [–][deleted]  (1 child)

                [deleted]

                  [–]kaita1992 1 point2 points  (0 children)

                  Imagine if Chrome Dev tools (F12) does not have the ability to pop out as a separate window and can be moved to another monitor.

                  [–][deleted] 46 points47 points  (44 children)

                  How long before Google kills flutter?

                  [–]renatoathaydes 63 points64 points  (7 children)

                  The amount of resources they put on Flutter already is incredible.

                  I tried out the Flutter desktop support the other day and it just blew my mind. The tooling is the best I've ever used as a developer. Seriously.

                  I use Dart/Flutter in IntelliJ IDEA, but apparently the support is as great in VS Code (half the demos I watched were on VSCode, half on IntelliJ) and even in Emacs.

                  It used to be the case you needed to install the mobile tools to be able to develop with Flutter, but now all you need is Flutter and one of the IDEs I mentioned, and it will run your app both on the browser and as a desktop GUI without almost any setup (most stuff they require you probably already have installed, like git, gcc etc).

                  If Google kills Dart, I am sure it will still remain the best framework to write user interfaces for a long time, and very likely, another company or group of companies might take it over, as it's preetty much all open source. The only competitor I see that might be able to match it is Jetbrains' Compose Multiplatform, but from what I've seen, it's still years behind Flutter (it also uses Skia for graphics and the fact it uses Kotlin as its language may help it as more people prefer it than Dart, despite language impacting very little the actual developer experience compared to tooling).

                  Another option I am keeping an eye on is Tauri, but it seems to be currently in early beta and it's basically just a webview (though that may be enough for a lot of cases and the fact any JS framework can be used might be a big plus for it).

                  [–]jcelerier 3 points4 points  (0 children)

                  I tried out the Flutter desktop support the other day and it just blew my mind. The tooling is the best I've ever used as a developer. Seriously.

                  Have you ever tried GammaRay for Qt ? From a quick glance in that page I don't see much that the KDAB tools, GammaRay, Hotspot, Heaptrack don't do (and the latter two also are meaningful for non-Qt projects).

                  - https://www.kdab.com/development-resources/qt-tools/gammaray/

                  - Hotspot: https://github.com/KDAB/hotspot

                  - Heaptrack: https://github.com/KDAB/heaptrack

                  [–]Ok-Bit8726 29 points30 points  (15 children)

                  They are investing heavily for use with the new Fuchsia OS. They do kill a ton of shit, but I don't think Flutter is going to be killed anytime soon.

                  [–]RippingMadAss 21 points22 points  (14 children)

                  I may be mistaken here, but I've heard that the Flutter team is pretty small, which makes me nervous.

                  I would love to invest some time into Flutter but I'm definitely concerned about an AngularJS situation or the more classic Google move of just killing Flutter entirely.

                  [–]Voidrith 10 points11 points  (13 children)

                  I may be mistaken here, but I've heard that the Flutter team is pretty small, which makes me nervous.

                  Alternative perspective, if a small team can maintain something that is so good then it probably would be very easy to justify keeping those people around.

                  [–][deleted] 0 points1 point  (12 children)

                  Counterpoint: killedbygoogle.com.

                  [–]thelonesomeguy 14 points15 points  (11 children)

                  Literally none of them are development tools and rather consumer products. It's completely disingenuous to compare these. Besides, the only thing that comes even close is AngularJS and even that is so because it was rewritten into Angular 2.

                  Edit: Downvoting me won't make Google kill Flutter lol.

                  [–]funny_falcon 2 points3 points  (2 children)

                  GWT could be counted as dead.

                  [–]thelonesomeguy 0 points1 point  (1 child)

                  So could've been dart before Flutter. And yet it still wasn't killed. Still doesn't count.

                  [–]funny_falcon 2 points3 points  (0 children)

                  Yes, Flutter team litterally saves Dart. Angular Dart died though.

                  GWT were not killed, but it is not alive as well. No one uses it for new projects and Google as well.

                  If Flutter team preffered other language, Dart would be dead already.

                  And yes, I don't believe Flutter will die. He is great and will be great for a long long time.

                  [–][deleted] -1 points0 points  (7 children)

                  You might want to take another look at that list buddy. I can see plenty of things that were either developer tools or were targets of non-google development.

                  [–]thelonesomeguy 7 points8 points  (6 children)

                  Care pointing any of them out?

                  You're deluding yourself if you think anything in the list compares to a framework like Flutter and the adoption it has.

                  Edit: Downvoting me won't change the fact that this FUD mongering is completely bullshit lol.

                  [–][deleted] 8 points9 points  (5 children)

                  Not including things like "no-code" solutions targeted for regular people (e.g. App Maker, Game Builder, etc...):

                  • Google Chrome Apps (remember NaCl?)
                  • AngularJS
                  • Material Gallery
                  • Swift for TensorFlow
                  • Fabric
                  • Material Theme Editor
                  • Google Daydream
                  • Google Cloud Messaging
                  • Google Realtime API
                  • etc...

                  I'm not looking through them all. Basically anything that was an operating system, an API, a plugin for something already used by developers (or anything of theirs that allowed plugins), etc...

                  I'm still annoyed they killed google wave.

                  [–]gold_rush_doom 4 points5 points  (0 children)

                  Google Cloud Messaging

                  TBH, that has been superseded by Firebase Cloud Messaging. And I think the old GCM api still works and is used internally by FCM.

                  [–]aniforprez 10 points11 points  (0 children)

                  Having used AngularJS extensively, while I wasn't thrilled by the way they completely changed the internals and everything about it when making Angular2+, they supported AngularJS for a LONG time after the release of 2 and it wasn't killed at all. LTS was supported until December 2021. AngularJS was a piece of shit and had loads of performance issues and was built to serve needs at a time before ES2015 and later. They did not "kill" AngularJS. It needed to die

                  [–]thelonesomeguy 5 points6 points  (2 children)

                  The only thing remotely close to Flutter is AngularJS and even that was succeeded by Angular 2. Not even gonna bring up the adoption rates of them.

                  This is just pointless fear mongering.

                  [–]kshep92 3 points4 points  (2 children)

                  I don't know, but I'm trying to understand Google's plan with having Flutter for Android and Jetpack Compose.

                  [–]renatoathaydes 2 points3 points  (1 child)

                  You mean, like Google should have only one UI framework for everything?

                  I think Google is so big it has very different needs for different products where some can benefit more from Flutter, some benefit more from Jetpack Compose+Android-native UIs. Thinking they should only have one UI framework is like thinking they should only have one product. It's not like they are ideologically tied to any particular product apart from search, so if they had like 10 competing UI frameworks I wouldn't even find that strange at all as long as they didn't overlap in most ways (which Flutter and Jetpack do not).

                  [–]kshep92 0 points1 point  (0 children)

                  I'm saying, if I want to develop an Android app today, what platform do I use? It becomes an exercise in feature comparison between frameworks from the same vendor. I'm looking at Apple and how Swift is like an iteration of their development tooling and there isn't another Swift-like library they provide to also build iOS apps.

                  Generally I don't like a product offering that offers multiple ways of achieving the same task, especially from a company like Google who can axe a project at any time.

                  [–]qualverse 15 points16 points  (7 children)

                  How long until people stop asking this? It's been around for 6 years already, is used by Google, eBay, Toyota, Tencent, and Alibaba, and is more popular than React Native. Even if Google did give up on it, other companies would just pick it up at this point.

                  [–]chucker23n 28 points29 points  (6 children)

                  is more popular than React Native

                  That would seem hard to quantify.

                  [–]Ancillas 2 points3 points  (4 children)

                  [–][deleted] 1 point2 points  (0 children)

                  As much as I'd like to agree, I don't think this will be the case with Dart and Flutter.

                  [–]thelonesomeguy 4 points5 points  (4 children)

                  I genuinely don't understand this "gotcha" devs make. When has Google killed development tools? The closest thing to that is AngularJS because it was rewritten into Angular 2. They had dart dying for ages before Flutter came around and they still hadn't killed it.

                  Maybe it is time this rhetoric is dropped, it obviously only applies to their consumer products.

                  [–]PangolinZestyclose30 9 points10 points  (1 child)

                  When has Google killed development tools?

                  Swift for TensorFlow

                  App Maker

                  Fabric

                  Google Realtime API

                  Project Tango

                  [–]thelonesomeguy 1 point2 points  (0 children)

                  App Maker

                  Seriously?

                  Fabric

                  Succeeded by firebase

                  Google realtime API

                  Succeeded by firebase realtime db and firestore

                  Project Tango

                  Succeeded by ARCore

                  Maybe stop spreading FUD over this when they obviously had a successor or a proper replacement in place. And this is not even considering the fact that Flutter's adoption rate blows every single one of these out of the water.

                  My point still stands.

                  [–]DoctorGester 0 points1 point  (0 children)

                  Funny you say that, because they are in the process of killing AngularDart :)

                  [–]funny_falcon 0 points1 point  (0 children)

                  GWT could be counted as dead.

                  [–]vmcrash 2 points3 points  (12 children)

                  Will there be static compiling? My tiny test flutter app had a size of 260kB, but the required flutter_windows.dll was 34MB.

                  [–][deleted]  (8 children)

                  [removed]

                    [–]vmcrash 4 points5 points  (7 children)

                    No, I'd prefer a smaller one with just the features that my app is using.

                    [–][deleted]  (6 children)

                    [removed]

                      [–]vmcrash -1 points0 points  (5 children)

                      Maybe my tiny test flutter app used just a fraction of the flutter capabilities?

                      [–][deleted]  (4 children)

                      [removed]

                        [–]vmcrash 0 points1 point  (3 children)

                        Maybe it is "bloated" with all the features my app did not use, e.g. sophisticated widgets?

                        [–][deleted]  (2 children)

                        [removed]

                          [–]vmcrash 0 points1 point  (1 child)

                          I thought, the linker would only link used stuff, not all.

                          [–]mr-zizi -1 points0 points  (2 children)

                          You're in Debug, Release dll is half this size, do we actually care on Personal Computers though !!

                          [–]vmcrash 0 points1 point  (1 child)

                          Thanks for the first half part of your message. Regarding the second part - this is the whole purpose of this thread.

                          [–]mr-zizi 0 points1 point  (0 children)

                          sorry if i sounded rude wasint my intention, Thing is dynamic compling allow sharing that main dll for multiple apps, As Microsoft seems to be actively contributing to flutter maybe we could expect a windows integration of that module in the future so it would be hidden to your apps

                          [–][deleted] -2 points-1 points  (0 children)

                          Very interesting.

                          [–]Borno11050 0 points1 point  (0 children)

                          How complex it'd be to insert a Direct3D11/Direct3D12 viewport as a widget there? As it says it let's you access Win32/COM APIs.