A comprehensive Flutter chat application built while learning mobile development. This project follows along with tutorials and serves as a hands-on learning experience for building real-time chat applications with Flutter.
- 🚀 Getting Started
- 📁 Project Structure
- 🗺️ Development Roadmap
- 📝 Documentation
- 🎉 Current Progress
- 👤 Author
flutter-chat-app-learning - A step-by-step Flutter chat application project designed for learning mobile development. This repository documents the entire journey of building a production-ready chat app, including UI/UX design, real-time messaging, authentication, and backend integration.
- Learn Flutter framework fundamentals and best practices
- Build a fully functional chat application
- Understand state management in Flutter
- Implement real-time messaging features
- Learn backend integration (Firebase/Supabase)
- Practice clean architecture and code organization
- Document the learning process for future reference
- Flutter SDK (3.24.0 or higher)
- Dart SDK (3.0.0 or higher)
- Android Studio / VS Code with Flutter extensions
- Android SDK with the following components:
- Android SDK Platform 34 (or latest)
- Android SDK Build-Tools 34.0.0
- Android SDK Command-line Tools
- Android SDK Platform-Tools
- iOS Simulator (for macOS) or Android Emulator
- Git
- Java 17 (for Android builds)
- Install Android Studio
- Open Android Studio → Settings → Languages & Frameworks → Android SDK
- Install the required SDK components listed above
- Android Studio automatically sets up
ANDROID_HOME
# Create SDK directory
mkdir -p ~/Android/Sdk
# Download command-line tools
cd ~/Android/Sdk
wget https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip -O cmdline-tools.zip
unzip cmdline-tools.zip
mkdir -p cmdline-tools/latest
mv cmdline-tools/bin cmdline-tools/lib cmdline-tools/NOTICE.txt cmdline-tools/source.properties cmdline-tools/latest/
rm cmdline-tools.zip
# Accept licenses
yes | ~/Android/Sdk/cmdline-tools/latest/bin/sdkmanager --licenses
# Install required components
~/Android/Sdk/cmdline-tools/latest/bin/sdkmanager "platform-tools" "platforms;android-34" "build-tools;34.0.0"Add to your shell profile (~/.bashrc, ~/.zshrc, or equivalent):
export ANDROID_HOME=$HOME/Android/Sdk
export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin
export PATH=$PATH:$ANDROID_HOME/platform-toolsThen reload: source ~/.bashrc
flutter doctor -vAll Android toolchain checks should pass ✓
- Clone the repository:
git clone https://github.com/dev-personal-projects/flutter-chat-app-learning.git
cd flutter-chat-app-learning- Install dependencies:
flutter pub get- Run the app:
flutter runFlutter automatically generates android/local.properties with your SDK path. If you get this error:
- Ensure
ANDROID_HOMEenvironment variable is set - Or run
flutter config --android-sdk /path/to/your/Android/Sdk - Run
flutter clean && flutter pub get
The Android Gradle Plugin may download the NDK automatically. If downloads fail:
# Manually install NDK (if needed)
cd /tmp
wget https://dl.google.com/android/repository/android-ndk-r27-linux.zip -O ndk.zip
unzip ndk.zip
mv android-ndk-r27 $ANDROID_HOME/ndk/27.0.12077973
rm ndk.zip# Clean build artifacts
flutter clean
cd android && rm -rf .gradle build
cd ..
flutter pub get
flutter runThis project is built alongside:
- Mitch Koko - YouTube tutorials and mobile development guidance
- Flutter official documentation
- Community best practices
📖 For a complete list of resources, see docs/RESOURCES.md
lib/
├── main.dart # App entry point
├── constant/ # Design system constants
│ ├── app_colors.dart # Color palette (light/dark mode)
│ └── app_typography.dart # Typography system
├── utils/ # Utility functions
│ ├── theme_config.dart # Theme configuration (light/dark)
│ ├── theme_provider.dart # Theme state management
│ └── theme_helper.dart # Theme helper utilities
├── pages/ # App screens
│ ├── splash_page.dart # WhatsApp-style splash screen
│ ├── phone_number_page.dart # Phone number input for auth
│ ├── otp_verification_page.dart # OTP verification screen
│ ├── home_page.dart # Main home screen
│ ├── chat_page.dart # Chat screen (placeholder)
│ └── settings_page.dart # Settings screen
├── components/ # Reusable UI components
│ └── whatsapp_logo.dart # Theme-aware WhatsApp logo
└── services/ # Business logic & services
└── chat/ # Chat services
└── chat_service.dart # Chat service (stub for future)
android/
├── app/
│ └── build.gradle.kts # App-level build configuration
├── build.gradle.kts # Project-level build configuration
├── settings.gradle.kts # Gradle settings with Flutter SDK
├── gradle.properties # Gradle properties
└── local.properties # Local SDK paths (gitignored)
- Project setup
- Basic Flutter structure
- UI/UX design planning
- Complete theming system (light/dark mode)
- Design system constants (colors, typography)
- Splash screen implementation
- WhatsApp-style branding
- Firebase Core & Auth integration
- WhatsApp-style phone number input page
- OTP verification page with auto-focus
- Country picker for phone codes
- User profile management (planned)
- Splash screen with branding
- Home page structure
- Navigation drawer
- Chat list screen
- Individual chat screen
- Message input & sending
- Real-time message updates
- Image sharing
- File attachments
- Push notifications
- Online/offline status
- Message read receipts
- Performance optimization
- Code quality improvements (KISS principles)
- Theme system implementation
- Testing
- Documentation
- Framework: Flutter 3.24.0+
- Language: Dart 3.0.0+
- State Management: Provider (theme management)
- Theming: Material Design 3 with custom color system
- Backend: Firebase
- Authentication: Firebase Auth (Phone/OTP)
- Build Tools:
- Gradle 8.14
- Android Gradle Plugin 8.11.1
- Kotlin 2.2.20
- Java 17
This project includes comprehensive documentation to track the learning journey:
- Learning Notes - Key concepts, insights, and learnings throughout development
- Challenges & Solutions - Problems faced during development and how they were resolved
- Resources - Curated list of helpful tutorials, articles, and community resources
- Project Suggestions - Best practices and suggestions for project success
- Repository Setup Guide - Complete guide for GitHub repository setup and configuration
- CodeQL Workflow - Documentation for security analysis workflow
Each major feature includes:
- Code comments explaining the implementation
- Commit messages describing changes
- Progress notes in this README
- Learning insights and challenges faced
This is a learning project. Feel free to:
- Open issues for bugs or questions
- Suggest improvements
- Share learning resources
- Fork and experiment
- Fork and clone the repository
- Install prerequisites (see Getting Started)
- Set up Android SDK following the instructions above
- Run
flutter doctorto verify your setup - Run the app with
flutter run
The following files are gitignored and auto-generated locally:
| File | Purpose | Generated By |
|---|---|---|
android/local.properties |
SDK paths | Flutter |
android/.gradle/ |
Gradle cache | Gradle |
build/ |
Build artifacts | Flutter |
.dart_tool/ |
Dart tools | Dart |
Flutter automatically detects your Android SDK from ANDROID_HOME environment variable or Android Studio installation.
This project is for educational purposes.
Collins Munene
- 🌐 GitHub: @cm-collins
- 📧 Email: dev-collins@outlook.com
- 🐦 X (Twitter): @collins63760613
- 💼 LinkedIn: Collins Munene
About: DevOps & SRE Engineer • Software Engineer • Cloud Architect • Mobile Developer
Built as a learning project while following Flutter development tutorials with Mitch Koko.
- Mitch Koko for excellent Flutter tutorials
- Flutter community for resources and support
- All contributors to Flutter open-source packages
Status: 🚧 In Development | Last Updated: December 2025
The app now features a complete theming system with:
- Light Mode: Clean white backgrounds with dark text
- Dark Mode: Dark blue-grey backgrounds with light text
- Automatic Detection: Follows system theme preference
- Manual Toggle: Users can switch themes manually
- Persistence: Theme preference is saved and restored
App Launch
↓
SplashPage (2.5 seconds)
- WhatsApp logo
- "from FACEBOOK" branding
↓
PhoneNumberPage
- Country picker
- Phone number input
↓
OTPVerificationPage
- 6-digit OTP input
- Auto-focus between fields
- Firebase phone authentication
↓
HomePage
- Main chat interface
- Navigation drawer
- Settings access
Theming & Design System:
- ✅ Complete light and dark mode theme system
- ✅ Material Design 3 compliant theming
- ✅ Color palette from Figma design system (Primary, Secondary, Neutral, Danger)
- ✅ Comprehensive typography system
- ✅ Theme persistence with SharedPreferences
- ✅ System theme detection
- ✅ Theme switching functionality
UI/UX:
- ✅ WhatsApp-style splash screen with logo and branding
- ✅ Theme-aware WhatsApp logo component
- ✅ Splash screen navigation flow
- ✅ Home page structure
- ✅ Settings page structure
- ✅ Navigation drawer
Code Quality:
- ✅ Clean codebase following KISS principles
- ✅ Improved component structure
- ✅ Clean project organization
- ✅ Kotlin DSL for Gradle build scripts
Android Configuration:
- ✅ App name configured ("WhatsApp Clone")
- ✅ App icon generation setup
- ✅ Clean Android build configuration
- ✅ Kotlin DSL build scripts (
.gradle.kts) - ✅ Java 17 compatibility
- ✅ Android SDK 34 target
- ✅ Gradle 8.14 with Android Gradle Plugin 8.11.1
- Chat list screen implementation
- Individual chat screen
- Real-time messaging with Firebase
- Complete OTP verification integration
- Implement chat list screen
- Add real-time messaging
- User profile management
- Push notifications
- Message read receipts