diff --git a/lib/platform_file_editors/linux_platform_file_editor.dart b/lib/platform_file_editors/linux_platform_file_editor.dart index efce405..75b6abb 100644 --- a/lib/platform_file_editors/linux_platform_file_editor.dart +++ b/lib/platform_file_editors/linux_platform_file_editor.dart @@ -19,6 +19,10 @@ class LinuxPlatformFileEditor extends AbstractPlatformFileEditor { ['linux', 'CMakeLists.txt'], ); String linuxAppCppPath = convertPath( + ['linux', 'runner', 'my_application.cc'], + ); + + final String _legacyLinuxAppCppPath = convertPath( ['linux', 'my_application.cc'], ); @@ -50,16 +54,29 @@ class LinuxPlatformFileEditor extends AbstractPlatformFileEditor { return null; } - /// Fetches the bundle ID from the Linux my_application.cc file. + /// Fetches the bundle ID from the Linux CMakeLists.txt file. /// /// Returns: Future, the bundle ID if found, null otherwise. @override Future getBundleId() async { - final filePath = linuxAppCppPath; + var filePath = linuxCMakeListsPath; var contentLineByLine = await readFileAsLineByline( filePath: filePath, platform: platform, ); + for (var i = 0; i < contentLineByLine.length; i++) { + if (contentLineByLine[i]?.contains('set(APPLICATION_ID') ?? false) { + var match = RegExp(r'set\(APPLICATION_ID "(.*?)"\)') + .firstMatch(contentLineByLine[i]!); + return match?.group(1)?.trim(); + } + } + + filePath = _legacyLinuxAppCppPath; + contentLineByLine = await readFileAsLineByline( + filePath: filePath, + platform: platform, + ); for (var i = 0; i < contentLineByLine.length; i++) { if (contentLineByLine[i]?.contains('kFlutterWindowTitle') ?? false) { var match = RegExp(r'kFlutterWindowTitle = "(.*?)"') @@ -98,7 +115,7 @@ class LinuxPlatformFileEditor extends AbstractPlatformFileEditor { return message; } - /// Sets the bundle ID in the Linux my_application.cc file. + /// Sets the bundle ID in the Linux CMakeLists.txt file. /// /// Parameters: /// - `bundleId`: The new bundle ID to be set for the application. @@ -106,17 +123,34 @@ class LinuxPlatformFileEditor extends AbstractPlatformFileEditor { /// Returns: Future, a success message indicating the change in bundle ID. @override Future setBundleId({required String bundleId}) async { - final filePath = linuxAppCppPath; + var filePath = linuxCMakeListsPath; List? contentLineByLine = await readFileAsLineByline( filePath: filePath, platform: platform, ); + var applicationIdSet = false; for (var i = 0; i < contentLineByLine.length; i++) { - if (contentLineByLine[i].contains('kFlutterWindowTitle')) { - contentLineByLine[i] = - 'const char kFlutterWindowTitle[] = \"$bundleId\";'; + if (contentLineByLine[i].contains('set(APPLICATION_ID')) { + contentLineByLine[i] = 'set(APPLICATION_ID \"$bundleId\")'; + applicationIdSet = true; + break; + } + } + + if(!applicationIdSet) { + filePath = _legacyLinuxAppCppPath; + contentLineByLine = await readFileAsLineByline( + filePath: filePath, + platform: platform, + ); + for (var i = 0; i < contentLineByLine.length; i++) { + if (contentLineByLine[i].contains('kFlutterWindowTitle')) { + contentLineByLine[i] = + 'const char kFlutterWindowTitle[] = \"$bundleId\";'; + } } } + final message = await super.setBundleId(bundleId: bundleId); await writeFile( filePath: filePath,