* Hot reload, on device, works and works well.
* Really nice error messages (in latest release).
* It is fast.
* Dart is pretty nice once you get used to it.
* Provider api for state management works great (basically, react context).
I also do a lot of react web dev, but given that Flutter targets web (and desktop now... goodbye electron), I might try that in the future once it matures a bit.Some one is developing this kind of cool example of the web target: https://github.com/rxlabz/panache
However I don't see why people try to push it on the web, it just renders everything in a canvas, it's a poor fit for web development.
But the Web implementation is terrible (reminds me of flash) and the desktop implementation has major lag on the single button demo, I guess it's still early, but it's probably not going to replace Electron yet...
This ultimately depends on your situation. I would have said Flutter since it is past 1.0 and RN is still in beta. But my main problem here is that you will quickly run into difficulty in attempting to use C/C++ libraries in Dart.
Dart has beta support for native FFI but it is not stable unlike RN. Right now, they instead have 'Platform Channels' which has a significant overhead when passing messages back and forth compared to a native FFI. The issue is still open on Github: https://github.com/flutter/flutter/issues/7053
I can reuse and port my JavaScript/TypeScript projects into mobile very quickly thanks to React Native. Flutter on the other hand, requires learning Dart which depending on your use-case makes sense if it is a new project, not so if you have invested in JavaScript.
Perhaps once Dart gains a production-level C/C++ FFI, then I can seriously look at both Dart and Flutter again.
The last message in that thread mentions dart:ffi is in preview.
Similarly, good luck finding help with Dart issues versus the JavaScript ecosystem.
That's not to say using a less popular language is a bad idea (it isn't), just that hiring should be a part of the technology decision making process.
I did in my last job change - and 80% of the office here didn't know the stack/language when they first came in.
> Secondly, if someone has to learn the language when they join that puts a lag on how quickly they can be useful.
You could learn enough dart to be useful in a day if you are a C#/Java dev with JS experience - enough to go through the codebase - and thats something that takes time no matter what the language - dart isn't that exotic.
Flutter has a higher learning curve but that should also be on the order of week or two depending on how much you know about frontend. React native is the same deal.
> And lastly, companies are (usually) very reluctant to let someone spend the first few months getting up to speed if a technology choice means they can recruit people who'll immediately be effective.
Meh - when they chose stuff like Dart they know hiring pool is limited and usually word the job posting like that - ie. they expect you to be able to pick it up on the go.
I mean your whole argument is nonsense because things like this happen all the time - my current gig I started as a .NET dev with some python/django experience - I'm working on ruby on Rails stack - never touched that before in my life. Took me like 1 day of reading up to be able to go through the codebase - a few weeks and code reviews and I'm pretty much in tune with how they write RoR.
That could be because experience with that language is often listed as a requirement.
>someone spend the first few months getting up to speed
In my opinion, "few months" is a huge overestimation, if we're talking about an otherwise experienced mobile developer who understands the underlying platforms (Android, iOS) well. A few weeks should be enough to get up to like 90% of their usual productivity (ballpark guess).
Granted you don't get the same depth of knowledge you might find with an experienced JS dev...
Advantages:
- truly one code base
- iOS, Android, and web apps
- JavaScript skills are useful
- experience is "good enough" for the average user
Downsides:
- almost no fine-grained control of input controls (like which keyboard to show)
- doesn’t respect users’ accessibility options of the OS
- small differences between the native widgets and the CSS/HTML lookalikes
- not anymore: performance. It’s really good enough on devices of the last 4-5 years
I use Ionic, or more specifically: Stencil with ionic web components.
What framework are you using? Angular or another framework? I'm interested to explore this approach using Svelte.
It’s also a compiler for web components like Svelte and a lot like React. You can add the ionic code web components to get animations etc. Try it out, especially if you like TypeScript.
Can you link to one app ported on the 3 platforms (Android,iOS,Web) so we can test performance from a UX point of view ?
That said - if you're not familiar with the JS ecosystem (node_modules, etc), then it can seem a bit overwhelming at first, especially when you encounter configuration or build errors. I don't have any great answers for that except that "it gets easier" with more time and practice.
Also, if you haven't looked at React Native for a couple of years and had a bad experience before - try it again! It's come a really long way in just a few years.
For example: I used to have to worry about cross platform code/libraries working on iOS and not Android - but almost never run into that anymore.
https://news.ycombinator.com/item?id=20695806 "The not so hidden cost of sharing code between iOS and Android" (dropbox.com)
From the "lack of open source" C++ libraries or how hard it is to find C++ devs (assuming one actually wants to properly pay them).
https://medium.com/@andrewt3000/flutter-versus-react-native-...
I love react for web development, but... idk. If you're interested in material design and don't mind that your app will look like a google app, I would seriously consider flutter.
In my experience, you'll be a better x-platform developer if you know at least the basics of the native platforms you're targeting.
This is not to say that native is the best choice for all apps. You may find that flutter or React Native suit a particular project best. You may ultimately prefer to specialise in one of those. But that's a separate issue from what you should do starting out.
https://developer.microsoft.com/en-us/windows/pwa
Chrome has added support for PlayStore PWAs (TWA)
https://developers.google.com/web/updates/2019/02/using-twa
And even Apple has improved the support since iOS 12.2.
But are PWAs being used that much for real? Beyond just installable web sites (ie. full offline support with service workers, etc?). I seem to remember Twitter did a nice job with Twitter Lite, but I've never seen anyone use it. Again from memory I think Skype did a quite impressive PWA. I'm a big fan of Checkvist, & they have a PWA which is moving slowly but in a good direction.
Anyway, that aside, for a dev wanting to get into the mobile space (which I think was the OP's intent), PWAs would hardly be the best first option for a tech to learn. Surely whatever your personal tastes, you wouldn't disagree?
Do you also consider Google and Apple's move desperate then?
While Microsoft has definitively bombed on phones, they are doing pretty alright on convertible laptops/hybrid tablets.
As for best option, I also mentioned a couple of other ones, which I advocate as alternative to PWAs.
I see Flutter has a future as bright as CoffeeScript, if it keeps being tied to Dart.
As for React Native, it depends on how much one feels like having to deal with JavaScript and the interoperability issue that often happen across Android devices.
You're still studiously avoid mentioning any actual PWAs. I'm someone who wishes PWAs would take over, as I dislike all the OSs and don't want my usage habits or data to be tied to them. But as of now it's not happening, is it?
If a person was trying to advise a developer new to mobile apps, with their interests rather than the advisor's tastes in mind, I cannot believe they'd advise PWAs as a primary focus.
Learning a platform isn't a forever-decision. A new mobile app developer can always learn new tech as needed. But if they want a start now, they're better off learning what's dominating today.
The PWA part is just yet another tool on mobile Web.
Also in case you missed, I suggested Qt, Xamarin and C++ with Native views.
As for job market, on my area you would be having an hard time finding 100% pure native development offers, everyone only cares for some kind of solution that can be deployed across Android and iOS.
There I agree with you. I'm a fan. But it has zip to do with this thread.
EDIT: besides the examples posted by lucasverra, you have KaiOS with its relatively big Asian market share, Google Go-Apps variants of their apps are mostly PWAs.
- What are you building?
- Do you have short deadline?
- Are you building it for yourself or someone else?
- How big is your team?
- How many devs do you have to hire?
- Do you have time and budget for longer on-boarding if your new hires have to learn a technology?
- Are you refactoring or replacing an existing software?
- Is it just a MVP product?
Without context it is just a technology comparison which is somewhat polluted by someone’s experience or may be biased in some communities.
* no (or less) native platform quirks/differences
* better programming model than Android SDK
* good performance
Reasons to use React Native: * uses native widgets (if that matters to you)
My recommendation, write your portable app using Flutter/Dart. If that's not satisfactory, call that your Android version and write an iOS in Swift.Do not fool yourself into thinking either Flutter or React Native will give you native app performance. It can be as fast but the pauses are in different places and users can definitely feel the difference even if they can't articulate it.
User Interface - Flutter works flawlessly with proprietory widgets
Development Time - React takes less time
Performance - Flutter makes it easy for developers to use the existing code
Stability - React is more stable
Programming Language - React uses Javascript and Flutter uses Dart
At the end of the article, you will be able to pull yourself from this dilemma.
Works in games, with Unity and the like. Not coincidentally, some Flutter users and even devs have been describing Flutter as "Unity for apps."
plus, i feel safer coding my business logic in typescript than dart. It’ll be more useful in case i want to code a web site (flutter web renders to a 2d canvas , which feels wrong for some reason), eventhough dart theorically compiles to js, i feel typescript is more used for that.
Fluter or Native? Which the answer is Fluter never ever can be natives, like JAVA and SWIFT, but is good for must of the startups to start quick
PWA or Fluter? We don't know
Kotlin Multiplatform with Jetpack Compose and SwiftUI.
Jetpack Compsoe might even become platform independent in the future.
The other thing I aim to solve is the issue of the browser and corresponding web standards being a monolith so large that only Google and Apple can afford to implement them. By wrestling back control over layout, I hope to show that a next-generation browser could be much more like what James Mickens laid out with the research he presented in this talk: https://www.youtube.com/watch?v=1uflg7LDmzI
I decided to prototype it in JavaScript, and right now it just renders into a canvas element. I love working on it, because all the unit tests run really fast. It can do that because there's no browser in the way - node-canvas is much lighter weight. Once the design is settled down, I'd like to rewrite it in Rust. The other advantage of this is that it is incremental. It'll run in any existing web browser, and building a cut-down browser that isn't web-compatible is doable in a few weekends.
The best way to see its capabilities so far is to look at the test screenshots: https://github.com/maxharris9/layout/tree/master/test/screen... - see especially text-actual.png, text-concave-cutout-actual.png, text-diamond-actual.png. I fell down a rabbit-hole with that a bit and made it wrap text around arbitrary polygons, hyphenating on syllable breaks and everything.
I just lost my job a couple of weeks ago, and I've been taking time off to work more on this thing. Tomorrow I hope to get mouse click events tracked through the component tree. And at some point in a week or two, when that's done, I really should write the application that I had in mind for it!
I know a lot of people have concerns about accessibility with the approach I've taken, and all I can say to that is, please help me work on that instead of criticizing me. I know there is talk about an accessibility DOM coming in browsers, but I fear that I'll just have to fall back to rendering plain HTML in order to drive screen readers, which is a terribly inefficient and indirect way of doing things. Also I don't even know where to begin with screen readers, what's the most popular software for that, etc.
Qt, Xamarin, PWA, C++ with native views would be my picks.