Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 41 additions & 7 deletions lib/platform_file_editors/linux_platform_file_editor.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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'],
);

Expand Down Expand Up @@ -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<String?>, the bundle ID if found, null otherwise.
@override
Future<String?> 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 = "(.*?)"')
Expand Down Expand Up @@ -98,25 +115,42 @@ 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.
///
/// Returns: Future<String?>, a success message indicating the change in bundle ID.
@override
Future<String?> 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,
Expand Down