addEnvFileToAssets function

Future<bool> addEnvFileToAssets(
  1. String envPath, {
  2. String pubspecPath = 'pubspec.yaml',
})

Write env file to pubspec assets

Implementation

Future<bool> addEnvFileToAssets(
  String envPath, {
  String pubspecPath = 'pubspec.yaml',
}) async {
  final pubSpecContents = read(pubspecPath).toParagraph();
  final pubspec = loadYaml(pubSpecContents) as YamlMap;
  final pubSpecFile = File(pubspecPath);

  final assetsEntry = '''
  assets:
    - $envPath
''';

  /// Write full flutter entry if no flutter
  final flutter = pubspec['flutter'] as YamlMap?;
  if (!pubspec.containsKey('flutter')) {
    pubSpecFile.writeAsStringSync(
      '''
$pubSpecContents

flutter:
$assetsEntry
''',
    );
    return true;
  }

  final assets = flutter?['assets'] as YamlList?;

  /// Write assets directly under flutter
  if (assets == null) {
    final newPubSpec = pubSpecContents.replaceFirst(
      RegExp(r'^flutter:.*$', multiLine: true),
      'flutter:\n$assetsEntry',
    );
    pubSpecFile.writeAsStringSync(newPubSpec);
    return true;
  }

  /// Stop if present in assets
  if (assets.contains(envPath)) return false;

  /// Add env path directly under assets
  pubSpecFile.writeAsStringSync(
    pubSpecContents.replaceFirst('assets:', assetsEntry.trim()),
  );
  return true;
}