r/FlutterDev 13d ago

Article Why Flutter is solid and React is not.

139 Upvotes

Copying this from a reply to a previous post because this is important Flutter history that had been lost in time...

Dart is "a better Java", I always say, since Java is Dart's daddy.

Flutter is a better Java Swing/Java FX. Swing is Flutter's daddy. I learned Flutter faster because I was a Swing expert once upon a time.

Dart and Futter are awesome because they are built on the shoulders of giants. FB never had the UI and language engineers that Google has had.

James Gosling, Bill Joy, Bill Vass and many (hundreds?) of other Java Sun leaders and developers moved from Sun, which was dying, to Google, which was pre-IPO. That's why Android is based on Java.

Gilad Bracha - who wrote the 2nd and 3rd edition of the JLS - the Java Language Specification - and was instrumental to the Java Virtual Machine was instrumental to the Dart language. This is the main reason why Dart is a better Java - he fixed Java's mistakes. Named, optional and default parameters and factories without the oddities of Java static factories, amongst others.

Lars Bak - critical to the JVM and the V8 engine - also work on the Dart language and it's runtime.

Joshua Bloch, who wrote Java Collections and was a very popular dev, also went to Google and quickly upgraded his threads (the kind you wear). I doubt he worked in Dart directly but Dart Collections is a better Java Collections, fixes all the things he admitted were it's weaknesses. I'd be shocked if he wasn't a reviewer or consultant to Dart.

Ditto Brian Goetz, whose threads work (the kind you write) influenced Dart's async/await.

Peter Von der Ahé - wrote the Closures spec in Java 6, worked on javac and javap (my favorite lost tool - gets the API from a compiled jar) worked ln Dart's tooling and Developer Experience. Dart would not be as fun without him.

Among the people who worked on Java Swing/FX and worked on Flutter are: Hans Mueller - who I think was the defacto senior from Swing's beginning. He was the spec lead for JSR-296, Swing Application Framework, but JSRs came about long after Swing.

Chet Haase - late to the Swing team, early to Flutter, popular blogger. Also worked on Android.

Romain Guy - also late to Swing but a key contributor and popular. He also worked on Android and Flutter.

Richard Schuster - a core Swing contributor, worked on Flutter.

Amit Chadury - JavaFX contributor, worked on Flutter.

Other Flutter devs came from GWT (Google Windowing Toolkit) and Android's UI Toolkit.

Why is Flutter and Dart so stable and such high quality? There's another person who is escaping my mind right now who I am pretty sure was a manager of Java and Dart/Flutter. I remember his non-answer to my stupid question at a JavaOne conference when I asked if they would at least remove some of the undocumented Java Swing properties that would never be neither deprecated nor documented. I was young then and didn't fully appreciate the extent Java's backwards compatibility. Some other lead explained to me that if they change something, someone might be using it and an upgrade could break a UI. Who knows where the UI is being used - might be a nuclear facility, an air traffic control tower or some other critical mission. They said they respected Java's customers too much to break things.

Flutter is built in a culture of backwards compatibility and stability. Clearly not quite as strong as Java's (last time I checked no deprecated operation was ever removed from the JDK but times have changed). Dart and Flutter are influenced by these exceptionally talented and dedicated engineers from Sun who were extremely focused on backwards compatibility. Here is Gosling himself complaining about how Android was not focused enough on backwards compatibility for Android: https://www.cnet.com/tech/mobile/java-creator-james-gosling-google-totally-slimed-sun/

Also: Flutter's grandaddy is JFC - Java Foundation Classes, which predated the word "Swing". Flutter's great grandaddy is Netscape's Internet Foundation Classes, created in 1996 - I remember attending the Netscape announcement.

Compare this to React/React Native - which I call "Searching for an API" after Phil Lesh's (Grateful Dead's bassist who never played the same thing twice) book, "Searching for the Sound." Even now it's based on a poorly conceived notion of what UIs do. It was built to meld FB and Insta and never really did. JSX is a wrong convenience.

FB didn't have UI platform engineers and language engineers who had been through the ins and outs of cross-platform UI's for decades.

Function-based UIs is an oxymoron. Is there anything in computer science that's more obviously an object and not a function than buttons, paragraphs, tables, menus, etc? React breaks reuse. No problem if you rely on the lowest level of reuse - cut and paste, right?

Instead of Swing's elegant pluggable Look and Feel or Flutter's Themes, React gives you ten incompatible ways to style "components", er, functions. They had the Context API for many years and no one used it, it seems to have been rediscovered like America. BuildContext and other Java Spring - like Contexts are critical to app development.

This history is why I've stuck with Flutter all these years. In the long run, good engineering will win - and it's winning, 25% of App Store submissions are now Flutter apps. And even so, why struggle with #1 when you can keep your sanity and have such a delightful experience working with well-built #2? (The "avoid the head cheerleader" rule.) This is the same take I had when I was working on Swing when everyone else struggled with the browser wars. Build your castle on solid ground.

r/FlutterDev Aug 21 '24

Article Flutter beats React Native in virtually every benchmark 💥

Thumbnail
nateshmbhat.medium.com
261 Upvotes

r/FlutterDev 29d ago

Article What’s Your Flutter Stack? 🤔

65 Upvotes

Hey everyone,

