createEnvCode function
void
createEnvCode()
Implementation
void createEnvCode() {
// Create env.dart in lib/core/config
final envFile = File('lib/core/config/env.dart');
if (!envFile.existsSync()) {
envFile.writeAsStringSync('''
/// Environment configuration variables
import 'dart:io';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:package_info_plus/package_info_plus.dart';
enum AppEnv { staging, production }
class Env {
static bool isProduction = false;
static AppEnv current = AppEnv.staging;
/// Get environment variables safely
static String get(String key, {String fallback = ''}) {
return dotenv.env[key] ?? fallback;
}
/// Shortcut for BASE_URL
static String get baseURL => get('BASE_URL');
/// Load environment based on package name & platform
static Future<void> loadEnvironment() async {
final packageInfo = await PackageInfo.fromPlatform();
final packageName = packageInfo.packageName;
// Determine environment based on platform and package name
if (Platform.isAndroid) {
current = _getAndroidEnvironment(packageName);
} else if (Platform.isIOS) {
current = _getIOSEnvironment(packageName);
} else {
current = AppEnv.staging; // fallback for unsupported platforms
}
isProduction = current == AppEnv.production;
final envFile = _getEnvFile();
// Set production flag and load appropriate .env file
try {
await dotenv.load(fileName: envFile);
} catch (e) {
print('⚠️ Failed to load file, using defaults');
}
}
static AppEnv _getAndroidEnvironment(String packageName) {
switch (packageName) {
case 'com.example.android':
return AppEnv.production;
case 'com.example.android.stg':
return AppEnv.staging;
default:
return AppEnv.staging;
}
}
/// Map of Android package → environment
static final _envMapAndroid = {
'com.example.android': AppEnv.production,
'com.example.android.stg': AppEnv.staging,
'com.example.android.dev': AppEnv.dev,
};
/// Map of iOS package → environment
static final _envMapIOS = {
'com.example.ios': AppEnv.production,
'com.example.ios.stg': AppEnv.staging,
'com.example.ios.dev': AppEnv.dev,
};
static AppEnv _getAndroidEnvironment(String packageName) {
return _envMapAndroid[packageName] ?? AppEnv.staging;
}
static AppEnv _getIOSEnvironment(String packageName) {
return _envMapIOS[packageName] ?? AppEnv.staging;
}
/// Pick correct env file
static String _getEnvFile() {
switch (current) {
case AppEnv.production:
return '.env.production';
case AppEnv.dev:
return '.env.dev';
case AppEnv.staging:
default:
return '.env.staging';
}
}
}
''');
}
}