| j / k | Scroll down / up |
| gg | Scroll to top |
| G | Scroll to bottom |
| ⌘K / / | Open search |
| ? | Show this help |
| Esc | Close search / help |
| n / N | Next / previous section |
| h | Go to landing |
| d | Go to docs |
| : | Command mode — type section name |
Press ? or Esc to close
Clone, install, run. Environment is injected at compile time — there is no committed .env.
| Tool | Version |
|---|---|
| Flutter SDK | 3.11+ |
| Dart | bundled with Flutter |
| Xcode / Android Studio | latest stable |
# Install dependencies
flutter pub get
# Run on a connected device / simulator
flutter run --dart-define=BASE_URL=https://api.example.com
flutter run --dart-define-from-file=env/dev.json Base URL and environment name come from AppConstants via String.fromEnvironment. Without a define, it falls back to a safe default.
class AppConstants {
static const baseUrl = String.fromEnvironment(
'BASE_URL',
defaultValue: 'https://api.example.com',
);
}
class AppConfig {
static const env = String.fromEnvironment('ENV', defaultValue: 'development');
static bool get isDev => env == 'development';
} main() calls bootstrap() once. It initializes Firebase, registers every feature's DI, and then runs the app. There is no lazy per-route registration — all dependencies are wired at startup.
Future<void> main() async {
await bootstrap();
runApp(const MyApp());
}