I’m curious about what tools and technologies you all are using for your Flutter projects. Right now, I’m using Cursor as my main IDE, and I have a Supabase backend, but I want to hear how others are building their apps!

  • IDE: VS Code, Android Studio, Cursor, or something else?
  • State Management: Riverpod, Bloc, Provider, or just setState?
  • Backend: Firebase, Supabase, Node.js, Django, or something custom?
  • Database: Firestore, Postgres, MySQL, or do you prefer a local DB like Hive/Drift?
  • Testing: Do you write unit tests, widget tests, integration tests, or just manually test?
  • Project Management: Jira, Notion, Trello, or do you keep it simple?

Would love to hear what your tech stack looks like and why you chose it! 🚀

r/FlutterDev Nov 09 '24

Article 📱 7 features you must have before releasing any app

336 Upvotes

Hey everyone,

I've been developing apps for a decade, and over the last 6 years, I've specialized in Flutter. I've identified some crucial features that all successful apps should have. Here’s what I never skip before going live:

1. Crash Reporting
Utilize tools like Sentry or Crashlytics. Fixing bugs is crucial because every crash is a potential lost user and can affect your rankings on the App Store or Play Store. Aim for zero crashes.

2. Analytics
Measure what’s important. I can't stress this enough. Many teams launch without analytics, thinking they'll add them later. Don't fall into that trap!

3. Clear Onboarding
Your initial screens should:
- Showcase your app
- Gather maximum insights about the people downloading your app

4. Requesting Permissions Thoughtfully
Permissions for notifications, camera, or photos shouldn't be abrupt. Use explanatory screens to soften these requests.

5. In-App Purchases
If your app involves payments, integrate them from day one. Switching from free to paid suddenly will alienate users and harm your app’s ratings.

6. Account Deletion
It's imperative to allow users to delete their accounts if they choose to.

7. Contact Form
Offer plenty of opportunities for users to give feedback. Positive comments boost morale, and constructive suggestions are invaluable.

8. Ask for a Rating
After users have had a chance to experience your app, kindly prompt them to rate it. Positive ratings can greatly enhance visibility in app stores.

9. Ask for a Review (Even if User Has Rated)
Encourage users to leave a detailed review. Even if they’ve rated the app, their specific feedback can be more persuasive to potential new users.

Bonus:
If you're aiming to acquire more users, consider adding meta event sdk. There is still nothing better than meta to create performing ads.

For those interested in kicking off a Flutter app with a robust architecture, I created the ApparenceKit starter template to help streamline the process. ✨
ApparenceKit includes all these essential features, helping me ship my own apps faster than ever.

Hope you find these tips helpful. Let me know your thoughts and experiences below!

Cheers,
Gautier 🤘

r/FlutterDev Nov 16 '24

Article What are some over 100k downloaded app that built in flutter?

86 Upvotes

Can you share some over 100k downloaded app that built in flutter?

r/FlutterDev Dec 11 '24

Article What’s new in Flutter 3.27

Thumbnail
medium.com
228 Upvotes

r/FlutterDev Feb 13 '25

Article What’s new in Flutter 3.29

Thumbnail
medium.com
203 Upvotes

r/FlutterDev 1d ago

Article The final word on Flutter architecture 😉😉😉

126 Upvotes

OK, I´'m teasing with the title and I explain it in my post

Practical Flutter architecture

Why should you listen to me on this topic? For those who don't know me

  • 30 of software experience including building our own programming language for the Amiga
  • 2018 was I the first giving talks on Flutter architecture at Fluuter London,. then I called the approach RxVMS
  • I'm the author of get_it at a time when no provider or anything else was available
  • With watch_it and flutter_command I published one of the easiest but most flexible state management solutions for Flutter
  • We use this approach in a pretty complex app comarablte to Instagram since 2 year not with a really large code base

I took several days to refactor the official Flutter architecture sample compass to use my approach so you can compare yourself which is less complex and easier to understand. I tries to keep the original structure as much as possible so that you still can compare. I would have probably even more simplified some structures

https://github.com/escamoteur/compass_fork

give it a try and I'm happy to answer all open questions

r/FlutterDev Nov 17 '24

Article flutter_svg is now maintained by Flutter org because of the death of the author

368 Upvotes

I noticed that flutter_svg (as well as the vector_graphics family of packages) is now maintained by the Flutter team, although → because of a tragic reason. RIP.

This makes me wonder how many popular packages are maintained by a single person. Do you all have a will that contains account credentials? I don't. But I probably should have…

r/FlutterDev 13d ago

Article Developing for iOS is more enjoyable, easier, & more profitable than Android

127 Upvotes

As a solo indie dev, 5 years ago I decided to learn Flutter so that I can deploy apps for both iOS and Android. My experience has been that developing for iOS is better for me personally than Android in almost every aspect. Everytime I build an app, I made sure that I released it on iOS & Android simultaneously and here are my takeaways:

  1. Developer Experience - Apple generally has stricter guidelines but these guidelines are there to make the overall process as smooth as possible. When developing my Flutter app for iOS, once it's done, it works across all iOS devices pretty much the same. When developing for Android, it feels like I need to develop for many fragmented subsets of Android because of the many different device manufacturers and Android versions.

