Flutter allegedly consumes about twice as much memory as a native app. So I guess it matters who the target audience is and what kind of device specification can be expected.
Disclaimer: I have never written a Flutter app and I'm not sure if the information I have found is still up-to-date.
Edit: What I have also found is that there are plans (or ongoing work) to port Flutter to Apple's Metal framework, which should cut memory usage by a lot on iOS.
Edit 2: Here's one of the benchmarks: https://thoughtbot.com/blog/examining-performance-difference...
Would be interesting to benchmark Flutter's memory use vs. the app that was never built because of the lack of time, steep learning curve, boredom, etc, to deliver both iOS and Android natively.
Coming from a web background, React Native made the most sense for me. Since I started using it a year ago, I absolutely love it. Great community with constant updates from Facebook, tons of articles/blogs/courses on how to learn it and there hasn't been a single feature Ive wanted to build but couldn't due to some lib restriction
You don't need to ever 'build' Dart unless you're going to be working on the language itself... and if you are, you might as well be a google employee and get paid for it.
Setup for Flutter development is just a few easy steps.
> 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.
Unless you're writing an IDE, you're not going to lose users (you care about) over not supporting Emacs bindings.
People will put up with a lot of garbage if your product fills a need. And non-native UI is not even inherently garbage, just sub-optimal (and even that depends on the product)
Yeah, these aren’t great deals, but people who care enough try to switch to alternatives. And by using native UIs, you can mitigate your concerns about whether you implemented everything the user expects or not.
They had the opportunity to be promoted as app of the day by Apple, which would have been awesome for them.
Unfortunately the condition was to ship an apple watch integration. The sdk they were using did not support it.
The Facebook app is criticized everywhere, I can’t think of anyone who likes their app.
AFAIK AirBnB once used RN but moved to native development, and Twitter use native widgets.
Also, don’t forget that they have the resources to develop all of the expected features of native widgets, for example Accessibility. The OP probably doesn’t.
And, this is all talking about RN which is actually half native since they use native widgets; Flutter is much worse than this because they draw their own widgets.
You're talking out of both sides. The OP is obviously limited on resources. That's the exact reason flutter is a good option, he gets an app that works on iOS and Android in one codebase using a modern language. Going native requires 2 distinct code bases, which itself requires learning all the specific quirks and features of each platform. Android adapters and fragments, XML layout, distinct libraries for simple Http calls, object serializers, etc, etc. The only downside you can point to is "its not native" and guess what, see above, users don't really care.
That seems to live up with what was said further up the thread:
> People will put up with a lot of garbage if your product fills a need. And non-native UI is not even inherently garbage, just sub-optimal (and even that depends on the product)
If you’re making a product that other people use, I would caution you against putting their needs on the back burner. It’s very often the case that what’s easier for the developer ends up making a worse product for the people that have to use it.
> Unless you're writing an IDE, you're not going to lose users (you care about) over not supporting Emacs bindings.
No, the whole point of this feature is that it works outside of an IDE. I don’t even use Emacs and these shortcuts are so ingrained in me that I ended up setting up custom shortcuts to emulate this in the places that wouldn’t support it (where possible, of course…).
Unless you mean some of their needs.
In which case yes, that's my point. If you want a successful product, prioritizing features is very important, and in most contexts, filling your "core need" is going to add a lot more value than a native UI does.
>I don’t even use Emacs and these shortcuts are so ingrained in me that I ended up setting up custom shortcuts to emulate this in the places that wouldn’t support it (where possible, of course…).
Unless your tool is for a space where a lot of users are going to say stuff like this is a major detractor for your new product (...like an IDE or other developer tool) you're much better off just making your product and validating it.
-
When you're making a new product, and bootstrapping it like OP describes, your currency is time.
Time isn't just money, it's a changing market, it's your own motivation coming and going, your overall situation can change and make working on it untenable.
The less time you spend fighting a lack of knowledge the better.
A working MVP in Xamarin.Forms in a few weeks > months spent killing the moment for your idea and learning enough iOS and Android to have the base knowledge for a middle of the road native app, is true much more often than people like to admit.
Maybe you can live with them, maybe not, it depends a lot on the usecase.
That jives well with our product, but we do also need a mobile app to interface with the product. Flutter has been great in this regard. Dart and the declarative UX framework are very grokkable for backend folks.
The UI/UX is definitely good enough. Our app feels native, is snappy enough to get the job done, and looks way better than the native Android app we were trying to build before. Even if we were to have to go fully native down the road, Flutter is just the right tool for the job of getting us off the ground.
For a small team, there's just no way we could build both an iOS and Android app separately, on top of hardware, firmware, and a backend. It would kill us before we ever even launched.
n.b. to you.
I've also built a small flutter app where everything runs snappy and it more than solved the needs with a minimal development time and number of lines of code.
Start learning. It has literally never been easier to build a mobile app.
Flutter is IMO the best option right now if you want to build a cross platform app. I've developed native iOS applications, native android applications, and even react-native applications that run on both ios/android. By far, hands down, Flutter is THE BEST of all the options if you need to target both platforms.
Would you mind elaborating on why you feel this? Particularly why you personally felt it to be better than React Native?
https://cdn.nubank.com.br/mobile/taskforce/nubank-mobile-arc...
2) Tooling. Everything about the installation, update, package import, debugging, UI inspecting, performance monitoring... EVERYTHING about the development lifecycle is better with Flutter and that's because of its TOOLING. Straight out of the box you get debugging and performance monitoring. It couldn't be simpler. You run your app in debug mode and it ASKS you if you want to display a performance monitoring tool. Awesome.
3) "Out of the box" widgets / components. Hands down, Flutter ships with more widgets (components) out of the box. Often when looking for a component in flutter, it was supported "out of the box", whereas React Native required I npm install some 3rd party package, from some developer I'd never heard of, who probably isn't maintaining the project anymore.
4) Performance. I'm a strong advocate for writing your app in native code. I believe you will never get the same performance in a hybrid app, especially if you have complex animations, or huge lists.
With that said... Flutter has completely blown me away. For the first time, I actually can't tell if an app is hybrid if it's a flutter app. The responsiveness is on par with native. The UI / Animations are on par with native. The same simply cannot be said for React Native.
You could maybe hire a contractor or something to help make the UI better if needed. Personally, I wouldn't bother unless your app is published and bringing in money, and you can make a business case that spending $X on making it better will bring $Y more revenue. That would give you an idea of what's a good amount to spend. I wouldn't worry about any of that yet though.
Surely you mean disk space, not RAM?
I'm sure you meant disk space instead of RAM perhaps? I think it would be overkill to obtain a Mac with 256 GB or 1 TB of RAM just to create iOS Apps. ;)
Even though OP said they are a Java developer, I would strongly urge going with Kotlin for Android at this point. Kotlin replaced Java as the default language for native Android development in 2017, and new code samples are being written in Kotlin. At the very least, start with Java, and ease your way into Kotlin, since it's 100% interoperable with Java. Aside from being the default Android langauge, Kotlin has many other benefits.
Benefit is that you can develop on Windows, Mac, or Linux, won't have to buy an iDevice or two, or a new machine.
Only once you’d like to publish your app on the App Store.
I did not realize this. Sad :(
Though I know quite a few backend developers who have built apps and struggled with the following issues.
1. UI/UX - UX and UI are critical for an app and you might have to hire a designer to create those interactions for you. Backend roles usually involve no/little UI/UX work and it's easy to only focus on the functional bit of it.
2. Updates - It's easy to rollback a backend codebase from production or revert it to it's last state when something goes wrong. When deploying an app you have no such option. Android updates take about a week to reach 80% adoption. And if you encounter a critical bug in that time period, you have to halt the rollback. You end up with some users on a new buggy version and some users on an older version. This can be tricky to manage.
If you want to learn and start with iOS, I'd advise doing the 100 Days of SwiftUI: https://www.hackingwithswift.com/100/swiftui
The great thing about this course is that you can do it alongside your work, because it's divided in chunks of 1 hour. My experience is that you can do it in the evening, even after a full day of work.
The framework is well designed and makes setting up the UI for native apps pretty easy with a lot less coding than I'm used to for other frameworks. I'd recommend looking into it if you don't care about cross platform (and I wouldn't personally care about that right away if you're getting your feet wet with mobile).
Swift is also a fun language to program in once you get the hang of it (and yet it's not too different from other languages, so it shouldn't be too hard to pick up coming from Java).
Although with previous Java experience Android might be easier for you to get into.
On mobile we work with pretty high-level abstractions, so if you did this yourself, most of the new stuff to you would be the frameworks like UIKit or Core Data (at least on iOS).
Edit: Ray Wenderlich and objc.io are my go-to learning resources for iOS stuff
He has books, but they cost a fair bit (around $100/book iirc), and they're not included in the subscription I think, unless I'm missing something.
A lot of Android is not front end. SQLite databases, models, maybe use cases, JUnit unit tests etc. You know how to do a DAO to MySQL, Oracle or Sqlite? You know how to do a JUnit unit test of a data structure? That part will be easier then.
Keep UI simple - one Activity, Navigation and Fragments. Use a ConstraintLayout and simple views like TextViews. Use a popular, simple image library.
Much of Android work is not UI work. Keep the UI simple initially.
I'd suggest OP download Android Studio. It's based on IltelliJ, so there's a good chance OP will feel right at home.
The way to design widgets is pretty horrible but you get used to it.
If the goal is to build a project as a hobby and (maybe) make money from it, best to learn any of the cross platform tools for mobile apps, here are some popular ones: https://hackernoon.com/9-popular-cross-platform-tools-for-ap...
Best of luck!
Depending on the functionality needed for your app idea (and your skills), this might be a good path.
This was in the early 2010s.
My Background: Coming from Java backend experience, I built multiple android apps(native Android), tried react native and then learned Flutter. I also outsourced two apps and successfully got it done in react native.
My Advice:
1. Do it yourself if you want to really learn mobile development. I recommend to explore Flutter(cross-platform and similar to Java), try to build a sample app in a day or two. Whether you succeed or not, ask yourself, how do you feel now, would you want to learn and code yourself? Remember, it is going to take a lot more time than you estimate now(when I learnt Android first, I estimated a week to learn and years after, I'm still learning, I shipped my first decent app after 4 months, while working on backend parallely)
2. If the answer is No to all above questions
Outsource the work. How?
A. Do you know any friend who'd want to do this?
B. Hire a developer on hourly basis to work with you closely and ofcourse remotely. Where? Invide or Toptal. Few tips for successful outsourcing
- Do not go for upwork or freelancer or project basis work
- Teamwork is key, hire someone who's a team player
- Have weekly call to discuss progress with the dev. Discuss things other than the project as well, build relationship. Transaction based approach does not work.
- Think how can you make it easy for the other person to understand. Can you get every minute screen detail designed via a designer and hand it over to the dev?
You already know java, learning Android should be pretty easy, whether you leverage kotlin or not.
That would be the obvious option number 1 to develop your app.
Whether you want to :
- do it in java or kotlin for Android
- start with ios instead learning swift
- use a crossplatform sdk. Caution, there is a reason why these sdks are still only marginally used. It is not because mobile devs are grumpy but because they come with some advantages and drawbacks and very often these drawbacks are too important.
- find somebody to code it for you.
will depend on what kind of app you are doing, and what you want to do with it.
e.g. some kind of social app should probably be on all platforms because you want to maximize network effects.
Photography apps are a bit easier to develop on iOS. As with everything dealing with low level, having a smaller surface of change helps.
It depends also on your market.
On the plus side, though, tooling for Xamarin is a lot nicer. VS is definitely a first-class citizen, and being able to launch on a remote iOS device/simulator from inside VS is a definite advantage.
If you know Java, I would instead recommend going through Googles new Kotlin courses for a week or so and see where that leads you:
https://www.udacity.com/course/kotlin-bootcamp-for-programme...
https://codelabs.developers.google.com/advanced-android-kotl...
https://codelabs.developers.google.com/codelabs/kotlin-andro...
Worst case, you have learned som kotlin which may eventually help you in your day job since kotlin is getting big in backend too.
My general advice is to pick a project that seems achievable fairly quickly and do your learning while trying to make that real. It’s much more motivating than learning for learning’s sake and only then actually making something.
• Native iOS / Android for years • Backend development • Frontend web development • Machine learning models
I would suggest you one thing:
Do your research on finding really good succinct tutorials. The best approach is asking the right question on google.
You usually find tons of blogs / tutorials with very basic or simple examples. Your task — if you want to learn it — is to _research_ and find the best tutorial that covers the most ground in the shortest amount of time. This is not easy to do, but that’s a good skill quick learners have.
e.g. lifecycles, we now have good tools to wrap them and don't really have to care about them.
The official doc is a good starting point.
I needed to build front-ends and went the JS way. Vue.js and a framework (bootstrap vue for instance) and you are good to go.
With PWA you can make such an app very similar to a native one.
In terms of effort, for an amateur Python dev like myself, it took maybe a weekend to understand how this works, and then more time to get the details.
https://github.com/melling/ios_topics
I’d pick one platform and build a great app for it. If you go Android, Kotlin looks like the way to go.
Personally, I'd go with Flutter, but it's still a lot to learn...
React native or flutter seems more long term ( although i must say i find them also problematic in some regards ).
Knowing the OP works with java, i would also recommend another option going with kotlin and do android only, as it i by far the largest market, and you will have a far lesser risk to get banned from the store for dubious reasons.
Edit : reading other comments i realize the cordova / ionic option also makes perfect sense on today’s hardware. Just make sure you understand the limitations and try a few apps made with that tech from the store first.
From what I read here and there, that's a half-baked myth in a number of ways. Android users often lag behind the latest Android version, lacking access to the latest features. In terms of revenue as well, Android apps don't seem to be ahead of their iOS counterparts. Someone with experience in publishing for both ecosystems may be able to correct/corroborate this.
SwiftUI targets iOS, macOS, tvOS and watchOS, all counting for over a billion users combined. That's a substantial market, even when considering that it's limited to the latest version of each OS. And it's obvious that Apple's focus will be on SwiftUI going forward.
But by that metric android is 2.5 billions.
now depending on your business, you may indeed want to target ios users as well, but gone are the days of « ios first, then maybe android later » (except maybe for tablets, where the ipad reigns alone).
As for swiftui, apple does indeed seems to be pushing forward with the tech, but at this point i don’t think it matters much anymore. Videogames are developped with cross platform tools ( because 3d) , form-based apps are developed with cross platforms tools (because ui performance is now good enough). All we’re left with are non-gaming interactive apps where you still need maximum responsiveness. And even in this case you’re often better just developping only that screen natively and leave the rest cross platform.
You'll bump into a couple of things which require workarounds. For instance, you can only stylize the navigationbar if it's in normal mode, not if it's in the nice large title mode, and you'll have to use the UIAppearance API for that.
I'm also seeing lots of people calling things "bugs" but they actually just misunderstood the new layout system. I haven't seen showstopper bugs. Frustration is, however, unavoidable because it's a learning process.
I love Java (literally the best). Django is easy. Go is alright. jQuery & Bootstrap are great. Moving into heavy UI i.e, React/Redux, the entire JS ecosystem, mobile fragmentation, absurd, pointless policy changes in the UI world are absolutely 10x more annoying, difficult, arbitrary, meaningless, buggy, and horrible than anything back-end. TensorFlow, Unstructured-Data, NoSQL, CI/CD? No problem. You have an API, documentation that works, Linux systems that are consistent, predictable, repeatable. UI/UX? Changes every day. Docs from 2 years ago often don't work. Lower barrier to entry, lower quality ecosystem. Security & supply-chain nightmare. Fragmentation for no reason other than large corporations focusing on bottom lines and leaking core-rot. It's a insult to time investment.
I can build a full-stack, horizontally scalable, complex, awesome system with whatever tools you want I can guarantee you that no matter what you throw at me, I'll spend prob 75% screwing around with JS bugs, mobile garbage, awful ecosystems, and pointless garbage that at the end of the day comes down to nitpicking about pixel performance and arbitrary platforms.
I know I'm not the only who's wasted countless hours of my own time, clients money, companies time, and real-end-user money and value on things that were shiny and interesting to a PM or UX team and ended up sinking over half the cost of project on effectively nothing. The people that make the decisions don't understand it, because UI/UX is literally all they can "see". It's insanity. If I ever start a company, I'd love to model it off a concept like Stripe; such a beautiful concept of a beautiful idea run by some of the smartest guys out there, all based entirely off an API. No play-store policies, shifting trends, corporate politics, useless garbage, pure JS developers maintaining random repo's for tools that don't need to be built.
If you're smart, be like Amazon, Google, Facebook and every other huge idea: Make an unresponsive, useful front-end and just say no to fancy UI. Amazons website is an glorious defiance to the quite frankly disgusting culture of what robs real engineers time and resources away from something like curing disease, balancing equality, providing security, and focusing on things that could actually make the world a better place. Look at this site right here. Look what happened to Reddit.
If it's more than Bootstrap and you're not funded, just say no to UI/UX. JUST SAY NO.
EDIT: There's probably some good takeaways from the book "Zen and the Art of Motorcycle Maintenance". Do yourself and the world a favor by not feeding this economy of engineered over-complexity and willful-ignorance, especially in this day in age. Our species might be about to go extinct. There's more important things to do. Seriously.
or
the ionic.io framework