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';
    }
  }
}

''');
  }
}