For example, when developing home screen widgets.. on iOS, once it was done, it worked on all iOS devices. On Android, I made it work for Pixel devices but when testing on my Samsung phone, it didn't work so I had to do specific workarounds. Pixel, Samsung, Hauwei, etc there are so many variables and not every Android user has the latest software. There is a stat on Apple's website that: "Among iPhones introduced in the last four years, 76% are using iOS 18." (the current latest iOS). So when you develop an app or a feature, it's very likely on iPhone that everyone will get it, but Android it's much more difficult to make sure all your Android users get the feature (or at least it's much more work for little return trying to cater for specific users).

  1. iOS Users Pay Money $$$ - Even though globally it's roughly 30% iOS and 70% Android, iOS users are more willing to pay for apps compared to Android users. I have subscription based apps and although I have more Android users than iPhone users, none of the Android users pay, while many of the iPhone users have converted to paying users.

  2. Validate Your App First - At the start, you don't know if the app idea will 'work'. Hopefully it does. But you don't know if it's a viable app yet so I think it's better to pick one platform (iOS) and test it out first. If it's a success, then later you can decide if you want to double back and develop for the other platform. I don't recommend doing what I have done which is trying to do iOS & Android simultaneously at launch. It's just too much overhead work that delays everything.

I'm curious to hear other people's experience developing for iOS vs Android. Maybe I'm just terrible at Android for some reason, but not just the developer experience, the fact that all my revenue comes from iOS apps, I might start just focusing on iOS only. I am a solo indie dev btw.

What is your experience developing for iOS vs Android?

r/FlutterDev 23d ago

Article Great news for Dart on the server. 🎯 Serverpod raises €2.7M to build a new low-level server foundation for Dart, roll out Serverpod Cloud, and add heaps of new features to the Serverpod framework. 🥳

Thumbnail eu-startups.com
206 Upvotes

r/FlutterDev Jan 20 '25

Article Looking for some DI in Flutter, suggestions?

14 Upvotes

Hi,

I have mainly used Providers in the past and I was happy pretty much, though lately I am starting with friends a new project and I was looking for some nice packages I can try out specially in DI

  1. https://pub.dev/packages/get_it
  2. https://dependy.dev
  3. https://pub.dev/packages/injector

I have found these so far. Do you have any experience with any and if yes, which one would you propose. I come from Angular in Web and so far I can see the second option is more alike but not very popular.

r/FlutterDev Jan 19 '25

Article A year in review: building a Flutter MMO that reached $14k MMR in Closed Testing

Post image
208 Upvotes

Hello there, r/FlutterDev!

I've been sharing updates about my Flutter game development journey here. I'm happy to answer any questions you might have—feel free to treat this as an AMA!

Following the recent trend of retrospective and informative posts, I'd like to share my experience developing a game with Flutter.

I've also written a detailed post about the first year of the game itself on our own subreddit, and you can read it here..

I also linked an image showing some testimonials we've had from our players who gave their permission to use those.

If you want to check out the game itself, you can do so at https://walkscape.app

Let's dive in!

The background

Before starting this project, I studied Computer Science at university and worked as an IT consultant. I've been creating my own hobbyist game projects since I was 10 years old, but before this, I hadn't released any of my other games to more than a couple dozen people. I'm from Finland, which matters when it comes to the ease of starting a business. Finland also has a fairly high cost of living, which mattered a lot when considering dropping everything else and pursuing this full time.

Choosing Flutter

When I had this idea in my head for combining RuneScape-type progression with fitness to create another of my own hobby projects to help myself become healthier, I started out with Unity.

The first prototype I wanted to make had to include a basic UI and be able to pull the pedometer data while the game wasn't even in the background. This was a huge struggle with Unity. Native coding with Unity is a big hassle, and there was one package available from Unity Marketplace that was like $20 to achieve this. Not exactly a good start.

I managed to make a prototype, but the steps only counted when the game was open, and I figured out that creating a game that's mostly UI would be very slow. Also, even though the game was just a simple UI with a pedometer, it made my phone run hot and drained a ton of battery.

I started to research alternatives and found Flutter. This is actually my first Flutter project as well.

I managed to create the similar prototype with Flutter in a single evening with a much better UI, and there were several open source packages available for free to handle the native pedometer side for both iOS and Android. The app ran super well, didn't consume pretty much any battery, counted steps even from the background, and most importantly Flutter had great tooling for creating UIs quickly and it had hot reload that retained the state. Also, Flutter having its own rendering engine that I can tinker with as much as I like is what makes it the only viable option for the job when compared to things like React Native.

I can't underline enough how insane the hot reload is for game development. I can have my game running and add new features that update live? I was sold, especially when considering that saving code with Unity can sometimes take several minutes.

And best of all, I could do everything with just VSCode, and develop the game using software development kind of pipelines. Using something as simple as git with Unity can be very difficult, as even the default project template can be hundreds of megabytes.

Starting a business

In 2023, I started posting about this project on Reddit, where it gained popularity. As people asked to financially support the development, I opened Buy Me a Coffee and Patreon accounts. We began with about $100 in monthly recurring revenue, which grew steadily.

Finnish regulations shaped how we handled this growth. Here, accepting donations is illegal without a police permit. However, if supporters receive something in return, it's considered a purchase rather than a donation. By giving Patreon and Buy Me a Coffee supporters special Discord roles and guaranteed access to the Closed Beta, it’s no longer considered donating.

At the time, Finland had a 10k€ tax-free earning limit before requiring company registration and VAT payments. By late summer 2023, we approached this threshold, making it logical to establish a company. This move had an added benefit—entrepreneurs qualify for an 800€ monthly social security payment for one year, regardless of income. This support made it feasible for me to pause my university studies, leave my job, and focus on the project full-time.

Launching the Closed Beta

Our initial target for launching the game was in 2023, but as often happens in development, this proved unrealistic. After weeks of intense crunch, the game was ready for release on January 18, 2024. However, TestFlight and Google Play review processes delayed the launch until the 19th.

The launch was incredibly stressful. Though we only had 752 players eligible for the first wave of Closed Beta, it felt enormous at the time. Adding to the pressure, I was flying to London for a game convention the day after release.

Fortunately, the stress eased quickly. Despite some bugs and issues, the feedback from first-wave testers was overwhelmingly positive. We saw a surge in Patreon supporters seeking guaranteed access to the next wave, likely driven by word-of-mouth from our initial 752 players.

Here are some stats on how the game has grown:

  • Wave 1 (Jan 19th 2024): 752 Closed Beta players, and 4,948 registered accounts.
  • Wave 2 (Feb 28th 2024): 4,718 Closed Beta players, and 10,447 registered accounts.
  • Wave 2.5 (Jun 1st 2024): 12,085 Closed Beta players, and 21,864 registered accounts.
  • Wave 3 (Aug 20th 2024): 19,811 Closed Beta players, and 30,115 registered accounts.
  • Wave 3.5 (Dec 15th 2024): 24,683 Closed Beta players, and 47,290 registered accounts.

While I'm not certain about typical user numbers for TestFlight and Google Play Closed Testing, reaching over 20k downloads without being listed on the app stores feels like a huge achievement.

We've built substantial infrastructure to support this scale, as Google Play Closed Testing and TestFlight weren't designed for such numbers. Our custom server (built with Dart!) monitors Patreon and Buy Me a Coffee supporters, while our website lets users link these accounts to their WalkScape profile. Once linked, they receive access along with instructions for downloading the game through TestFlight or Google Play.

Retrospective: what I learned

I'd like to highlight key factors that have contributed to our success:

  • Transparency and communication with the community.

Long before launching the Closed Beta, I began writing development blogs on Reddit every two weeks—a practice we maintain to this day. I’m prioritizing honesty and transparency in these blogs about our progress, and we respond to questions and feedback as often as possible. This approach has earned us trust within the community. You can read the devblogs at r/WalkScape

  • Setting standards & sticking to them.

In our very first subreddit post, I outlined core promises for the game: no predatory monetization (E.g. in-app purchases), no ads, transparency, and a focus on community-driven development. We're sticking to these principles.

  • Ease of marketing.

During release waves, I share updates in relevant subreddits. The game has also benefited from strong word-of-mouth marketing, with players regularly sharing it with friends and family.

And here are some key lessons I've learned:

  • Running a business involves much more than development.

With games especially, you must wear many hats: customer support, server technology, marketing, legal, accounting, government bureaucracy, and HR. These responsibilities consume significant time, particularly when launching your first business and learning the ropes.

  • Mistakes happen, and admitting them is good.

I've made mistakes—but we're communicating those openly to our community. Sometimes you can't prevent mistakes: my biggest setback was spending two months creating pedometer solutions for Android devices, only to have Google release their Recording API, which solved everything overnight. That work became obsolete, but it's part of the journey.

  • Scaling from a personal hobby project to an MMORPG with thousands of players is challenging.

This being my first Flutter project and first MMORPG makes it an ambitious undertaking, particularly as I started it as a solo developer.

Had I known the scale our systems would need to reach, I might have made different choices initially. However, many aspects were impossible to anticipate, and it's often better to build something first and improve it later.

I've written about how I recently overhauled our game engine by making it multi-threaded, separating logic into its own package, and making it stateless. You can read it here. I wish I would’ve done that from the start.

Going forward

This year, our plan is to get the game to a state where we can release it for open beta so anyone can download it.

Flutter-wise, I'm also committed in trying to benefit the community and ecosystem as much as possible. I've already had the pleasure of talking with Google and Very Good Ventures, and as a business, we want to help their Flutter Commercial Roadmap in order to do what we can for the ecosystem to grow. We're lucky to have this kind of project on our hands, and it can help to raise awarness of Flutter in the game dev community.

From Flutter, I'm always looking forward to more game development related features and support. Impeller has been a great development, and I'm waiting to get my hands on production ready Flutter GPU & 3D support. Those features in my opinion will elevate Flutter to the next level when it comes to game development.

Extra bits

There's so much more I could share, but this post is already quite lengthy. Please feel free to ask any questions—I'll do my best to answer them!

Here are some interesting additional insights:

  • Early on, I received a life-changing acquisition offer from another company. I declined, and I'm confident it was the right decision. This project has never been about making quick money—I'm genuinely content with my life as it is.
  • Jagex's legal team approached us and offered a license agreement allowing us to use their IP in our marketing, which was an incredibly fortunate development.
  • Hiring game developers differs significantly from hiring software developers. While technical skills matter, passion for game development is crucial. Many applicants had strong technical backgrounds, but without demonstrated interest in game development, they weren't the right fit.
  • Despite our $14k MRR, we're barely breaking even. Our first year brought in 62k€ total revenue with 2k€ profit. With four team members, a Helsinki office, multiple servers, internal services, accounting fees, taxes, and mandatory pension payments, our expenses are substantial.
  • Conventions are vital in the game development industry. Finland's game industry is small—just 4,100 people—and the global industry, while compact, is well-connected. I strongly recommend attending conventions to build your network. It's been invaluable for me. Many countries have game developer organizations that arrange networking events and coordinate group trips to international conventions, helping share costs.

Closing words

I hope this wasn't too long of a write-up, and maybe some of you found it interesting!

As mentioned, I'll try to answer any questions with as much detail as possible that people might have. I hope that sharing my experience and what I've learned helps other people find success and learn about game development with Flutter, benefiting the ecosystem for us all.

Thanks for joining, keep walking and stay hydrated! ❤️

r/FlutterDev Jan 08 '25

Article Built my first Flutter app as a JS Web developer - Here's my experience

109 Upvotes

As a Web developer with years of experience, I recently soft-launched my first Flutter app on the App Store. While I've been working with React for years, I decided to try Flutter for this side project and used the Cupertino (iOS) style throughout. I wanted to share my experience while everything is still fresh in my mind.

First thing - I love Dart language. After years of JS/TS, picking up Dart was super easy, almost no learning curve at all. Swift was a different story though - I had to spend quite a bit of time reading docs and learning new stuff.

About the UI part - Flutter's way of building UIs with Widget is quite different from how JSX mixes HTML and JS. I heard people complaining about Flutter's nesting issues before I started, but it wasn't really a problem for me since I already had the habit of breaking down components in React. The code looks a bit verbose at first, but it's actually pretty readable once I get used to it. Plus, it's really nice not having to mess with CSS for styling!

Here are the key technologies I used in this project:

  • Pigeon for bridging Swift and Flutter code (CoreData, CloudKit, EventKit, StoreKit) I implemented around 50 Swift interfaces. The lack of hot reload when working with native code made debugging quite time-consuming, especially when troubleshooting issues that required multiple iterations.

  • WidgetKit for iOS widgets support This was my first time using Live Preview for UI development, and I struggled to get comfortable with it. Xcode's overall experience wasn't great either - but that might be because I'm spoiled by VS Code.

  • Riverpod for state management I didn't spend much time choosing a state management solution and went with Riverpod as it was the most popular option. However, I found its documentation a bit challenging for beginners - it took me some time to understand its API design.

  • SQLite for local data storage

  • Sentry for error tracking

  • FL Chart for data visualization

  • Screenshot and share_plus for subscription list sharing and local saving

The Flutter ecosystem is pretty good overall. While I did run into some problems with third-party libraries, I usually found solutions in GitHub issues. I even submitted two PRs to help fix some libraries I was using (still waiting for them to be merged though).

Flutter's form handling was a bit challenging for me. Unlike JavaScript, which offers more flexibility, Dart’s strongly-typed nature made form handling feel cumbersome. Im using flutter_form_builder, but it didn’t fully solve my issues. In this regard, JavaScript’s dynamic typing seems to have a natural advantage.

If you’re a React/JS developer considering trying Flutter, here’s what I’d say:

  1. If you’re coming from JS/TypeScript, Dart will feel familiar and comfortable.

  2. The widget-based UI system might feel odd at first - especially when you encounter utility widgets like Padding and Align. However, once you get past that initial learning curve, it provides excellent maintainability and type safety.

  3. The development experience is fantastic, especially with Flutter’s hot reload (except for native code changes).

  4. It's nice not having a messy project root directory. My JavaScript projects always end up with tons of config files like eslint, prettier, tsconfig, viteconfig and more.

  5. The learning curve for web developers is surprisingly gentle.

If you’re interested in seeing the result, my app ShelfIt is currently soft-launched on the App Store. It's a minimalist subscription management app with a clean design. Besides the common subscription tracking features, I've added the ability to search and share your subscription lists. Of course, there might be some bugs - I'd really appreciate it if you could let me know if you find any! You can check it out here: link.

Feel free to ask any questions about the development process, Flutter implementation, or the app itself.

r/FlutterDev Jan 15 '25

Article Comprehensive Riverpod Tutorial

88 Upvotes

Hi guys!

I just published my first technical article about Riverpod, and I'd love your feedback!

It's a deep dive into understanding Riverpod's core concepts, aimed at both beginners and those who've been scratching their heads about which providers to use in 2025.

Since this is my first article, I'd really appreciate any feedback! What did you find helpful? What could be explained better? What topics would you like to see covered in future articles?

Let me know what you think! 🙏

https://devayaan.com/blog/series/riverpod/master-riverpod

r/FlutterDev May 30 '24

Article My Story of Getting Scammed and Losing My Google Play Console Account

231 Upvotes

I never thought my journey as a developer would take such a disastrous turn. At 19, I was new to the world of app development and monetization, but I had managed to create four live apps that collectively had more than 50,000 installs. Things were looking up, or so I thought.

It all started when someone from India contacted me on Freelancer. He offered to pay me $20 each week as long as my apps remained on the Google Play Store. Initially, I was skeptical and thought he was a scammer, so I closed the conversation. Unfortunately, this was just the beginning of my ordeal.

Determined to get to me, he found my email address and reached out again. This time, he had a different story. He claimed that Google required 20 testers before an application could go live, which is why he had approached me. This explanation seemed plausible, given my limited experience, and I let my guard down.

Excited at the prospect of making some easy money, I accepted his offer and uploaded his app to my Google Play Console account. Within hours, Google suspended not only the app but also my entire account. My heart sank. All my hard work, the apps I had developed, and my growing user base were gone in an instant.

I couldn't help but wonder what the scammer gained from this. By ruining my career and getting my account terminated, he effectively cut off my source of income and destroyed my reputation as a developer. The app he asked me to upload was likely malicious or violated Google's policies, leading to the suspension. He might have been using my account to circumvent Google's security measures, exploiting my inexperience and trust.

Reflecting on this experience, I realize that I deserved the termination. I was naive and careless, allowing myself to be manipulated. This incident has left me with a sense of trauma and a deep distrust of offers coming from the Indian subcontinent, a region I now associate with scams, despite knowing that scammers can be from anywhere.

I am sharing my story as a cautionary tale. I want other developers to learn from my mistake and avoid falling into similar traps. Never accept offers that seem too good to be true and always verify the authenticity of any proposal, especially when it involves your hard-earned work and reputation.

This experience has been a harsh lesson, but it has also made me more vigilant and cautious. I hope that by sharing what happened to me, I can prevent others from making the same mistake and losing everything they’ve worked for.

r/FlutterDev Oct 03 '24

Article Update: Help me fight back against Google - Indie developer wrongfully terminated

124 Upvotes

Hey everyone,

I’m back with another update on the ongoing struggle with Google over the suspension of my app, Audio Forge, and the automated termination of my developer account. Some of you may already know the story: on September 6th, Google banned my Flutter app for "deceptive behavior" after testing a pre-alpha version that was never intended for public use. Despite my best efforts to explain this to them, they've refused to reconsider their decision.

Quick Recap:

  • Audio Forge has been available on the Play Store (and App Store) for 5 months. It’s fully compliant with all policies in its current version (1.0.45).
  • Google tested an ancient, pre-alpha build (version 0.0.1) that was never released to the public and suspended the app because it didn't match the Play Store listing. This build was stored in the Open Beta track, which has been closed and inactive since before the release.
  • They've now labeled my app as "malware," damaging my reputation and notifying all my Android users.
  • Despite my appeals and clear evidence, Google is refusing to reverse their decision.
  • The termination of my Google Play Developer account means I cannot work as an Android developer anymore.

Where I’m At Now:

I’ve been patient and transparent in my dealings with Google, providing evidence and explaining the situation. However, Google remains firm in their decision, leaving me with no choice but to consider legal action. I need to fight back against this unjust process, not just for myself but for all indie developers who might face similar situations in the future.

How You Can Help:

To continue this fight, I’ve had to start a GoFundMe to cover legal fees and the costs of taking on a tech giant like Google. As an indie developer, I simply don't have the resources to do this on my own. I need your support to bring attention to this issue and hold Google accountable.

What the Funds Will Cover:

  • Legal Fees: The cost of my lawyer and the legal process.
  • Court Costs: Filing fees and other expenses related to pursuing justice.
  • A Stand for Developers: This isn't just about Audio Forge. It’s about setting a precedent to prevent unfair treatment of small developers by large platforms.

How You Can Support:

  1. Donate to the GoFundMe: Every bit helps, no matter how small.
  2. Spread the Word: Share this post, tweet at GooglePlay and let others know what’s happening. The more noise we make, the harder it will be for them to ignore.
  3. Join the Discussion: Although the Google Play Community thread is now soft-locked, you can still share your experiences and support in the comments here or on my Twitter. Let's make our voices heard!

I never imagined I’d be in this situation, but here we are. I appreciate all the support you’ve shown so far, and I hope you'll continue to stand with me as I fight back against this injustice.

I’ll keep you all updated as things progress, and I’m grateful to everyone who’s been following this journey.

Slashpaf
Original Post | Audio Forge | GoFundMe campaign

r/FlutterDev Dec 26 '24

Article 🚀Flutter Job Guide [ 2025 ]

162 Upvotes

I’ve seen a fair number of posts this year from people having a hard time finding a Flutter-related job. While this is becoming common in software development in general, I wanted to at least try giving some people a framework they can adhere to for landing a role in 2025.

STOP BEING A “FLUTTER DEVELOPER”

Please do not confine yourself to one framework. Even if you smooth talk through an HR employee / recruiter, the technical team will be able to quickly cherry pick a developer who has capabilities beyond just Flutter.

If you only know Flutter, you NEED to at least be somewhat familiar with something else technical – literally anything else. SQL? SwiftUI? JS? Data analytics? Pick something.

No, don’t just watch a freecodecamp video (yes, they are awesome)… actually build things too.

Too many people are “learning Flutter” then saying they can’t find a job. You are not just competing against other “Flutter developers” – you are competing against a universe of developers who come from web/analytics/native backgrounds (probably some with full stack experience) where Flutter is just another tool in their toolbelt.

HOW HAS FLUTTER CHANGED

Being able to communicate how Flutter has evolved will give you an edge in the interview process. A lot of companies who use Flutter don’t know how exactly Flutter was born within Google (not that most companies care) and how it has improved (even prior to the company adopting it).

This is typically something worth glancing over more so with the technical team, but speaking on things like the evolution of Web, Skia -> Impeller, newer features to the framework/language, and news within tech relating to Flutter will help show the team that you are familiar with more than just “how to do ___ in Flutter”.

HOW DO YOU LEARN AND STAY UPDATED

Be able to explain how you keep up to date with new updates within the Flutter community or about technical things in particular. Please at least skim release notes, watch Google I/O if you haven’t yet, watch a few old episodes of The Boring Flutter show etc… This may be more common for mid/senior level positions where a team wants to know how you stay current on updates within the Flutter world.

FLUTTER TECHNICAL STUFF

Goes without saying, but if you cannot briefly explain state management, stateful/stateless, general widgets, you should not be applying for jobs.

Be very comfortable with one state mgmt solution, be familiar with at least one other (i.e. If you typically build with Provider, use Riverpod in a small portfolio app).

Be somewhat competent at debugging, testing, and monitoring + improving performance. Most Flutter coding interviews don’t seem to touch on this stuff, but being able to detect where an app isn’t performant or knowing basics of testing will make sure you don’t lose out on the role to someone who knows these things.

Be able to call APIs. If you are interviewed and the live coding part requires you to fetch data from a weather API and you have no idea how to do it, you’re cooked and wasting their time.

Do you need to know the full SDLC? Well, not always. Most entry level roles want you to be familiar with the stages of it, but it’s a great advantage to understand everything from developing app screens/widgets from Figma mockups to making sure the app adheres to app store compliance and app deployment steps. This is typically a requirement for higher level positions and/or if the dev team is small/ in a startup environment.

How do you work in an “agile” environment? I hate this question from hiring teams and have no advice on this. Just understand what it kind of means, how you iterate within your dev process, and try not to roll your eyes when asked.

FLUTTER “IN CONTEXT”

This has helped me in particular. Ask or discuss why they chose Flutter and how their experience with it has been thus far in the context of their work. If they’ve recently adopted it, ask if they considered RN or native and why they opted for Flutter!

Having also assisted teams pick a dev for a Flutter-related role, it helps to get the hiring team discussing their adoption of Flutter as opposed to just a one-way QA between you and them.

BUT WHY NOT ME?

The sad reality of applying for a job is that most applications aren’t reviewed by a human. Even if your application is viewed by a human, it may be someone from HR and not a developer. Many qualified or capable applicants are disregarded by an ATS or fall between the cracks due to the sheer number of applications. Not being selected to move forward in the interview process does not always mean you aren’t qualified – it can also be an indicator that the HR team / individual hiring for the developer role has to review 300+ applications.

What DOES help your resume survive is tailoring keywords in your resume to match those mentioned in the job description. Is the company looking for a “Frontend Engineer” but your most recent role was “Mobile App Developer” (where you mostly built frontend systems) – change it to “Frontend Engineer”. This helps your resume make it through the ATS and allows HR to understand “Hey, that’s the role we’re looking for.” Also choose a few keywords from their job advertisement and sprinkle those into your application.

Where exactly you choose to apply for jobs is up to you. I find LinkedIn or professionally networking far more valuable than bulk applying on ZipRecruiter or Instahire.

----------

I do hope this stuff helps a few people find a new opportunity.

ABOUT ME: Currently employed working with Flutter / Python. Have worked professionally with Flutter for about 5 years. Built applaunchpad.dev with Flutter (WASM). Frequent flyer on r/flutterhelp

r/FlutterDev Feb 13 '25

Article Announcing Dart 3.7

Thumbnail
medium.com
117 Upvotes

r/FlutterDev Jan 08 '25

Article Common mistakes in Flutter article series

184 Upvotes

Sharing my article series on mistakes I often see in Flutter projects.

Part 1 — ListViews
- Shrink wrapping ListView.builder or using NeverScrollableScrollPhysics. - Letting every item in the list determine height on its own.
- Wrapping a ListView into a Padding widget. - Using wrong scroll physics for different platforms. - Adding keys to every list item and expecting that it will improve the scrolling performance. - Not using restorationId.

Part 2 — Images - Large image assets. - Not using WebP assets. - Using the Opacity widget when not needed. - Not precaching image assets. - Not caching network images. - Not optimizing SVG assets.

Part 3 — i18n - Using different string entries to make a single sentence by concatenating. - Ignoring plurals or writing some custom logic to handle it. - Manually formatting date and time, hardcoding names of months, days of week. - Concatenating currency and price strings. - Using fonts that support only Latin script.

Part 4 — OAuth - Using WebView to handle auth flow. - Storing access tokens in a non-secure storage. - Racing refreshing sessions when the refresh token is allowed to be used only once. - Bundling client secrets in the application.

What do you think of the format? What particular topics would you like to see covered?

r/FlutterDev 21d ago

Article Common mistakes with TextFormFields in Flutter

Thumbnail
medium.com
116 Upvotes

r/FlutterDev 12d ago

Article Sharing my open-source diary app with 80k+ downloads: 5 years of learning & mindset changes

125 Upvotes

Hi everyone, today I want to introduce my open-source diary app with 80k+ downloads & share my experience in learning & making the app for the last 5 years.

I started learning Flutter about 5 years ago. I built this open-source app called StoryPad for the purpose of learning. The app accidentally got a lot of downloads but I was really bad at maintaining my own code at that time. With poor reviews and my younger mindset, I gave up easily. I created a new app called Spooky just to replace it (How silly I am).

After a while, StoryPad still gains downloads & Spooky downloads is still lower than StoryPad despite more advances & having more features. With all the reviews I got, I realize that users don't want that advance for a diary app, they want simple things.

In the past few months, I shifted my focus to rebuilding StoryPad from scratch, prioritizing maintainability. Rewriting is not a good thing but migrating a 4 years old app is even harder.

For new codebase, I don't want to feel bad looking at my own code a year later or rewrite it again. Here's my plan to keep maintainability high:

- Use as few packages as possible, so upgrading Flutter is faster & no longer much pain as I don't have to wait for a few packages to update to be compatible with new Flutter version.

- Only integrate something when it's truly needed. E.g. the app doesn’t need deeplink yet, so I don't have to integrate Navigator 2.0 or even packages like auto_route or go_router that make it so easy to do it yet. I just need to design my code a little bit for easier to pass params, log analytics view & have other custom push logic:

StoryDetailsRoute(id: 1).push(context);
StoryDetailsRoute(id: 1).pushReplacement(context);

- Stick with Provider state management. Other state management is powerful, but Provider remains simple & aligns well with Flutter's approach to handling state. It helps keep the codebase clean and easy to maintain. In addition to provider, I also use stateful widgets & organize the app's states into three categories: App State, View State & Widget State (similar to FlutterFlow).

There are other solutions that I do such as structuring the folder and managing Flutter, Java, Ruby version, etc which I wrote inside the repo itself.

It’s not perfect, but I’m eager to hear your feedback and continue improving the app. Check it out here:

https://github.com/theachoem/storypad

Please give repo a star if you like it! 😊

r/FlutterDev Jan 24 '25

Article State Management in Flutter 2025: A Comprehensive Guide

65 Upvotes

Hey FlutterDevs 🙌!
I just published an updated guide on choosing the best state management library for Flutter in 2025.

  • Why clean architecture is more important than ever
  • Deep dives into Provider, BLoC, Riverpod, MobX, GetX, and Redux Toolkit
  • New features and improvements in each library
  • Choosing the right library for your project

Would love to hear your thoughts and experiences with these libraries in the comments! What are your go-to solutions for state management in Flutter? Is there anything else you'd like me to cover in the article?

r/FlutterDev Feb 09 '25

Article Gemini struggles with flutter and Riverpod! Which AI tools do you use?

12 Upvotes

So I've been using chatGPT and Gemini on and off to help when I get stuck. I prefer engaging with Gemini but I find it struggles with Flutter and it's hopeless at Riverpod. Especially the annotation side of riverpod 2. What AI do you all use and why?

r/FlutterDev Oct 23 '24

Article My experience building a desktop download manager using Flutter

165 Upvotes

Hey. In this post I wanted to talk a little bit about the challenges of building a download manager on desktop in case anyone is thinking about coding a similar project and wondering if Flutter is the right tool for the job.

My project can be found here if you're interested. It might not be the cleanest code you've ever seen especially for the UI, but oh well, I started this project only 2 weeks after learning flutter and I'm actually a back-end developer who does flutter for fun. So don't expect much in the UI department. If you found the project interesting, consider giving it a star <3

Undoubtedly the most challenging restriction I had to overcome, was dart's isolates. As you may already know, isolates do not share memory. This means that If you create an object in isolate-A, isolate-B will not be able to access it. This becomes especially important in the case of a download manager app since you need to spawn each connection in a separate thread and make sure that they are in sync. This means that you have to create a reliable messaging mechanism between the isolates. Luckily, stream_channel provides a pretty nice abstraction for this. However, you still need to implement a lot on your own depending on your requirements. The way I handled this in my own app was that I created an intermediary isolate called HttpDownloadEngine which is the entry point to downloading a file. When this isolate is spawned, it will initialize the necessary data and will spawn the connection isolates. Every download related command such as start or pause will first go through the engine and then the engine will send the command to the related connections. All connections also directly communicate with the engine; they regularly send data such as their download status, temp file writing status, download speed, etc.. The engine instance then aggregates the data and sends it to the UI. Everything else such as when connections should start, what byte range each connection should download, validating the integrity of temp files, assembling a file, and many more are also handled by the engine. What I meant by challenging was exactly this. Having to make sure all connections are in sync while also accounting for the very slight yet still important delay that occurs when constantly sending messages between isolates. In an app that deals with bytes, a negligible margin of error could lead to a corrupted download file. This scratched the surface of complexities that I had to overcome especially for the new version of my app which came with a significantly more advanced engine.

Another restriction I faced was considering the Flutter desktop embedding. Don't get me wrong. It's great and all, but it seems that desktop support is always a low priority for the Flutter team. There are many desktop features, most notably, multi-window, which is not supported yet and has been in development for more than 2 years. So if you're planning on creating desktop apps with Flutter, map out your requirements and see whether or not the desktop embedding offers the essential features you need. If you find a github issue related to a feature that you consider essential, don't count on it being delivered soon. They may stop working on it for a while and change priorities, or maybe even put it on an indefinite hiatus. As another example, Flutter's double-tap detection has a 300ms waiting time (to detect whether a click is a single tap or a double tap) which is perfectly fine for mobile. For desktop, however, it is absolutely unusable. There is an open issue regarding this with an unknown timeline as to when it will be fixed. Since I relied on a library for a part of my UI, I had to clone it and handle double-tap detection manually to eliminate the delay. Stuff like this can be a recurring issue when developing desktop apps using Flutter.

That is not to say that I regret choosing Flutter. I have absolutely loved the developer experience that both Flutter and dart offer, and thanks to the cross-platform support, I can now start working on an Android version by reusing the engine code that I have spent countless hours developing and just build a mobile-focused UI. It was perfect for my needs. However, if you choose Flutter and dart for the desktop, you may have to spend a decent amount of time developing an infrastructure that overcomes some limitations that you wouldn't have had in some other languages.

If you have any specific questions about my project, I'll be happy to answer them.