Tips and tools for Flutter apps in production

Tips and tools for Flutter apps in production

·

11 min read

Featured on Hashnode

Introduction

Publishing your first app feels great. Flutter makes it very easy to build apps on any platform, so it's easy to turn your idea into a production-ready app and get it published on the Play Store, App Store, or anywhere.

But what should you do next, if you want to keep working on the app? My first instinct, personally, would be to just build more features! This can be a good idea, of course, especially if you've built a relatively simple app and want to keep improving it and introducing new, more advanced features, which can also help your app stand out from the rest. However, once your app is live, there are a few other things you should focus on first, or at least in parallel, while you're working on new features.

People build apps for many reasons, but most commonly it's to solve a problem and make people's lives easier. In this article, I will share some tips and things you can do once you've published an app in production to grow your app and make it even better. I will focus more on apps built with Flutter, and share tools, packages and services you can use, some which are specific to Flutter, and some not.

Improve your process

Continuous delivery

If you're publishing your app on multiple stores and platforms, or even just one, the process can be quite time consuming. Even if it takes a few minutes at a time, the process can be very manual and repetitive.

There are many tools you can use to automate releases and deployments of your app, and this official Flutter guide lists some of the options available to you.

There are all-in-one tools such as Codemagic which provide both CI (Continuous Integration) and CD (Continuous Delivery), so you could run tests and some verifications before your releases. If you have existing CI workflows, such as with GitHub Actions or GitLab, you can integrate fastlane with them to do this.

CI/CD can save you a lot of time, especially if you start releasing more often. While you don't really have to set this up before publishing the first version of your app, it's a good idea to set it up as early as possible. The setup will only take a little bit of time, but will end up saving you a lot more time in the future.

Screenshot creation

On stores such as the Play Store and App Store, app listings are required to have screenshots of your app. Taking these can be very tedious, as you might have to do it for multiple platforms, and even for multiple screen sizes!

Screenshots are important to get right, as it's one of the first things people will see, and you want them to want to download your app after checking out the screenshots. You can use tools such as AppScreens which can help with the layouts and adding phone frames or text in the screenshots. It works for both the Play Store and App Store, in addition to multiple screen size support and localization, so all you have to do is set it up once and then upload the "raw" screenshots.

Even with screenshot creator tools, you still need to manually capture these screenshots of your app. This is usually not too bad, as your app's main look might not change that often. But this can still be very time consuming and repetitive, as you need to repeat the same process for all supported platforms as well as screen sizes. You might also want to have some dummy data in the app so that the screenshots are not of an "empty" app. The screenshot taking process can also be automated. The tool screengrab is included with fastlane and can help capture screenshots in multiple languages on emulators or real devices, but does not currently support Flutter. There is an article on how to achieve this in Flutter with the screenshots package, but it seems to be outdated by now. However, it's worth spending at least some time to at least make this process easier and shorter, if not completely automated, as it could literally save you hours; I did this manually for apps I have on both the Play Store and App Store and the whole process usually took over an hour.

A blue bird holding a camera

Crash reporting

If the app crashes for your users, it would be good to know about it before they leave a bad review or feedback! You can use a service such as Sentry which is easy to integrate with their Flutter SDK to track any errors, monitor them, and act on them.

Analytics

Besides crashes, it's also a good idea to know how users are using your app. You can use services such as Amplitude, which integrate with Flutter, to track which features are being used and how. This can help you figure out what to work on next, or what to improve. And if some features are not being used as much as you expected, maybe you could consider removing them, or changing them.

Grow your app

Ask for reviews

Once you're happy with your app and are confident it is bug-free, it's a good idea to ask for reviews inside the app. You can use packages such as in_app_review that will show the native Store review pop-ups to your users, and you can decide to only show this once a user has been using the app for some time or has used some specific features an arbitrary number of times.

This is a great, easy way to get more reviews, and more (ideally positive) reviews can also mean more downloads.

Ask for feedback

While users usually leave feedback in reviews, it's also good to have an option for people to message you with any feedback or questions they have. Usually this through email. With the url_launcher plugin you can have users open their email app straight to your feedback email. This could be a personal email or a feedback-specific email for your app's domain (e.g. support@myflutterapp.com). For custom domains, if you don't want to pay for email services, you can use an email forwarding service such as ImprovMX to forward any feedback to your support email to your personal one.

Gathering feedback from users is a great way to get to know how users use your app, in addition to analytics. You can also get suggestions on things to improve on or features to add. And as a tip, if you receive any emails with very positive feedback, make sure to ask them to leave a review or rating in the Store if they haven't already!

Monetization

Perhaps not great for your users, but great for you! Monetizing your app gives you a good incentive to keep working on it and improving it. Ads can usually be bad for the user experience, so in-app purchases to unlock more advanced, "premium" features would be a good approach. For apps that require a server/backend to store data, subscriptions would be a good fit as they can also cover server costs. If your app is offline-only, maybe a one-time-purchase makes more sense. Services such as RevenueCat have Flutter SDKs and make it easy to implement in-app purchases, but you can also use Google's official in_app_purchase plugin, though for the latter you will need a backend to validate receipts.

