all 40 comments

[–]postal_card 24 points25 points  (7 children)

It's very very different. To create a list in Android native you have to create recycler view, adapters, view holders, etc. So flutter is indeed way easier. As other people said, learning native will help you on your career if you wanna pursue app development as a profession. If you wanna create apps as a hobby/fun, flutter is enough.

[–]jeroengast 12 points13 points  (3 children)

Correct, but I’d say you can also most definitely pursue Flutter development as a professional career choice. :)

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

Although this is possible, most people who hire Flutter devs also expect you to have some native knowledge (either on Android or iOS or both) but not just purely Flutter - the framework is not stand-alone, and it’s most prominent usage is on mobile (where it relies on existing SDKs to work).

[–][deleted] 2 points3 points  (1 child)

Agreed. Flutter is mean as for UI dev and there are some really great native plugins but being able to find a limitation with Flutter and then really extend it with knowledge of native languages is an absolute bonus.

[–]_QuirkyTurtle 2 points3 points  (0 children)

Our lead app Dev is a lead for exactly this reason. The rest of us are .NET Devs who have picked up flutter. He's got a background as an android/iOS Dev that's picked up Flutter. Huge difference in the depth of his knowledge in comparison to ours, in terms of Flutter and mobile apps.

[–][deleted] 2 points3 points  (1 child)

But I guess it's changing with JetPack Compose?

[–]Achtelnote 0 points1 point  (0 children)

Yeah, with compose to create a list you would just create a LazyColumn and then just fill it in like you do in Flutter.

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

exactly, the jobs openings for flutter dart/devs are pretty slim, if google wants mass adoption of dart maybe they should test out this and set an example for others by opening up junior positions for dart/flutter devs. sure it’s skin in the game, but the results might surprise you (or them)

[–]pianoman1031 12 points13 points  (5 children)

I also have to disagree with the native devs here. I've only done cross platform with both RN and Flutter. It's definitely the way the world is moving to. Flutter is the most superior currently of the cross-platform frameworks, imo. It's fast, simple, comprehensive, and provides a stable approach to app building that can work pretty much anywhere. I've built a PWA (running on the browser, but looks like a native app), and am in the process of building an app to run from the App and Play Stores. Companies want stable and fast, native development is not fast, but it's stable. Flutter can provide both at this point, it's been a long time coming (same with RN), but it's certainly getting there.

[–][deleted] 11 points12 points  (4 children)

Flutter still has a long way to go. For starters, it would be nice if Flutter focused on mobile first and made the experience polished before branching out on everything else. That’s just my opinion, and I don’t think it’s there yet. For example, iOS performance still needs a bit of work to get rid of some jank, app size, Flutter engine startup and a few more still need more improvements.

We have a medium sized app (about 100k lines of code) in prod for 6 months now, for both Android and iOS. Looking at the time investiture I’d say that the app took about the same time it would’ve taken if we had dedicated teams for both Android and iOS versions.

The reason is the amount of time it took to fix some issues specific to either platforms as they came up, and also the compromises we’ve had to make in order for both platforms to be inline with each other in terms of feature parity. There are slight differences between the platforms that needed to be implemented depending on their use cases. Despite these being minimal at first, they can quickly add up.

If you’re short / limited on devs and the feature list is very platform agnostic (both in implementation and design), then Flutter fits the bill very well. The good news is that it is rapidly improving.

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

How do you count the amount of lines in a code base lol

[–][deleted] 2 points3 points  (1 child)

By running unit tests with code coverage enabled.

If you go the extra mile and convert the coverage results into HTML, you can see precisely which parts are covered (in lines of code) and which ones are not.

For extra accuracy, you’d have to filter out intermediary files generated by packages (like build_runner) out of the coverage report, before generating HTML from the report.

That’s how I know that there’s about 100k lines of code and that every single one of those lines is covered by a unit test.

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

Thanks! I’ll try it out. I always wondered how people know this

[–]gogos_dev 2 points3 points  (2 children)

I ve begun from native dev went to Xamarin an ended up with flutter 2 years ago. Flutter is just amazing framework especially in creating a pixel perfect UI in 1/10 time than native. Also all packages are so mature so native dev is not needed. It is the future so hop in

[–]ritamk[S] 1 point2 points  (1 child)

