<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Damilare Ajakaiye</title>
    <description>The latest articles on Forem by Damilare Ajakaiye (@pozadkey).</description>
    <link>https://forem.com/pozadkey</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F426639%2Fdb54e4af-0e86-4b13-8ed5-bd854179a72e.png</url>
      <title>Forem: Damilare Ajakaiye</title>
      <link>https://forem.com/pozadkey</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/pozadkey"/>
    <language>en</language>
    <item>
      <title>Dockerclean — How I Learned to Stop Worrying and Love Safe Docker Cleanup</title>
      <dc:creator>Damilare Ajakaiye</dc:creator>
      <pubDate>Sun, 23 Nov 2025 02:49:31 +0000</pubDate>
      <link>https://forem.com/pozadkey/dockerclean-how-i-learned-to-stop-worrying-and-love-safe-docker-cleanup-1326</link>
      <guid>https://forem.com/pozadkey/dockerclean-how-i-learned-to-stop-worrying-and-love-safe-docker-cleanup-1326</guid>
      <description>&lt;p&gt;Picture this: I'm mid-project, juggling three Docker containers, testing a new microservice architecture, when suddenly… my laptop screams at me: "No disk space left!"&lt;/p&gt;

&lt;p&gt;I check Docker. 12GB of images I don't remember downloading, stopped containers from experiments, dangling volumes… and yeah, build caches from weeks ago. My usual go-to, &lt;code&gt;docker system prune&lt;/code&gt;, felt like defusing a bomb blindfolded. One wrong flag and I could lose hours of work.&lt;/p&gt;

&lt;p&gt;I realized I needed a smarter, safer approach. Enter Dockerclean — my little Go CLI project that now keeps my Docker environment lean, predictable, and pain-free.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Docker is amazing, but it hoards disk space like a dragon. Unused images, stopped containers, orphaned volumes, and leftover build cache silently pile up, slowing down builds and filling your storage.&lt;/p&gt;

&lt;p&gt;Developers often run &lt;code&gt;docker system prune&lt;/code&gt; or forget about it altogether, risking data loss or wasting hours cleaning manually. I wanted a solution that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shows exactly what's using disk space&lt;/li&gt;
&lt;li&gt;Lets me prune safely or fully, depending on the risk I'm willing to take&lt;/li&gt;
&lt;li&gt;Is easy to install and run anywhere&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;I went with Go because it's fast, statically typed, and perfect for CLI tools. Here's the breakdown:&lt;/p&gt;

&lt;h3&gt;
  
  
  Analyzer (&lt;code&gt;internal/analyzer&lt;/code&gt;)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Connects to Docker using the Go SDK&lt;/li&gt;
