addMetaDataInManifest function

void addMetaDataInManifest({
  1. required String metaName,
  2. required String metaValue,
})

Implementation

void addMetaDataInManifest({required String metaName, required String metaValue}) async {
  if (metaName.isEmpty && metaValue.isEmpty) return;

  final file = File('android/app/src/main/AndroidManifest.xml');
  final document = XmlDocument.parse(await file.readAsString());

  final application = document.getElement('manifest')?.getElement('application');

  if (application == null) {
    print('Application tag not found');
    return;
  }

  final exists = application
      .findElements('meta-data')
      .any((element) => element.getAttribute('android:name') == metaName);

  if (exists) {
    return;
  }

  final builder = XmlBuilder();
  builder.element('meta-data', nest: () {
    builder.attribute('android:name', metaName);
    builder.attribute('android:value', metaValue);
  });

  application.children.add(builder.buildFragment());

  await file.writeAsString(document.toXmlString(pretty: true));
}