Getting Started
Conventions
Team decisions written down once. No verbal agreements, no tribal knowledge.
Colorscontext.colors.* — never AppColors.* directly
Stringscontext.l10n.t(TranslationKeys.xxx)
SpacingAppSpacing constants — never raw numbers
Tap handlingAppTap — never GestureDetector / InkWell
Loggingsl<Logger>().i/e/w() — never print()
NavigationAppRoutes enum — never hardcoded paths
JSON keyssnake_case from backend → camelCase in Dart
ScreensStatefulWidget — cubit calls in initState only
Stateinitial() factory + copyWith() always present
Data accessCheck isSuccess before accessing response.data
sam's arch — A Pragmatic Flutter Architecture