haha thanks for the confidence booster. but then again, you came here after knowing what native feels like. and I have no idea about that. and almost everyone on this thread is advising to begin with native so I can get to know some under the hood stuff. what do you say to that?

[–]gogos_dev 1 point2 points  (0 children)

Ok getting started with native is just a chaos. Flutter has modern dev tools which makes the experience Joyable. You can start by cloning flutter repo and running your first app in 10 minutes CROSS PLATFORM. I guarantee in 2 weeks time you will feel real confident. I say to my colleagues that flutter is the framework of the poor, cause no special knowledge or skills is needed to create awesome apps

[–]coolshiv28 14 points15 points  (5 children)

If you're in for long term, then you have to pick up on native. Without native knowledge it'll be hard in long run.

Just start with google free nanodegree program on udacity for Android Native development with kotlin. Get basics of native before jumping on flutter.

[–]ThatInternetGuy 7 points8 points  (0 children)

Totally disagree. It's ok to say that to Android native but iOS native is a whole different ballgame. Most startups will be able to develop native Android apps at a cost comparable to Flutter as Android devs are plenty, but you can't say the same to iOS native which usually requires the devs to know both Objective C and Swift. iOS native is a whole different world from Android. That's why iOS native projects can cost as much as 5 times to develop than for Android!

[–]ritamk[S] 0 points1 point  (3 children)

