10 ms·
Flutter looks good, but is painful
- latchkey 7y agoI've recently done a bit of Flutter development and have enjoyed it quite a bit. The third party Provider API solves all the state management issues, it should become the default. OP has some valid points for sure, but fact is that any framework is going to have issues. Just part of the game.
- sgt 7y agoThat sounds interesting. What would be the go to documentation for a good Provider API implementation (i.e. like a best practice guide with an example)?
- hansjorg 7y agoSee the official Flutter guide on state management: https://flutter.dev/docs/development/data-and-backend/state-mgmt https://flutter.dev/docs/development/data-and-backend/state-... It refers to other solutions as well, but the hands-on example is with provider (starting in the "Simple app state management" chapter)
- latchkey 7y agoThe author isn't the best at documentation, but his code is excellent and he is very helpful if you ask nicely... https://github.com/rrousselGit/provider https://github.com/rrousselGit/provider
- ibejoeb 7y agoFlutter is young, and there are bugs, but velocity is high and it is advancing the state of the art. It is a huge leap in accessibility and productivity. I really don't understand the complaint about setup. If expanding an archive and setting an environment variable are that daunting, wait til you try mobile development... Snark aside, remember phonegap/cordova? Pine for those glory days of low friction?
- andrekandre 7y ago> it is advancing the state of the art in what ways?
- TylerE 7y agoIs “one week of electric scooter rental in Bucharest” the new world currency?
- jimmcslim 7y ago‘Mobile phone minutes’ were a common medium of exchange in parts of Africa (Kenya?) for a while (and maybe still is?)... mobility is also another commonly desirable service, so sure, why not?
- tomca32 7y agoYup, it still is. Lots of that in eastern parts of Africa like Kenya, Rwanda, Uganda. I'm sure cell service providers are pretty happy with it since it turned them into banks.
- oblio 7y agoIf it is, be careful. It's scary riding electric scooters (or bikes) in Bucharest! :-)
- wastedhours 7y agoYeah, you couldn't pay me to ride a bike or scooter around Bucharest!
- nnq 7y ago...only if in the sense that money can get you killed :) Drivers aren't that friendly and attentive :P
- _-___________-_ 7y ago> it took them almost a year to add support for 64 bit in APK While the author's confusion is understandable, because most of the people posting in the linked Github issue have the same confusion, it's always been possible to build a 64-bit APK (and a 32-bit APK). The linked issue is actually about building a single "fat" APK with both 32-bit and 64-bit native libraries in it, which Google Play Store then repackages to have just the needed library for the device it's being downloaded to. Shipping two separate APKs has always been possible and gives the same end result for just a little more build process work, which is (/should be) automated anyway. I've been shipping an app like this for some time now, and it's really not a hardship in any way, certainly not one that justifies the amount of hand-wringing in that Github issue.
- bernaferrari 7y agoAuthor here, I'm sorry for the confusion. I'll correct the article with what you said.
- iainmerrick 7y agoWhat was the holdup, though? This should have been almost a trivial feature to implement (just make an APK with multiple .so files in separate directories). It must have been either low priority (except the Play Store has been strongly encouraging fat binaries for some time now) or there were additional complications (which makes me more suspicious about the stability of the framework).
- _-___________-_ 7y agoMaybe low priority / insufficient resources, or the issue didn't get triaged and brought to the attention of the right person to fix it quickly enough. The fix wasn't complicated at all once it was eventually in, so I don't think it was any deep issue with the framework.
- krzat 7y agoI like Flutter very much. In some aspects it is much better than native iOS development. But it's far from perfect, so perhaps this post will prompt Google to hire more people to handle issues. But, it's not like other companies are much better at this. At React Native they just autoclose them after some time. While Apple most likely has more open issues than Flutter but the data is not public.
- desaiguddu 7y agoI am working on 3 Flutter Applications & 2 of them are currently in production. On average we receive 1 major bottleneck a month, which gets resolved with 3rd Party fixes. Happy to help if you are stuck on any issue with Flutter. Our background is native application development, so far this is the best Cross-Platform Development toolkit available. Phonegap, Ionic & others are web wrappers. PLEASE let Flutter grow!
- GeneralTspoon 7y agoReact Native isn't a web wrapper. It uses a Javascript engine to render native iOS/Android components (unlike Flutter, which doesn't use native components, and instead renders everything from scratch).
- desaiguddu 7y agoGotcha! Edited. From my experience found Flutter more reliable & easy to operate compared to React Native.
- KhoomeiK 7y agoI think this is mostly just a preference thing and may have to do whether you're coming from a React vs Native Mobile background. As a React developer, React Native was really amazing for me and made perfect sense. Flutter on the other hand, not so much.
- verttii 7y agoComparing languages is very different to compare these two SDKs. I've developed apps on both, and personally I've found Flutter significantly more solid and overall just better. Everything is faster and just works (builds, hot reload etc.) on Flutter whereas on RN a lot of the things break constantly for no apparent reason. And all that weirdness like it might work if you rebuild a few more times in a row. Moreover, a lot of the debugging tools work exceedingly well on Flutter while trying to use even just the memory profiler crashes RN.
- curyous 7y agoI moved from Flutter to native Android development and found it to be much more pleasant..
- ensiferum 7y agoSo.. in summary Flutter is a buggy unfinished and badly designed framework. Nothing new here folks.
- hoskdoug 7y agoNot as simple as that. Some people clearly manage to create things effectively with it. Newcomers can see this but understand that there will be difficulties. The difficulty for newcomers is anticipating where the pain points might be. Detailed articles like this are rare and a huge help with assisting with decisions on whether to invest time into it.
- mirceal 7y agoyeah no. i would not bet the farm on this one especially when it comes to developing for Apple devices. Google just doesn’t have the track record to inspire confidence that anything they do is going to stick around
- hitekker 7y agoLast major discussion and conclusions about Flutter: https://news.ycombinator.com/item?id=19853247 https://news.ycombinator.com/item?id=19853247
- bsaul 7y agoDoes anyone has a link for the market shares of cross-platform mobile development tech ( react native, phonegap, flutter, etc) vs native ? in terms of apps on the stores, for example. i know they were considered experimental a few years ago but wonder what’s the status today.
- pcr910303 7y agoWhile this has little relationship to the original article... We really should be trying to use the native GUI toolkit (or cross-platform native UI libraries like libui), not using Flutter-esque libraries that draws everything from scratch. Coherent UI is a very important point to users IMO. Users can assume that some special feature from App X will also work on App Y. For example, in macOS Cocoa, textboxes have universal readline-esque keybindings (and is configurable globally) which, as an Emacs user, very, very useful. Most Mac apps use Cocoa as the GUI toolkit, so basically all kinds of apps can benefit these keybindings. Another example of this directly benefiting users is the addition of tabs in macOS Sierra. macOS Sierra added tabs to Cocoa apps, and applications could get the feature without additional modification. I can use tabs in any application, with the same look-and-feel, in all apps. Stories like these are mostly only macOS; since Windows apps usually just re-invent all kinds of UI elements, while Linux's GUI toolkits are super-fragmented. (GTK vs Qt is one thing, and there are lots of other options!) Adding Flutter or any other UI library that draws everything from scratch is a bad idea.
- Const-me 7y ago> Windows apps usually just re-invent all kinds of UI elements It wasn't always this way. Before Win8, most apps used native controls on Windows. When it became apparent GPU rendering is the way forward, MS re-implemented them in WPF. It does draw everything from scratch, because the backend is now DirectX 9. But it was a first party reimplementation, the UX is good. Then came Windows 8 and Windows 10, trying to converge PCs and phones. They screw up the UX. Now windows phones are shut down, but UX on PCs still suffers the consequences. The new GUI framework is better then ever, but there's no consistent UX on top.
- pcr910303 7y ago> Before Win8, most apps used native controls on Windows. Yeah, it's true but the problem is that the native controls were very limited. There was no central notification system so every Windows messaging app reinvented notifications(unlike macOS which converged to Growl and later, the Notification Center), no standard Ribbon Menu widget (at least when it was first introduced, I'm not sure about the current status) so everyone reinvented it, e.g. > Then came Windows 8 and Windows 10, trying to converge PCs and phones. They screw up the UX. This is so true... Windows 8/10 has a such mixed up UX that some system components are using the new 'metro' style while some others are old Win32 ones that don't support HiDPI... And, (while currently not true) Windows 10 had two settings app that worked differently for a few years. :-(
- dep_b 7y agoI liked the way the UI was built in Flutter and of course Dart > vanilla JS. But with SwiftUI and Jet Pack around the corner there's a bit less appeal, especially since Kotlin & Swift > Dart and a lot of UX niceties come for free in iOS, like rotation / resizing or hiding the keyboard while scrolling.
- IshKebab 7y agoSo mostly this is just complaining about bugs. Does he think that native Android doesn't have bugs? One could easily write the same article for any UI framework. Also it seems like he is complaining that the Flutter team actually uses a public bug tracker. Does he really prefer Android's bug tracker? The place where bug reports go to die. A year or so ago they gave up on it and basically closed every bug as obsolete.
- lovelearning 7y agoI have a couple of android app PoCs in mind but didn't want to go down the Android SDK way which IMO is becoming more and more complicated and verbose with every release. Just tried Flutter and React-Native yesterday for the first time, and I'm sorry to say both were sorely disappointing. Flutter was easier to install and get working, but Dart seems to be as verbose as Java with some JavaScript style syntax mixed in. The main dart file was as verbose as a boilerplate native SDK Activity. RN was worse, though I expected it to be simpler. Something called metro server nearly froze the entire machine on every attempt. Had to power off and restart about 5 times. Then, based on GitHub discussions, built something else called watchman from sources. The official docs don't mention that watchman is critical. That improved it for a while but then the system wide near-freeze came back again. I wasn't even able to display a simple hello world app because of installation and deployment problems. So far, Kivy seems to be the only alternative that is both simple to code and to deploy. Its file sizes are massive, but given that I already find Android SDK so frustrating to design and implement quickly, I don't want alternatives that are equally frustrating.
- javajosh 7y agoWhile it's good feedback to the respective project owners to make onboarding easier, it is a mistake to judge tools based on < 1 day of usage (which is almost entirely onboarding angst). You are only experiencing one, relatively infrequent transient story, not the steady-state one. In the beginning of a devs experience framework code appears to eclipse app code in size and complexity, but over time the app will tend to grow to overwhelm the framework.
- nnq 7y agoYep, React Native has horrible dev experience... this is what drove me to Flutter. Dart may be ugly but after you get used to it it's mostly "Typescript done right" imo ;)
- thiht 7y agoI'm pretty sure Typescript is already "Typescript done right"
- hardwaresofton 7y agoFor those who are looking for an alternative to Flutter/React Native, please check out Nativescript @ https://docs.nativescript.org https://docs.nativescript.org! It's different in a few key ways: - Draws native components (Flutter draws every pixel) - Pure JS native (i.e. JNI powered) shim layer (you can write stuff like `const intent = new Intent()`) - Typescript as first-class (not quite so with React Native, and IMO Typescript > Dart as far as type systems and ergonomics are concerned) - Ability to use both Angular and Vue to structure your app (there's also projects out there like Svelte-Native, which is extremely promising from the performance perspective) - More community driven project (with Progress standing behind, following the open-source & extra features business model)
- deanclatworthy 7y agoLooks interesting, but from the homepage I had absolutely no idea this had anything to do with apps. What would be a good place to start?
- hardwaresofton 7y agoSorry maybe the homepage is better to start on (I linked to the docs page): https://www.nativescript.org/ https://www.nativescript.org/ Here's a talk from 2 years ago: https://www.youtube.com/watch?v=ELemwZXJZVg https://www.youtube.com/watch?v=ELemwZXJZVg I personally prefer Nativescript-Vue and I find their docs to be very good: https://nativescript-vue.org/en/docs/introduction https://nativescript-vue.org/en/docs/introduction Some more video resources: https://www.youtube.com/watch?v=DcCSq2Y9bow https://www.youtube.com/watch?v=DcCSq2Y9bow https://www.youtube.com/watch?v=qR1ESQTALI0 https://www.youtube.com/watch?v=qR1ESQTALI0 I personally think the best way to learn it is to get your hands dirty and use it to build something, so I'd recommend that, but there are certainly resources out there as well.
- codetrotter 7y ago> NativeScript Installed the Playground app. When I try to open any of the examples from https://market.nativescript.org/?tab=samples&framework=all_frameworks&category=all_samples https://market.nativescript.org/?tab=samples&framework=all_f..., Safari says “Safari cannot open the page because the address is invalid”. For example, https://play.nativescript.org/?template=play-js&id=h9CNcL&v=3542 https://play.nativescript.org/?template=play-js&id=h9CNcL&v=... tries to open nsplay://boot?pKey=pub-c-a303d41e-5c6b-4030-8151-c056278a7944&sKey=sub-c-2d2f1312-4f78-11e7-ab90-02ee2ddab7fe&template=play-js&sessionId=h9CNcL_3542 Running iOS 12.3.1 on an iPhone X. Is anyone else having this issue?
- gitgud 7y agoThis seems like a fairly biased post (as he admits himself). Flutter has a lot of problems, but if you've used any other cross-platform system, you know it's a hard problem to solve. A friend described it to me as "Unity for apps", which I think is pretty positive and accurate.
- bernaferrari 7y agoAuthor here. Yeah, it was supposed to be "here are my frustrations", not like "Flutter is bad, let's burn it".. but of course, the thing grew up beyond control. 38k view so far.
- winter_blue 7y agoA solid alternative is Intel's Multi-OS Engine: https://multi-os-engine.org/ https://multi-os-engine.org/ All it does is let you write iOS UI code in Java or Kotlin, and target both iOS and Android from a single project. It uses the actual underlying iOS API, and simply provides Java wrappers for them, that map one-to-one. I keep wondering, and don't know why it hasn't gained much traction. It is so much better than Flutter, is obviously reliable since it's a simple 1-1 mapping/translation layer. (There is more work involved with it, as you have to write the UI lawyer twice, but that's about it.)
- wastedhours 7y agoI tried Flutter a few times to have a play - really like it. Obviously a lot of the packages available hook you into the Google ecosystem (Firebase is ridiculously easy to get working). There are quite a few things missing, and I personally found it quite hard to get going (but that might just be a general lack of skill at getting tooling set up), but there's an awful lot to like if you want to dive into getting something set up on-device quickly.
- pjmlp 7y agoI still don't see any big advantages over Xamarin Native, Qt or plain C++ with native views, when going through this route. All of the with the bonus that C#, JavaScript and C++ actually have lots of market demand, Dart remains a possible CoffeScript.
- IshKebab 7y agoThe biggest advantage is easy GUI creation, especially with animations and custom styling. Stuff that you can do with Flutter is basically impossible with native Android. You also don't have to deal with the insanity of Activities and Fragments. Qt is pretty good, and QML has decent animation support but I think their mobile implementation is still very alpha, and since being acquired (again) they've kind of refocused on embedded devices like cars where they actually make money. Also it's not free. And QML is a bit less elegant than Flutter. It practically forces you to write spaghetti code. I don't know how you'd use "C++ with native views" on Android, and I've only heard bad things about Xamarin Native.
- pjmlp 7y agoThe same way that Dropbox, Microsoft and plenty of other companies do. You use a JNI generator and follow the so called hamburger architecture. Microsoft and Dropbox have several sessions done at CppCon.
- IshKebab 7y agoYou're going to have to provide a link because "hamburger architecture" returns no relevant search results and I still don't know how you mean to make an Android GUI in C++. Unless you mean you write your core logic in C++ and your GUI with Java and link them via JNI? That still means you have to write the GUI again for every platform, and you still have to use the Android API which is a very awkward system to make GUIs with (animation is extremely difficult, Activity and Fragment lifecycles are very complicated, etc).
- pjmlp 7y ago
- tobiaswk 7y agoI simply love Flutter for Android and iOS development and have been using it since alpha. I haven't tried the web application part; I'm pretty sure I never will. Here's my opinion. I've created several apps with Flutter and every time I enjoy it. The UI is easy to make beautiful and the resulting code easy to read. It feels like all what the current Android SDK is missing. The current Android SDK is old and quite frankly painfull to work with. You just can't create beautiful apps with ease; it's always a hassle. It's also messy and not easy to read the resulting code. The way the whole way the framework is structured entails ugly code in my opinion. This all becomes evident when you use different apps on Google Play. You get the sense that every app reinvented their UI; there is no real UI continuity. Google became a freeloader after JetBrains created Kotlin and marketed it will. The thing is Kotlin made just a little better; in terms of boilerplate stuff; the framework I still hate compared to Flutter. What I really like about flutter is the framework and “it’s all a widget” idea. You can basically do crazy things in UI with ease and on the other hand just use the standard UI components with a great result. As an example I've created an alternative to Nissan's Connect EV app. It's basically a way to control and monitor your electric vehicle from Nissan. The official app is I’m very disappointed by; it’s slow and full of wrong decisions. My alternative is called "My Leaf" and its available on Google Play and the App Store; https://play.google.com/store/apps/details?id=dk.kjeldsen.carwingsflutter https://play.google.com/store/apps/details?id=dk.kjeldsen.ca... https://apps.apple.com/us/app/my-leaf-for-nissan-ev/id1436701776 https://apps.apple.com/us/app/my-leaf-for-nissan-ev/id143670... It's completely open source.
- 555513 7y agoThose 1-star reviews on the Play Store are infuriating !
- tobiaswk 7y agoI agree. It tears on the developer for sure.
- dkobia 7y ago@tobiaswk - good job with your apps! I completely agree with Android and UI design which is painful. Flutter is far from perfect but a non designer can create something pretty decent. Users appreciate the experience.
- meerita 7y agoMy experience working with Flutter: - Overclomplicated syntax. - Material Design doesn't look as good as the native. Feels like imitation in many cases. - no vector drawable, PDF or Lottie support - I had to create special code for iOS to match certain patterns and components. - Typopraphy done wrong. Flutter maybe something good to start with, but once you want to reach good app design/code maintain that would be painfull and you will feel faster and more organized if you do things in their native realms.
- verttii 7y agoAre you a native iOS dev? I feel Flutter is a major upgrade over React Native, but perhaps native devs just feel it still falls short on a lot of accounts.
- karma_fountain 7y agoI've written one app in flutter and the experience was good. It was very easy to get started, and the dev experience was on par with web development with very fast hot reload. However I would say where it excels at is in creating a fully custom-branded experience rather than sticking to the native elements. I reckon https://reflectly.app/ https://reflectly.app/ is the poster child for this.
- royal_ts 7y agoI don't get the part about Scrolling. It doesn't feel not native it feels incredible fluid, smooth as butter.
- codedokode 7y agoI am not sure if users care about controls being "native". Examples from desktop: Photoshop used non-native controls, and nobody cared. MS Office always had non-native looking menus. DAW (digital audio workstation) apps all look non-native.
- saagarjha 7y ago> Photoshop used non-native controls, and nobody cared. There's a number of Photoshop alternatives that use native controls that are reasonably popular (they're also generally cheaper, too).
- bfrog 7y agoThis just reminded me of how horrible doing things with react native was. A reminder I didn't really need.
- mekkkkkk 7y agoTip: For anyone trying out Flutter, please remember to evaluate it based on release builds of your app. Scrolling and animations can feel a bit "off" when running the default debug builds. The 60 FPS butter is only really applied when that `--release` flag gets tacked on. Not using Android Studio, so not sure how easy it is to miss the massive performance difference of optimized vs. debug builds in that workflow.
- jinglebells 7y agoIf running in Debug mode means it's running < 60fps I wouldn't touch it with a bargepole. Native stuff doesn't do that and React Native/Nativescript don't do that either!
- johnday 7y agoThe debug mode induces a seriously huge overhead. In return you get stateful hot reloading and high quality error management and tracing, both of which are incredibly valuable while developing.
- navd 7y agoFlutter is not that bad. It is a step in the right direction but there are some paradigms that makes simple things hard. Animations are harder than necessary and building non default layouts requires a bit of thinking to get right. My biggest issue is that there is still this "uncanny valley" feeling when using a flutter app. It feels much better than a react native or Cordova app, but something still feels off. Right now it seems great for prototyping. For iOS however, I've been playing around a bit with SwiftUI which currently (even in its beta state) provides an astronomically better dev experience and user experience.
- gamma3 7y ago> Why should someone ever need to offer a bug-fix bounty!? Author expects bugs in open source projects to get fixed for free, by someone else. We need to support open source maintainers instead of shaming them. I'm excited about Open Collective and made a monthly donation to a project I use.
- piokoch 7y agoThe question is: if Flutter will not get traction that Google expects, what will happen with the project? The space of multi-platform mobile apps toolkit is already occupied by several well established players (React Native, Qt, Xamarin and a dozen of other more or less popular tools, sometimes well entrenched in their niches, like Unity for games). Flutter comes with rather obscure language and is late in the game, so it will have to provide something truly game-changing to succeed and I am not sure if that what it offers now is sufficiently appealing.
- verttii 7y agoWhile it may not appeal to native devs I've found Flutter a lot more appealing compared to React Native. React Native just keeps breaking things, like for example at something like 0.56 the textinput just broke on Android beyond usable and was stuck at that for like half a year. I don't particularly like Dart as a language but as an SDK Flutter just feels a lot more solid than RN.
- Bootwizard 7y agoIt will get cancelled just like every other Google project that's not the best in its field. Google can't seem to handle being second best in any project they start, so they use cancelling projects as a way to hide the evidence of their failures.
- krzat 7y agoThe strength of Flutter is it's architecture. Nothing comes close. Web is too slow. Xamarin/React Native is too restricted by native layer. Qt is C++. Popularity of Flutter increases steadily: https://trends.google.pl/trends/explore?cat=31&date=today%205-y&q=flutter,react%20native,xamarin https://trends.google.pl/trends/explore?cat=31&date=today%20...
- seeekr 7y agoDoes someone know what the state of the RN rearchitecture effort is? And is there likely going to be a smooth upgrade path forward without much breakage across the ecosystem?
- dejaime 7y agoEven though my experience is basically the same as the author's (8y using java/kotlin toolchain), the article still seems to be written by someone with a hammer frustrated with screws for not working properly. His points can be summed up as "Flutter isn't as stable as the java toolchain that has existed for over a decade" and "I want Flutter to work the way I am used to work".