AllFlag turns a smartphone into a digital flag. Search for a country in portrait, select it, then rotate horizontally to display its flag without cropping or distortion. Rotate back to choose another country.
Quick Flag supports Android portrait fallback when landscape is refused. Constrained rows provide more readable names, with localized discovery/recovery copy and stronger automated accessibility checks. See release readiness and physical QA.
See visual identity and asset maintenance for tokens and screenshots.
Immutable FlagItem and FlagId models and an asynchronous FlagCatalog boundary serve search, selection, Favorites, Recent, Quick Flag and Flag Mode. CountryFlagCatalog adapts the existing CountryRepository and all 195 assets and localized names. Country-only metadata stays behind that provider boundary. FlagPreferencesStore separates persistence from UI; SharedPreferencesFlagStore uses one versioned JSON snapshot with automatic legacy ISO migration. No state-management framework or new runtime dependency is introduced.
lib/
main.dart Composition root
app.dart Theme and application
domain/ Models and repository contract
data/local_country_repository.dart
data/shared_preferences_flag_store.dart
ui/home_screen.dart Search, selection and orientation
ui/flag_screen.dart Proportional fullscreen image
assets/data/countries.json Offline 195-country metadata
assets/flags/ PNGs and license notice
docs/COUNTRY_CATALOG.md Scope and maintenance
docs/flag-assets.json Asset URLs, dimensions and checksums
test/ Domain, assets and widget behavior
tool/update_country_catalog.ps1 Explicit development-time refresh
android/ Android host and existing signing pipeline
ios/ iOS host
See catalog documentation and flag license notice. A future remote repository can implement the same domain contract; no remote source is implemented now. See Favorites and Recent persistence for storage format, ordering, error handling and test coverage.
Use Flutter 3.47.2 stable / Dart 3.13.2 (or a compatible later toolchain). Install the Android SDK and connect a device or start an emulator:
flutter pub get
flutter run
dart format lib test
flutter analyze
flutter test
flutter build appbundle --release
For iOS, macOS/Xcode and signing setup are required. Android release signing uses the existing private configuration documented in the release guide. Do not commit signing credentials. The permanent package is com.allflag.allflag. v0.2.0 Internal Testing distribution was confirmed by the owner, as was v0.4.0. v0.9.0 is not uploaded or tagged by this task.