Locking functionality behind a paywall can also help you validate how useful your app is. If people pay to use your app's more advanced features, it means they found your app helpful and have probably been using it for a while.

A blue bird putting a coin in a piggy bank

Localization

Even with your app just being in the English language, you can still get users from all over the world. However, by localizing your app you can expand your target audience for little cost, as a lot of mobile phone users prefer to use apps in their native language. You just need the translations, and localization in Flutter is very easy to set up.

At the very least, you can localize your app store listings (description, features), to make your app easier to find in app stores of different countries.

Accessibility

Besides localization, another way to reach more users is to improve your app's accessibility. Flutter has an accessibility page describing how you can test your app's accessibility and what you can do to address any potential issues, and there are also accessibility widgets you can use to improve accessibility.

App store optimization

App store optimization, typically referred to as ASO, is important if your app is on stores such as the Play Store and App Store. The more you optimize, the more people can find your app while browsing the stores, and the more downloads and users you get. I will not go into detail about this here as there are already countless resources for ASO out there. Two points already mentioned above, localization and asking for reviews, are good ways to improve your app store ranking.

Keep your users

On-boarding

Simply getting people to download your app is never enough. Most people are usually testing out different apps, so it's very likely they only briefly install your app, decide it's not what they're looking for and then uninstall it. This is why a user's first interaction with your app is important.

Introducing an on-boarding flow is an easy way to highlight your app's features when an app is first opened. With Flutter, you can quickly build an on-boarding flow with multiple pages to do this. One example would be to use the smooth_page_indicator package as well as some images (unDraw is a good free resource) with descriptions (ideally, localized!) of your app's main or stand-out features.

Tutorial

Regardless of how complex your app is, it could be helpful to show users how to use the app. A tutorial, also called a tour or product tour, is usually done by highlighting the buttons or areas users should be tapping or looking at. There are a lot of tutorial packages for Flutter on pub.dev that make it easy to highlight widgets and display descriptions.

The tutorial is a good follow-up to the initial on-boarding, and it's a good way to get users to interact more with your app and use its main functionality right from the beginning.

Hook

After a good on-boarding flow and tutorial, people are more likely to continue using your app! But how do you get them to keep using your app? This can vary depending on the type of app, but a user might install your app, find it useful, but then forget to use it regularly.

You can "nudge" your users by sending a daily local notification or push notification at a good time to get them to use your app. You can also incentivize continuous activity by introducing gamification or showing charts and streaks of the user's recent activity.

A blue bird pointing at a hook with its beak

Spread the word

Landing page

You might already have a domain for the app, and some "legal" pages (privacy policy, terms and conditions). But do you have a landing page for the app? It doesn't have to be anything fancy, but it's useful to have a simple page with buttons to the app stores where you list the main features of the app. If you already have good reviews on the stores, you could also list some of them in this page; user testimonials are a good way to convince people to at least try out your app.

People can stumble across your landing page either by searching for your app or by accident, or by someone sharing the landing page. This is good if your app is on multiple platforms, as you have a main page where users can see all available platforms, head to the correct store or website and download your app.

For this tip, using Flutter is actually not recommended! SEO matters for the landing page, so a Flutter web app would not help at all with this.

Share your app

If you've built something you think others will find useful, you should share it! Having a landing page, as mentioned above, helps with this as you can promote your app by simply sharing this landing page. So, tell your friends, Twitter, Reddit... everyone!

You can also build share functionality in your app with the share_plus package, so that users who like your app can share it with friends.

You can share your app with press, such as journalists which write about apps on different websites and blogs. Getting featured on such a site could be a great way to get downloads. You can simply reach out to sites or specific people by sharing your landing page and some info, but in this case, having a "press kit" including a description and details of your app's features, screenshots and/or videos, will make it more likely to actually convince people to write about your app. Using a service such as ImpressKit can help with setting up a press kit.

It's also possible to get featured on app stores such the Google Play Store or Apple App Store. For Apple's App Store, you can actually ask to get featured, and the team there will review your request. And if your request is rejected, keep asking! You can ask to be featured for every new/significant update of your app.

Launch

Another way to spread the word about your app and get more users is by "launching" your app on different places. ProductHunt is a popular site for launching products, and though again it can depend on your app if launching there will get you any visibility and downloads, showcasing your app on multiple sites is still useful. Every download counts!

A blue bird flying in space

Wrapping up

In this article, we listed some tips on things you can do after you publish your Flutter app, from improving the development and deployment process, to getting more downloads, and to getting users to keep using your app.

Some of these are actually never-ending processes (if you want them to be!), as there are always things to improve on and optimize, in addition to new features. But these are highly recommended if you want to keep working on your app.

Images generated by OpenAI's DALL-E.

This article was published as the #week4 article for #4articles4weeks.

Did you find this article valuable?

Support Christos by becoming a sponsor. Any amount is appreciated!