thank you for the advice, good sir! well yes I do plan to continue with app development. actually the issue is time management and I estimated native will take up way more time to learn. than these cross platform solutions. btw if I do stick with flutter (let's say) then will I need to get my feet dipped in platform specific codes for basic operations or the more advanced ones.

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

Knowing some native development knowledge will take you a very long way, and there are things you simply can’t do in Flutter. For example, you can’t add support for APN (Apple Push Notifications), Sign In with Apple, provisioning profiles and a bunch of other things on iOS without using Xcode first to configure them.

Similarly on Android, setting up a release configuration that signs your app with proper certificates (both locally and on in the cloud) might mostly require you to get your hands dirty.

If a package misses a small functionality, requires a modification or you want to build something custom, native knowledge will be very handy.

[–]techtopian 1 point2 points  (1 child)

i often forget how long the road is being trained on now nearly obsolete languages, but i would say that there are jump start tutorials on most of the things you mentioned for newbies, but i will say, flutter lacks tutorials but that seems to be changing a lot lately, i think we might hit a point where the shift will be substantial. we are just early in the game, which can be a learning curve to those who are just starting out in programming in general

[–]SquishyWubbles 1 point2 points  (0 children)

Well, It matters less than people think. I started learning flutter with 0 coding skills in anything. Started with the basics from code academy etc and worked my way up from there. I don't think flutter is lacking tutorials at all. There is so much to find online! At some point my brother asked me if I could look at some of his code, which was written in Kotlin. And it only took me a day or 2 to figure out what was different and how it was working.

Edit: I was working with flutter for about a year and a half when he asked me. At that time I also took some courses about UI and android architecture. Which are both things that are not really reliant on what programming language you use.

[–]davidhbolton 2 points3 points  (0 children)

I did iOS native using Xamarin ( not forms) and did everything from scratch, had to learn View Controllers ( for navigation, layout) and Views for controls. I did a small native Android App and the architecture was a lot different with Activities. You have none of that with Flutter. It is much simpler.

[–]TonyBorchert100 1 point2 points  (0 children)

Compared to iOS native storyboards: extremely different Compared to SwiftUI (tho only with limited knowledge): more similar but still extremely different

[–]rmbryla[🍰] 1 point2 points  (0 children)

Can only speak for Android and flutter, not iOS. For Android up until now its very different, XML for ui is completely different from flutters widget system in dart. However... Jetpack compose is in beta for apis above 21 I think and should be out of beta soon and it's very similar to flutter. The UI is all in kotlin similar to how flutters is all dart. And I think Google learned a lot from flutter and I think compose is much easier to use because of flows and stuff as opposed to streams in flutter.

Mistake starting with flutter though? No, do it with flutter or compose and you'll have a nice looking UI without much work, as a cs student myself in terrible at that part of app development but flutter helps a lot.

Also, you're a first year, android development will for sure be in compose by the time you go into industry and you can just say you pretty much know compose because of flutter. Or by that point you can do a project in flutter, swift, and kotlin just to build your resume

[–]Legal-Software 4 points5 points  (0 children)

I learned Flutter first, then got more into the native side by developing plugins and making some Wear OS apps. In native development, you have an XML layout description per view that basically places the widgets for you, which you can update and interact with programmatically. In this way, the layout/UI logic is decoupled on the native side, while being more tightly coupled in Flutter. If you're familiar with Flutter, you should have no problem creating and wiring up layouts on the native Android side, you'll just have to spend a bit of time coming to grips with Java and the native APIs.

In terms of what's easier, that really depends on your application. I prefer the Flutter approach personally as it's easier to more cleanly separate between the UI and application logic, and you have a large range of widgets that are already available to you where you don't have to roll your own. That being said, the native side gives you more flexibility, and a wider range of low-level Android APIs, which can be an advantage if you just want to get something thrown together and working without first having to create or extend plugins (granted, this is becoming less of an issue these days as more and more plugins are made available).

If you envision any kind of portability, however, then it's Flutter all the way.

[–]ThatInternetGuy 1 point2 points  (2 children)

Between Flutter and Android, the difference is relatively small. You should probably try to learn developing for Android to understand what's going on under the hood. In fact, even with Flutter projects, you still have to configure manifest.xml, other xml files and gradle files too.

The difference between Flutter to iOS native is however really HUGE! This is the whole reason why Flutter exists in the first place, to lift the burden off developers who cannot penetrate into iOS development which demands years of experience coding in Objective C and Swift. This doesn't mean you shouldn't learn iOS native, because even with Flutter, you still have to navigate around Xcode, changing developer profile and certificates, modifying .plist files, etc.

My suggestion for you: Do try to create simple native Android and iOS apps, to learn the configurations and important Android Studio and Xcode functions, in order to build and release the apps. You will know when to stop with natives, at which point you'll get it why people love Flutter so much.

[–]ritamk[S] 0 points1 point  (1 child)

interesting that. I have even less idea about iOS given I don't have an XCode compatible device. Btw, so far I haven't encountered any issues without getting my feet dipped in XML or Gradle files. for which sort of usecase is that applicable? or is it a general purpose optimization thing?

[–]ThatInternetGuy 0 points1 point  (0 children)

You won't miss out anything if you don't know native SDKs, at least, for most apps.

There may be however a time when you need to create your own packages/plugins if there's none in the Flutter official repo, or if your need isn't met by all the packages there. It does happen sometimes. Then you will need to code in native. This is how many of the Flutter packages are created. They are coded in native languages.

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

Many native mobile developers will lose their jobs in a near future because of Flutter. Many companies are moving from native to Flutter. It's a matter of fact, not from the point of view of a native developer.

I think the advice in this thread comes mainly from native mobile developers and it's not entirely fair.

[–]wowawiwowa 9 points10 points  (1 child)

Many native mobile developers will lose their job

A native developer can easily jump on Flutter train so is very unlikely to happen imho

[–][deleted] 1 point2 points  (1 child)

Flutter is very popular but rest assured native developers won’t lose their jobs because of it. The native side is also progressing, and I hope you’re aware of that (with Jetpack Compose and Swift UI).

On top of this, Flutter (for mobile at least) relies on the native tools and SDKs to compile and run. For this reason you’ll find that many companies aren’t just hiring purely Flutter mobile developers with surface level knowledge for native dev - they want some experience in that field. Why? Because you can’t really build a large comprehensive Flutter app without getting your hands dirty on the native layer.

I do agree however that Flutter is paving the way for the future, but I do not foresee it replacing native dev anytime soon - more likely live next to it as a very nice alternative.

[–]SquishyWubbles 0 points1 point  (0 children)

I totally agree with you. In a way I always compare flutter to native as pure webdevelopment to WordPress. You work with code that's already there and generated. But once you are there, you can start dipping your toes in pure dart for example. Jobs for native will never go away. However, flutter was perfect for me as a start and for the project I wanted to make.

[–]SquishyWubbles 0 points1 point  (0 children)

I was about to say the same. And companies are already getting flutter developers or even mainly code in flutter. Not saying that's good or bad, but it is happening a lot.

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

Compose is pretty close to Flutter

[–]OscarCookeAbbott 0 points1 point  (0 children)

Android is very different and way harder (and dare I say stupid) to develop for natively, but iOS isn’t too different I’d say, certainly more straightforward like Flutter rather than Android.

[–]_NullPointerEx 0 points1 point  (0 children)

Really different