Flutter Android client for Mazayada - the Algerian national digital platform for public auctions and leases
# Mazayada — Android app
Flutter client for **مزايدة**, the Algerian national digital platform for public
auctions and leases. It consumes the existing Laravel mobile API (`/api/v1`,
documented at ).
Android only — the deliverable is an APK.
## Running
```bash
flutter pub get
# Against production (the default).
flutter run
# Against a local Laravel server. 10.0.2.2 is the host machine from inside the
# Android emulator; use your LAN IP for a physical device.
flutter run --dart-define=BASE_URL=
10.0.2.2
```
## Building the APK
```bash
flutter build apk --release
# → build/app/outputs/flutter-apk/app-release.apk
# Smaller per-architecture APKs.
flutter build apk --release --split-per-abi
```
The release build is currently signed with the **debug** keystore
(`android/app/build.gradle.kts`). Replace this with a real upload key before
distributing.
## Tests
```bash
flutter analyze # must be clean
flutter test # envelope, money, i18n parity, token refresh
```
`test/i18n_parity_test.dart` is the client-side counterpart of the platform's
`LocalizationTest`: it fails if the three locales drift out of parity.
## Architecture
Feature-first, `Riverpod 3 + Dio + GoRouter`, no code generation.
```
lib/
core/ config · network · storage · router · theme · i18n · widgets
features/
auth/ auctions/ payments/ kyc/ commercial_register/ dashboard/
my_auctions/ documents/ appeals/ reports/ notifications/ profile/
geo/ shell/
data/ models + repository (HTTP)
domain/ Riverpod providers / controllers
presentation/ screens + widgets
```
### Things worth knowing before changing this code
**The envelope.** Every API response is `{data, message, meta}`; lists put page
info in `meta.pagination`. `core/network/envelope.dart` is the only place that
knows this. The one exception is the geo reference endpoints
(`/wilayas`, `/wilayas/{id}/communes`), which return a **bare array** with raw
`name_ar`/`name_fr` — they are still declared i …