&lt;li&gt;Scans images, containers, volumes, and build cache&lt;/li&gt;
&lt;li&gt;Reports disk usage in a human-friendly, color-coded format&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cleaner (&lt;code&gt;internal/cleaner&lt;/code&gt;)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Wraps Docker prune commands safely&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--safe&lt;/code&gt; mode removes only stopped or dangling resources&lt;/li&gt;
&lt;li&gt;Full prune removes everything, but always asks for confirmation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  CLI (&lt;code&gt;cmd/&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;Built with Cobra for robust command parsing. Uses &lt;code&gt;fatih/color&lt;/code&gt; for instant visual cues — green for safe, yellow for warnings, red for critical.&lt;/p&gt;

&lt;p&gt;Commands are intuitive:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Analyze your Docker environment&lt;/span&gt;
dockerclean analyze

&lt;span class="c"&gt;# Safe prune&lt;/span&gt;
dockerclean prune &lt;span class="nt"&gt;--safe&lt;/span&gt;

&lt;span class="c"&gt;# Full prune (confirmation required)&lt;/span&gt;
dockerclean prune
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Testing
&lt;/h3&gt;

&lt;p&gt;Wrote unit tests for analyzer and cleaner packages to ensure safe operations. Coverage is 100% for the core logic, so nothing accidentally nukes my running containers.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Result
&lt;/h2&gt;

&lt;p&gt;Now, instead of wondering "What's eating my disk?", I just run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dockerclean analyze
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;…and see a clean summary of total usage, per-resource breakdown, and a safety assessment.&lt;/p&gt;

&lt;p&gt;Need to reclaim space?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dockerclean prune &lt;span class="nt"&gt;--safe&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or, if I'm feeling bold:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dockerclean prune
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Everything's logged, color-coded, and predictable. No more surprises.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lessons Learned
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Visibility first&lt;/strong&gt; — never prune blindly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Go + Cobra + Docker SDK&lt;/strong&gt; = a dream team for CLI tools&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tests are non-negotiable&lt;/strong&gt; — safe operations are useless without confidence in your code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Color-coded terminal output&lt;/strong&gt; makes a surprisingly big difference when scanning usage stats&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dockerclean started as a personal tool, but now I hope it helps others who are tired of Docker eating their storage silently.&lt;/p&gt;

&lt;p&gt;Try it yourself: &lt;a href="https://github.com/pozadkey/dockerclean" rel="noopener noreferrer"&gt;github.com/pozadkey/dockerclean&lt;/a&gt;&lt;/p&gt;

</description>
      <category>go</category>
      <category>docker</category>
      <category>tooling</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Creating and Publishing Dart Packages for Flutter</title>
      <dc:creator>Damilare Ajakaiye</dc:creator>
      <pubDate>Tue, 15 Aug 2023 02:12:22 +0000</pubDate>
      <link>https://forem.com/pozadkey/create-and-publish-dart-package-for-flutter-5ff8</link>
      <guid>https://forem.com/pozadkey/create-and-publish-dart-package-for-flutter-5ff8</guid>
      <description>&lt;h3&gt;
  
  
  What are Dart Packages?
&lt;/h3&gt;

&lt;p&gt;Dart packages are a fundamental aspect of the Flutter framework, offering pre-built functionalities and features that streamline app development. These packages are readily available on platforms like pub.dev, which acts as a central repository for Flutter packages, enabling developers to access and share resources easily.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Embrace Dart Packages?
&lt;/h3&gt;

&lt;p&gt;Leveraging Dart packages empowers developers to concentrate on crafting distinctive features and user experiences while benefiting from the collective expertise of the community. This not only accelerates the development process but also maintains a high standard of quality and cultivates an environment of shared knowledge and innovation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dart Package vs Plug-in Package
&lt;/h3&gt;

&lt;p&gt;Dart packages encompass a collection of related code files and assets, often disseminated through the Dart package manager (pub.dev). This package manager facilitates dependency management and code sharing, contributing to a more efficient development workflow.&lt;/p&gt;

&lt;p&gt;In contrast, a plug-in package is designed to enhance the capabilities of specific software, frameworks, or platforms. For instance, in the context of Flutter—a Dart framework—a plug-in package might grant access to native features or third-party services, expanding the app's functionality.&lt;/p&gt;

&lt;h3&gt;
  
  
  Let's Dive In: Creating a Dart Package
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Step 1: Setting Up the Project
&lt;/h3&gt;

&lt;p&gt;Begin by initiating a project named &lt;strong&gt;&lt;code&gt;quick_button&lt;/code&gt;&lt;/strong&gt; using the following command in your terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flutter create --template=package quick_button
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command creates a folder structure with the primary entry file located at &lt;strong&gt;&lt;code&gt;lib/quick_button&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Git Repository Setup
&lt;/h3&gt;

&lt;p&gt;Initialize a Git repository for your project using the following commands in the terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git init
git add .
git commit -m "Initial commit"
git remote add origin https://github.com/pozadkey/quick_button.git
git push -u origin master
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Ensure that you replace 'origin' with your actual remote address.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Step 3: Editing Essential Files
&lt;/h3&gt;

&lt;p&gt;With your project files pushed to the GitHub repository, you can now proceed to edit the following files:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;pubspec.yaml&lt;/code&gt;&lt;/strong&gt;: This file contains information about the Flutter package and its dependencies. Make the following edits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;Author&lt;/code&gt;&lt;/strong&gt;: Provide details about the creator and contributors in the pattern:
&lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FirstName LastName &amp;lt;email@example.com&amp;gt;
Damilare Ajakaiye &amp;lt;hello@pozadkey.com&amp;gt;
&lt;/code&gt;&lt;/pre&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;Homepage&lt;/code&gt;&lt;/strong&gt;: Include the URL of the package repository.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;README.md&lt;/code&gt;&lt;/strong&gt;: Craft a starter markdown file that succinctly outlines the purpose of the package.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;CHANGELOG.md&lt;/code&gt;&lt;/strong&gt;: Document changes made to the package in chronological order, including version information and explanations for each change.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;License&lt;/code&gt;&lt;/strong&gt;: Choose an open-source license and insert it in the proper section, replacing [year] and [fullname] with appropriate values.&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 4: Developing the Flutter Widget
&lt;/h3&gt;

&lt;p&gt;Create a custom button widget by editing the &lt;strong&gt;&lt;em&gt;&lt;code&gt;lib/quick_button&lt;/code&gt;&lt;/em&gt;&lt;/strong&gt; file. This widget will serve as the foundation for the button's appearance and behavior.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Building an Example
&lt;/h3&gt;

&lt;p&gt;Generate an example project to test the package. Execute the following command in the root directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flutter create example
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the example project's &lt;strong&gt;&lt;code&gt;pubspec.yaml&lt;/code&gt;&lt;/strong&gt; file, add the package dependencies required for the example project.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...
dependencies:
  flutter:
    sdk: flutter
  custom_alert_box:
    path: ../
...

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can now import our package and use it in the &lt;strong&gt;&lt;code&gt;example&lt;/code&gt;&lt;/strong&gt; project.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import 'package:quick_button/quick_button.dart';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Writing Tests&lt;/strong&gt;:
To ensure that all the widgets are responding correctly, you can create tests in the &lt;strong&gt;&lt;em&gt;&lt;code&gt;test/quick_button_test.dart&lt;/code&gt;&lt;/em&gt;&lt;/strong&gt; file.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 5: Publishing the Package
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Document the Package&lt;/strong&gt;: Create comprehensive documentation that explains the concepts and usage of your package. Generate documentation using the following command:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  dart doc .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Push Changes to GitHub&lt;/strong&gt;: Ensure all changes are committed and pushed to your GitHub repository.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Test-Publish the Package&lt;/strong&gt;: To verify everything is in order, perform a test-publish of your package using the command:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  flutter pub publish --dry-run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Final Publishing&lt;/strong&gt;: Once you've confirmed the absence of errors, publish your package to pub.dev with the following command:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  flutter pub publish
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Terminal will prompt you to verify your pub.dev account.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Congratulations! Your Package has been published.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj7xqdnopzzsz9438d27d.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj7xqdnopzzsz9438d27d.jpeg" alt="quick_button pub.dev image" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Maintaining the Package
&lt;/h2&gt;

&lt;p&gt;Before updating the package, remember to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Push all changes to your GitHub repository.&lt;/li&gt;
&lt;li&gt;Record changes in the &lt;strong&gt;&lt;code&gt;CHANGELOG.md&lt;/code&gt;&lt;/strong&gt; file.&lt;/li&gt;
&lt;li&gt;Update the version in the &lt;strong&gt;&lt;code&gt;pubspec.yaml&lt;/code&gt;&lt;/strong&gt; file&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Package source code: &lt;a href="https://github.com/pozadkey/quick_button" rel="noopener noreferrer"&gt;quick_button&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Published package: &lt;a href="https://pub.dev/packages/quick_button" rel="noopener noreferrer"&gt;quick_button&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>dart</category>
      <category>flutter</category>
      <category>packages</category>
      <category>pubdev</category>
    </item>
    <item>
      <title>Publishing Flutter app to Google Play Store - Part 2</title>
      <dc:creator>Damilare Ajakaiye</dc:creator>
      <pubDate>Sat, 28 Jan 2023 15:27:01 +0000</pubDate>
      <link>https://forem.com/pozadkey/publishing-flutter-app-to-google-play-store-part-2-nkh</link>
      <guid>https://forem.com/pozadkey/publishing-flutter-app-to-google-play-store-part-2-nkh</guid>
      <description>&lt;p&gt;In the &lt;strong&gt;&lt;em&gt;&lt;a href="https://dev.to/pozadkey/publishing-flutter-app-to-google-play-store-part-1-325h"&gt;previous article&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt; of this series, you learned how to prepare your Flutter app for Android production release. If you haven't read the article yet, &lt;strong&gt;&lt;em&gt;&lt;a href="https://dev.to/pozadkey/publishing-flutter-app-to-google-play-store-part-1-325h"&gt;Read it here&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;. It's highly recommended that you do so before proceeding with this article.&lt;/p&gt;

&lt;p&gt;In this article, you'll learn how to publish your app to the &lt;strong&gt;&lt;em&gt;Google Play Store&lt;/em&gt;&lt;/strong&gt; via the &lt;strong&gt;&lt;em&gt;Developer Console&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Let's get started!&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Create a Developer Account
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;If you already have a &lt;strong&gt;&lt;em&gt;Developer Account&lt;/em&gt;&lt;/strong&gt;, move on to &lt;strong&gt;Step 2&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Visit &lt;strong&gt;&lt;em&gt;&lt;a href="https://play.google.com/console/developers" rel="noopener noreferrer"&gt;Google Play Console&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt; to create a &lt;strong&gt;&lt;em&gt;Developer Account&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A &lt;strong&gt;&lt;em&gt;one-off $25 registration fee&lt;/em&gt;&lt;/strong&gt; must be paid using a debit or credit card (prepaid cards are not accepted).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You'll need to verify your identity using a government-approved document.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once approved, you can proceed to &lt;strong&gt;&lt;em&gt;Step 2&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 2: Create an App
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Click on the &lt;strong&gt;&lt;em&gt;Create App&lt;/em&gt;&lt;/strong&gt; button.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh03du53dmv2myl4a3s8y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh03du53dmv2myl4a3s8y.png" alt="Create app on Google Developer console" width="800" height="69"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fill in the required details and check all the checkboxes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhfmzzyioq2nxupiu35xs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhfmzzyioq2nxupiu35xs.png" alt="App information" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Add Description, Logo, Screenshots, Videos, and Feature Graphics.
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Go to &lt;strong&gt;&lt;code&gt;Store presence &amp;gt; Main store listing&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fill in the required details.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8kvkcra6ha2yjf7cb0l9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8kvkcra6ha2yjf7cb0l9.png" alt="Fill app details" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To add an &lt;strong&gt;&lt;em&gt;App icon&lt;/em&gt;&lt;/strong&gt;, simply drag and drop the &lt;strong&gt;&lt;code&gt;icon.png&lt;/code&gt;&lt;/strong&gt; you used to create your &lt;strong&gt;&lt;em&gt;App Icon&lt;/em&gt;&lt;/strong&gt; from the &lt;strong&gt;&lt;em&gt;&lt;a href="https://dev.to/pozadkey/publishing-flutter-app-to-google-play-store-part-1-325h"&gt;previous tutorial&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt; into the &lt;strong&gt;&lt;em&gt;App icon&lt;/em&gt;&lt;/strong&gt; box.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwho7l8a6aiekoiowbob2.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwho7l8a6aiekoiowbob2.jpeg" alt="Add app icon" width="800" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add a &lt;strong&gt;&lt;em&gt;Feature Graphics&lt;/em&gt;&lt;/strong&gt;. You can either generate one using an &lt;strong&gt;&lt;em&gt;&lt;a href="https://www.norio.be/graphic-generator/" rel="noopener noreferrer"&gt;Online Graphic Generator&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt; or use any other website you prefer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7g84ov31fc53ny11ga4s.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7g84ov31fc53ny11ga4s.jpeg" alt="Feature graphics" width="800" height="185"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Include at least 2 screenshots of your app in the &lt;strong&gt;&lt;em&gt;Phone, 7' and 10' tablets Screenshot&lt;/em&gt;&lt;/strong&gt; sections respectively.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8zwk5rej2loo5vst399o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8zwk5rej2loo5vst399o.png" alt="Screenshots" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxkjw2kfoy3a1q7gr9dvg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxkjw2kfoy3a1q7gr9dvg.png" alt="Screenshots" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Save&lt;/em&gt;&lt;/strong&gt; the &lt;strong&gt;&lt;em&gt;Main Store Listing&lt;/em&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 4: Store Settings
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Go to &lt;strong&gt;&lt;em&gt;Store Settings&lt;/em&gt;&lt;/strong&gt; and select your app's &lt;strong&gt;&lt;em&gt;category&lt;/em&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;em&gt;tags&lt;/em&gt;&lt;/strong&gt;, then fill in the required details.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpnhza3cl86o7ire715fd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpnhza3cl86o7ire715fd.png" alt="App category" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;em&gt;Save&lt;/em&gt;&lt;/strong&gt; it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 5: Add Countries and Regions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Go to &lt;strong&gt;&lt;code&gt;Production &amp;gt; Country / Region&lt;/code&gt;&lt;/strong&gt; to specify the countries where you want your app to be available for download.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpi8v8py18jo9n3pli0y8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpi8v8py18jo9n3pli0y8.png" alt="Countries" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 6: App Content
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Add a &lt;strong&gt;&lt;em&gt;Privacy policy&lt;/em&gt;&lt;/strong&gt; for your app. You can use a &lt;strong&gt;&lt;em&gt;&lt;a href="https://www.freeprivacypolicy.com/free-privacy-policy-generator/" rel="noopener noreferrer"&gt;Privacy Policy Generator&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt; or provide the link to an existing one.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frc8jyqli6tbsip20m7y5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frc8jyqli6tbsip20m7y5.png" alt="Privacy policy" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select &lt;strong&gt;&lt;em&gt;App Access&lt;/em&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fln1vpkzgjft1j7nbvebn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fln1vpkzgjft1j7nbvebn.png" alt="App access" width="800" height="309"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the &lt;strong&gt;&lt;em&gt;Ads&lt;/em&gt;&lt;/strong&gt; section, select &lt;strong&gt;&lt;em&gt;YES&lt;/em&gt;&lt;/strong&gt; if your app contains &lt;strong&gt;&lt;em&gt;ADS&lt;/em&gt;&lt;/strong&gt;, or &lt;strong&gt;&lt;em&gt;NO&lt;/em&gt;&lt;/strong&gt; if it doesn't.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2au3nbw0p9i4v5ida0pr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2au3nbw0p9i4v5ida0pr.png" alt="Ads" width="800" height="331"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choose the appropriate &lt;strong&gt;&lt;em&gt;Content Rating&lt;/em&gt;&lt;/strong&gt; category for your app.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0s3z6st72mubqdhmsdwp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0s3z6st72mubqdhmsdwp.png" alt="Content ratings" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;In the &lt;strong&gt;&lt;em&gt;Questionnaire&lt;/em&gt;&lt;/strong&gt; tab, answer the provided questions and &lt;strong&gt;&lt;em&gt;Save&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Proceed to &lt;strong&gt;&lt;em&gt;Target audience and content&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select the target age groups for your app.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcb26z526fsmvf11dwh95.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcb26z526fsmvf11dwh95.png" alt="Target age" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;&lt;em&gt;Next&lt;/em&gt;&lt;/strong&gt; and provide the required information on the &lt;strong&gt;&lt;em&gt;App Details&lt;/em&gt;&lt;/strong&gt; page.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0x19rz5uybj38vva15yk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0x19rz5uybj38vva15yk.png" alt="App details" width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;&lt;em&gt;Next&lt;/em&gt;&lt;/strong&gt; twice to reach the &lt;strong&gt;&lt;em&gt;Store presence&lt;/em&gt;&lt;/strong&gt; tab. Select appropriate options.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyzf2higyso7vejb0xigh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyzf2higyso7vejb0xigh.png" alt="Target audience" width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;&lt;em&gt;Next&lt;/em&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;em&gt;Save&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Navigate to &lt;strong&gt;&lt;em&gt;News apps&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv4537um7lnmckudqgbbp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv4537um7lnmckudqgbbp.png" alt="News apps" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;&lt;em&gt;YES&lt;/em&gt;&lt;/strong&gt; if your app is a news app; otherwise, select &lt;strong&gt;&lt;em&gt;NO&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Save&lt;/em&gt;&lt;/strong&gt; it.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 7: Roll Out the App to Production
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Click on &lt;strong&gt;&lt;em&gt;Production&lt;/em&gt;&lt;/strong&gt; in the sidebar.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a &lt;strong&gt;&lt;em&gt;New Release&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr052kpd687e9w7q24k4q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr052kpd687e9w7q24k4q.png" alt="Create new release" width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Upload the &lt;strong&gt;&lt;code&gt;app-release.aab&lt;/code&gt;&lt;/strong&gt; app bundle file in the &lt;strong&gt;&lt;em&gt;App Bundle section&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add &lt;strong&gt;&lt;em&gt;Release Notes&lt;/em&gt;&lt;/strong&gt;, which will be displayed on your app's home page on Google Play.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1wh24t3v62hq2wtmig5m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1wh24t3v62hq2wtmig5m.png" alt="Release notes" width="800" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Save&lt;/em&gt;&lt;/strong&gt; it and &lt;strong&gt;&lt;em&gt;Review the Release&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Finally, click on &lt;strong&gt;&lt;em&gt;Start Rollout To Production&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyneg6avawl97p3zdufly.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyneg6avawl97p3zdufly.png" alt="Production release" width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congratulations 🎉!! You've uploaded your app to the &lt;strong&gt;&lt;em&gt;Google Play Store&lt;/em&gt;&lt;/strong&gt;. Now you need to wait for a response from the &lt;strong&gt;&lt;em&gt;Google team&lt;/em&gt;&lt;/strong&gt; to manually review your app and add it to the &lt;strong&gt;Google Play Store&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>devrel</category>
      <category>community</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Publishing Flutter app to Google Play Store - Part 1</title>
      <dc:creator>Damilare Ajakaiye</dc:creator>
      <pubDate>Sat, 28 Jan 2023 15:17:19 +0000</pubDate>
      <link>https://forem.com/pozadkey/publishing-flutter-app-to-google-play-store-part-1-325h</link>
      <guid>https://forem.com/pozadkey/publishing-flutter-app-to-google-play-store-part-1-325h</guid>
      <description>&lt;p&gt;Publishing your Flutter app to the Google Play Store might seem intimidating, but the process is actually quite straightforward! As a Flutter developer aiming to create an Android app for widespread use, understanding how to publish your Flutter application on the Google Play Store is crucial. In just a few steps, you can make your app available for download to millions of Android users worldwide.&lt;/p&gt;

&lt;p&gt;This tutorial is divided into two parts. The first part provides a step-by-step guide on preparing your app for production release. The second part explains the process of publishing your production-ready app on the Google Play Store. If you're already familiar with preparing your app for production release and are eager to learn about publishing on the Google Play Store, you can skip ahead to &lt;strong&gt;&lt;em&gt;&lt;a href="https://dev.to/pozadkey/publishing-flutter-app-to-google-play-store-part-2-nkh"&gt;Part 2&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt; of this series.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Let’s get started!&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F971xixwikcl6a3a81ge2.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F971xixwikcl6a3a81ge2.gif" alt="Drum roll" width="384" height="384"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 1: Change the App Name
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to the folder:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;android/app/src/main/AndroidManifest.xml&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Find the &lt;strong&gt;&lt;code&gt;android:label&lt;/code&gt;&lt;/strong&gt; attribute and change its value to the desired name for your app.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Tip&lt;/strong&gt;: You can also add necessary permissions required by your app. For instance, to grant internet access, add:&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;uses-permission android:name="android.permission.INTERNET" /&amp;gt;&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Step 2: Change the App Icon:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;In your &lt;strong&gt;&lt;code&gt;pubspec.yaml&lt;/code&gt;&lt;/strong&gt; file, add the &lt;strong&gt;&lt;code&gt;flutter_launcher_icons&lt;/code&gt;&lt;/strong&gt; package to your &lt;strong&gt;&lt;code&gt;dev_dependencies&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add the following options below &lt;strong&gt;&lt;code&gt;dev_dependencies&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;flutter_icons&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;android&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;ios&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;image_path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;assets/icon/icon.png"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;code&gt;image_path&lt;/code&gt;&lt;/strong&gt; refers to the path where your app icon is located.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Run this command to generate your app icons:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flutter pub run flutter_launcher_icons:main 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Now run your app to see the changes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Step 3: Add a Splash Screen
&lt;/h3&gt;

&lt;p&gt;A splash screen, also known as a launch screen, start screen, or boot screen, is a graphical control element containing the image, logo, and current software version. &lt;strong&gt;It's the first screen of the app that displays while the application is loading&lt;/strong&gt;. For a detailed tutorial on &lt;strong&gt;&lt;em&gt;&lt;a href="https://www.geeksforgeeks.org/splash-screen-in-flutter/amp/" rel="noopener noreferrer"&gt;creating a splash screen for your Flutter app&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;, you can refer to this resource.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 4: Sign the App
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Create a &lt;strong&gt;&lt;code&gt;keystore&lt;/code&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;A &lt;strong&gt;&lt;code&gt;keystore&lt;/code&gt;&lt;/strong&gt; is the unique signature used for signing your app.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Open your &lt;strong&gt;&lt;code&gt;terminal&lt;/code&gt;&lt;/strong&gt; and paste the following commands:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;On Mac/Linux:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;keytool -genkey -v -keystore ~/upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;On Windows:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;keytool -genkey -v -keystore %userprofile%\upload-keystore.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias upload
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;In case you encounter the error:&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;Operation couldn't be completed. Unable to locate Java Runtime.&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Run &lt;strong&gt;&lt;code&gt;flutter doctor -v&lt;/code&gt;&lt;/strong&gt; and copy the path after &lt;strong&gt;&lt;code&gt;Java binary at&lt;/code&gt;&lt;/strong&gt;. Replace &lt;strong&gt;&lt;code&gt;java&lt;/code&gt;&lt;/strong&gt; with &lt;strong&gt;&lt;code&gt;keytool&lt;/code&gt;&lt;/strong&gt; in the command [add &lt;strong&gt;&lt;code&gt;\&lt;/code&gt;&lt;/strong&gt; for &lt;strong&gt;Mac&lt;/strong&gt; and &lt;strong&gt;&lt;code&gt;"&lt;/code&gt;&lt;/strong&gt; for &lt;strong&gt;Windows&lt;/strong&gt;, and remove any spaces]. You should have something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/Applications/Android\ Studio.app/Contents/jbr/Contents/Home/bin/keytool -genkey -v -keystore ~/upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Your &lt;strong&gt;&lt;code&gt;keystore&lt;/code&gt;&lt;/strong&gt; has been successfully created, and the file path is displayed in the &lt;strong&gt;&lt;code&gt;terminal&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a &lt;strong&gt;&lt;code&gt;key.properties&lt;/code&gt;&lt;/strong&gt; file in the &lt;strong&gt;&lt;code&gt;android&lt;/code&gt;&lt;/strong&gt; folder.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add the following lines of code:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;storePassword=&amp;lt;password from keystore file&amp;gt;
keyPassword=&amp;lt;password from keystore file&amp;gt;
keyAlias=upload
storeFile=&amp;lt;location of the keystore file, e.g., /Users/&amp;lt;user name&amp;gt;/upload-keystore.jks&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Make sure to keep them private. Avoid sharing them on public source control platforms.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Open &lt;strong&gt;&lt;code&gt;android/app/build.gradle&lt;/code&gt;&lt;/strong&gt; and paste the following lines above the &lt;strong&gt;&lt;code&gt;android {…}&lt;/code&gt;&lt;/strong&gt; block:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
  keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Scroll down and replace the existing &lt;strong&gt;&lt;code&gt;buildType {…}&lt;/code&gt;&lt;/strong&gt; block with:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;signingConfigs {
     release {
         keyAlias keystoreProperties['keyAlias']
         keyPassword keystoreProperties['keyPassword']
         storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
         storePassword keystoreProperties['storePassword']
     }
 }
 buildTypes {
     release {
         signingConfig signingConfigs.release
     }
 }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;In the &lt;strong&gt;&lt;code&gt;defaultConfig {…}&lt;/code&gt;&lt;/strong&gt; section, change the value of &lt;strong&gt;&lt;code&gt;applicationId&lt;/code&gt;&lt;/strong&gt; to your preferred &lt;strong&gt;&lt;code&gt;Id&lt;/code&gt;&lt;/strong&gt; for your app. This unique &lt;strong&gt;&lt;code&gt;Id&lt;/code&gt;&lt;/strong&gt; is used to identify your app on the Google Play Store. For example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;applicationId "com.example.my_android_app"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 5: Create an Android App Bundle
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Run &lt;strong&gt;&lt;code&gt;flutter clean&lt;/code&gt;&lt;/strong&gt; to clear the cache and previous builds.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To generate your &lt;strong&gt;&lt;code&gt;.aab&lt;/code&gt;&lt;/strong&gt; bundle, run the following command:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flutter build appbundle
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The &lt;strong&gt;&lt;code&gt;.aab&lt;/code&gt;&lt;/strong&gt; build for your app is now located at &lt;strong&gt;&lt;code&gt;build/app/outputs/bundle/release/app-release.aab&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Your app is now ready for publication via the &lt;strong&gt;&lt;em&gt;Developer Console&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this tutorial, you've learned how to prepare a Flutter app for production release. Now, you can publish your app to the Google Play Store in &lt;em&gt;&lt;strong&gt;&lt;a href="https://dev.to/pozadkey/publishing-flutter-app-to-google-play-store-part-2-nkh"&gt;Part 2&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt; of this series.&lt;/p&gt;

</description>
      <category>emptystring</category>
    </item>
  </channel>
</rss>
