top | item 37749715

Show HN: I built a Flutter job app for both Android and iOS

10 points| vasper | 2 years ago | reply

I've built a Flutter app.

With not much prior experience (my first big development project), I somehow managed to pull this off. The whole process took about 5 months, mainly coding on weekends and late nights. The app is built upon SwissDevJobs' API and is available on both mobile platforms. The entire deployment process went smoothly. I had heard many horror stories about the App Store and its strict review procedure, but my app was accepted on the first try, so I guess there's nothing to be afraid of :)

Here are some "technical" details and my observations: It wouldn't have been possible to build this without the support of the entire Flutter community and third-party packages. Many essential functionalities are missing in the framework itself. Otherwise, you'd find yourself delving into the dark void of native code. State management is pretty much non-existent, so you need to rely on external solutions - for me, it was Provider. Many people might initially be thrown off by the way Flutter uses endless nested widget trees. Trust me, after a few days, you'll fall in love with this approach. It's intuitive and pleasant to work with. Dart is one of the best languages out there. I've tried many of them, perhaps too many, and Dart easily ranks as one of my all-time favorites. It's clean, intuitive, and I hope it will gain more popularity beyond just being used in Flutter.

Check it out, and please share your thoughts. Happy to hear all feedback, so don't hold back. Any criticism is more than welcome, a man must learn somewhere :)

Android version: https://play.google.com/store/apps/details?id=ch.swissdevjobs.swissdevjobsAPP

iPhone version: https://apps.apple.com/us/app/swissdevjobs/id6467407240

7 comments

order
[+] Alifatisk|2 years ago|reply
> Dart is one of the best languages out there. I've tried many of them, perhaps too many, and Dart easily ranks as one of my all-time favorites. It's clean, intuitive, and I hope it will gain more popularity beyond just being used in Flutter.

I somewhat agree, Dart is good. Performs well and is very flexible. What I don't like is the lack of type union. I don't know how to get around that.

[+] vasper|2 years ago|reply
I cannot think of any use of union types in Flutter, if I'm being honest. I'm not much of a TypeScript developer, but if I understand it correctly, it works quite well there because TS is more structural, where a union is more of a representation of the fields shared by two (or more) types. I feel like Flutter/Dart just works in a bit of a different manner compared to TS/React Native, and it shouldn't be looked at from the same angle.

Swift and Kotlin also do not have union types, and mobile developers somehow manage without them :D

[+] brutus1213|2 years ago|reply
Congrats!

I know the old Java based Android and the old obj-c based ios but haven't bothered to get fresh on all the changes of the last 5 years (swift, kotlin, jetpack, etc). I have been considering the Flutter option as a cross-platform way to do quick prototyping. Any good learning resources you can suggest (books, sites, tutorials)? Any particular libraries (e.g. image loading/rendering, parsing, etc.) you can suggest? Anything to avoid that seemed low value?

[+] vasper|2 years ago|reply
Honestly, I learned everything from YT tutorials - just the basic stuff to get a grasp of how those infamous widget trees work. Most of my learning came from a guy called Mitch Koko. The official Flutter channel is also excellent.

When it comes to libraries, I would recommend sticking with built-in features for tasks like image loading or parsing. This actually works quite well, and there's no need to delve into external solutions, especially for prototyping. Dart's factory methods come in handy for parsing JSON from an API, and the internal HTTP package is also very well done (for more advanced stuff there is a package called dio).

The main challenge lies in state management. Be sure to choose the right external stuff. The 'bloc' package seems to be the state of the art at the moment, but if you prefer something simpler, Provider is the way to go. The need for other libraries may become apparent after spending some time on the project.

Flutter is a great choice for quick prototyping. You can build something in a matter of minutes. Many people prefer this way over launching Figma, which says a lot :)

[+] BrutalCoding|2 years ago|reply
Looks and feels great. I’m based in Australia but checked it out anyways and I can tell you’ve put some great effort into this app. I’ve started with Flutter in 2018 and have done Flutter full time in 2 different startups for a few years. So I know my way around it, and this app looks and feels great to me.

It carries attention to details. For example the (hero?) transition from tapping on the searchbar to the searchbaroverlay is nice.

The SelectableText widgets in the Requirements section is a nice touch too. Can’t select the titles such as “Must” or “Nice to have:” but I guess that the content is what matters, which you made selectable.

Dropdowns look nice. Overall just positive in general, especially for someone that has been doing this on the side with no prior experience.

I’d recommend to look into Riverpod for state management instead of Provider, its from the same guy named Remi (author). Especially when you get the hang of the optional riverpod_generator companion plugin (again, same author). It’s basically a Provider 2.0 but due to many differences and breaking changes, he decided to go for a new name.

Some nitpicks: - Twitter logo and name is outdated (X now) - Typo in appbar title when in the Salary stats page, it should be “Salary Statistics” - Salary stats doesnt seem to want to load. Perhaps add a hardcoded timer e.g. display something like “This is taking longer than usual, please come back later.” after a min or so. (Edit: nvm, it loaded) - When tapping on any pages from the sidebar, the only one being “remembered” is the community one. That one gets highlighted in blue but it’s still blue after I visit other pages such as “Send feedback”

Anyways, great job. Keep at it.

[+] vasper|2 years ago|reply
Thank you for the kind words and the feedback (。◕‿‿◕。)

Actually, the transition from the searchbar is made using the animations package. Container transform, to be more specific: https://pub.dev/packages/animations

Regarding selectable text: I didn't want the titles to be selectable; instead, I aimed for the actual text provided by the companies to be selectable. However, there's one annoying bug with the SelectableText widget - in shorter texts, the widgets leave an empty space (one character long) before the actual content of the widget. I couldn't figure out how to bypass that, so I left it as a normal Text widget. If you place a SelectableText on top of or below a normal Text widget, the first one does not appear centered at all. Just one of those quirky Flutter things :)

For dropdowns, I use the Dropdown2 package - much, much better and more customizable compared to the standard, Flutter one.

I considered Riverpod for state management, but Provider seemed more appealing to me at that time, probably due to its simplicity. Someday I may switch to the Bloc approach just to see and get a grasp of how the big boys handle this.

For me, it will always be Twitter :(

The slow loading issue might be because you are based in Australia, and Cloudflare is taking some time to process the "connection". Sometimes it even blocks users from certain countries or regions. I don't know exactly how it works behind the scenes; it's completely not my cup of tea. But you're right, adding something like "This is taking longer than usual..." would be a great addition.

Thanks for all the feedback!

[+] WomenCanCode|2 years ago|reply
Just here to tell you - well done! I ve downloaded the app and it is user friendly and works smoothly. Especially if you know, that this is one man army job!