linkKotlinPlugin function
void
linkKotlinPlugin(})
Implementation
void linkKotlinPlugin(String pluginName, List<Map<String, String>> modules, {String baseDir = '.'}) {
final kotlinDir = Directory(p.join(baseDir, 'android', 'src', 'main', 'kotlin'));
if (!kotlinDir.existsSync()) return;
final pluginFiles = kotlinDir.listSync(recursive: true).whereType<File>().where((f) => f.path.endsWith('Plugin.kt')).toList();
if (pluginFiles.isEmpty) return;
final pluginFile = pluginFiles.first;
var content = pluginFile.readAsStringSync();
bool modified = false;
for (final m in modules) {
final name = m['module']!;
final reg = '${name}JniBridge';
final impl = name.endsWith('Module') ? '${name}Impl' : '${name}Impl';
if (!content.contains('$reg.register')) {
final match = RegExp(r'\w+JniBridge\.register\(.*?\)\)').allMatches(content);
if (match.isNotEmpty) {
content = content.replaceFirst(match.last.group(0)!, '${match.last.group(0)!}\n $reg.register($impl())');
modified = true;
} else {
content = content.replaceFirst('override fun onAttachedToEngine(binding: FlutterPlugin.FlutterPluginBinding) {',
'override fun onAttachedToEngine(binding: FlutterPlugin.FlutterPluginBinding) {\n $reg.register($impl())');
modified = true;
}
}
}
if (modified) pluginFile.writeAsStringSync(content);
}