SakkolDev
All projects
2025 · Mobile Developer

Wizard Shop Flutter E-Commerce App

Delivered a maintainable, testable mobile app across iOS and Android with zero secret leakage and isolated environment configurations.

FlutterDartBLoCDioREST API

Business Context

Mobile e-commerce apps often become monolithic and hard to test due to tight coupling between UI, business logic, and network layers — especially across multiple environments (dev, staging, production).

The Solution

A Flutter application built using Clean Architecture and BLoC, strictly decoupling UI, state management, and domain logic for maximum testability.

  • 4 isolated build environments (dev/uat/demo/prod) using compile-time Dart defines
  • Resilient Dio networking layer with automatic retries and structured error normalization
  • BLoC state management with strict separation of UI, state, and domain
  • RESTful API integration with domain error normalization

Architecture Overview

The app follows Clean Architecture with strict layer separation. BLoC manages all UI state transitions reactively. Dio interceptors handle token refresh, retries, and error normalization globally, preventing boilerplate across screens.

Flutter UI (Presentation Layer)
BLoC (State Management)
Dio HTTP Client (Network Layer)
Use Cases (Domain Layer)
Repository Pattern (Data Layer)
Dart Defines (Multi-Environment Config)

Tech Stack & Reasoning

TechnologyWhy it was used
FlutterSingle codebase compiling to native iOS and Android applications.
BLoCReactive state management with predictable, testable state transitions.
DioHTTP client with interceptor support for retry logic, logging, and error normalization.
Dart DefinesCompile-time environment injection ensuring zero secret leakage across environments.

Key Features

  • 4 fully isolated build environments (dev/uat/demo/prod)
  • Dio interceptors with automatic retry and domain error normalization
  • BLoC-driven reactive UI with predictable state management
  • Clean Architecture enforcing strict layer separation

Engineering Highlights

Architected using Clean Architecture to strictly decouple UI, state, and domain logic for maximum testability.

Engineered a resilient Dio networking layer with automatic retries, structured logging, and error normalization.

Configured 4 isolated build environments using compile-time Dart defines to ensure zero secret leakage.

Challenges & Solutions

Challenge

Managing consistent API error handling across dozens of screens without code duplication.

Solution

Centralized all error normalization inside Dio interceptors at the data layer.

Impact: Eliminated duplicated error handling across all features and ensured consistent UX for API failures.

Performance Metrics

4 (dev/uat/demo/prod)Environments
Clean + BLoCArchitecture

What I Learned

  • Enforcing Clean Architecture boundaries in a Flutter project
  • Configuring multi-environment builds with Dart compile-time defines
  • Building resilient, interceptor-based networking layers with Dio

System Interface

Wizard Shop Flutter E-Commerce App — feature view