Mobile App Development May 22, 2026

How to Build a Flutter App for Android in Uganda — From Setup to Play Store

By Jjuuko Ronald

How to Build a Flutter App for Android in Uganda — From Setup to Play Store

Mobile app development is one of the most in-demand skills in Uganda right now. With over 80% of internet users in Uganda accessing the web via smartphones, businesses are actively looking for developers who can build Android apps that work well on affordable devices and low-bandwidth connections. Flutter, Google's cross-platform framework, is my go-to tool for this — and this guide is everything you need to get from zero to a published app on Google Play Store.

I have been building Flutter apps since 2022, with clients in Kampala, and this is the guide I wish I had when I started.

Why Flutter for Uganda?

Flutter compiles to native ARM code, which means apps run fast even on entry-level Android devices — the kind most people in Uganda and East Africa use. A single codebase covers Android and iOS, cutting development time in half. The widget library is rich and offline-first patterns are well-supported, which matters when your users are on Airtel or MTN data that drops frequently.

AD

Step 1: Install Flutter on Windows

Most developers in Uganda work on Windows. Here is the exact setup:

  1. Download the Flutter SDK from flutter.dev/docs/get-started/install/windows
  2. Extract to C:\flutter (avoid paths with spaces)
  3. Add C:\flutter\bin to your Windows PATH environment variable
  4. Run flutter doctor in Command Prompt and fix each ❌ it shows

For Linux (Ubuntu, which I use on my development machine):

sudo snap install flutter --classic
flutter doctor

Step 2: Install Android Studio

Download Android Studio from developer.android.com/studio. During installation, make sure the Android SDK, Android SDK Platform-Tools, and Android Virtual Device components are selected.

AD

After installation, run:

flutter doctor --android-licenses

Accept all licenses. This step trips up many beginners in Uganda — do not skip it.

Step 3: Create Your First Flutter Project

flutter create my_ugandan_app
cd my_ugandan_app
flutter run

This launches the default counter app on your emulator or connected Android phone. If you are using a physical device (recommended — it is faster than emulators on most Ugandan developer hardware), enable USB Debugging in your phone's Developer Options first.

AD

Step 4: Understand the Project Structure

The important folders:

  • lib/ — all your Dart code lives here. main.dart is the entry point.
  • android/ — Android-specific config. You will touch this for permissions and Play Store metadata.
  • pubspec.yaml — your dependencies file. Like composer.json for PHP.
  • assets/ — images, fonts, and other static files.

Step 5: Build a Simple Home Screen

Replace the contents of lib/main.dart with a clean starting point:

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'My App',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: const Color(0xFF1A56DB)),
        useMaterial3: true,
      ),
      home: const HomeScreen(),
    );
  }
}

class HomeScreen extends StatelessWidget {
  const HomeScreen({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Welcome'),
        backgroundColor: Theme.of(context).colorScheme.primary,
        foregroundColor: Colors.white,
      ),
      body: const Center(
        child: Text(
          'Hello, Uganda!',
          style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
        ),
      ),
    );
  }
}

Step 6: Key Packages Every Ugandan App Needs

Add these to pubspec.yaml under dependencies:

AD
dependencies:
  flutter:
    sdk: flutter
  http: ^1.2.0           # API calls to your Laravel backend
  provider: ^6.1.0       # State management
  shared_preferences: ^2.2.0  # Local storage (remember login sessions)
  flutter_secure_storage: ^9.0.0  # Store tokens securely
  cached_network_image: ^3.3.0    # Images with offline caching
  connectivity_plus: ^6.0.0       # Detect network status (critical for Uganda)
  flutter_svg: ^2.0.0             # SVG support

Run flutter pub get to install them.

Step 7: Handle Offline Gracefully

Network reliability in Uganda means your app must handle offline states gracefully. Add a connectivity check to your app:

import 'package:connectivity_plus/connectivity_plus.dart';

Future<bool> isConnected() async {
  final result = await Connectivity().checkConnectivity();
  return result != ConnectivityResult.none;
}

// Use it before API calls:
if (!await isConnected()) {
  ScaffoldMessenger.of(context).showSnackBar(
    const SnackBar(content: Text('No internet connection. Please check your data.')),
  );
  return;
}

Step 8: Connect to Your Laravel Backend

Create lib/services/api_service.dart:

AD
import 'package:http/http.dart' as http;
import 'dart:convert';

class ApiService {
  static const String baseUrl = 'https://yourlaravelapp.com/api';

  static Future<Map<String, dynamic>> get(String endpoint, String token) async {
    final response = await http.get(
      Uri.parse('$baseUrl/$endpoint'),
      headers: {
        'Authorization': 'Bearer $token',
        'Accept': 'application/json',
      },
    );

    if (response.statusCode == 200) {
      return jsonDecode(response.body);
    } else {
      throw Exception('API error: ${response.statusCode}');
    }
  }
}

Step 9: Build the Release APK

Before building for release, update your app details in android/app/build.gradle:

android {
    defaultConfig {
        applicationId "com.yourname.yourapp"
        minSdk 21
        targetSdk 34
        versionCode 1
        versionName "1.0.0"
    }
}

Generate a signing key (run this once):

keytool -genkey -v -keystore ~/my-app-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-key

Then build:

AD
flutter build appbundle

This creates an .aab file in build/app/outputs/bundle/release/ — that is what you upload to Google Play.

Step 10: Publish to Google Play Store

  1. Go to play.google.com/console and create a developer account. The one-time fee is $25 USD (about UGX 93,000). Pay via Visa card or Google Pay.
  2. Create a new app, fill in the store listing (title, description, screenshots)
  3. Upload your .aab file under Production → Releases
  4. Complete the content rating questionnaire
  5. Submit for review — Google reviews typically take 1–3 days

Common Issues for Ugandan Developers

  • Play Console payment: If your Ugandan Visa card is declined, try a Equity Bank or Stanbic Bank Visa. Some developers use a relative's card abroad.
  • Slow emulator: Enable HAXM acceleration in Android Studio, or just use a physical phone — much faster on typical Uganda developer hardware.
  • Build takes too long: Add org.gradle.daemon=true and org.gradle.parallel=true to android/gradle.properties.

Next Steps

Once your app is live, explore adding Firebase for push notifications, Flutter's geolocator package for location features, and MoMo/Airtel Money payments. These are the most requested features by Ugandan business clients.

Need help building a Flutter app for your business or client in Uganda? Get in touch — I build production Flutter apps for clients across Kampala and East Africa.

AD
AD

Let's Build Something Amazing

Have a project in mind? I'm available for freelance work and collaborations.

Start a conversation
History

Kclich

Ronnie's AI assistant