From f26eddba005398f1ff7edfd878f0d60d03e44346 Mon Sep 17 00:00:00 2001 From: Jamil Saadeh Date: Wed, 13 Aug 2025 18:36:14 +0300 Subject: [PATCH] Null aware elements clean-ups (#173074) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Converted more null checks to null aware elements. The analyzer had many false negatives and the regex became pretty wild to find many of them 😂 I've found more in the engine folder but I'll apply the changes in a separate PR Part of #172188 *If you had to change anything in the [flutter/tests] repo, include a link to the migration guide as per the [breaking change policy].* ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. **Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed. [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md --- dev/devicelab/lib/framework/ab.dart | 2 +- dev/devicelab/lib/framework/runner.dart | 2 +- .../lib/src/foundation/diagnostics.dart | 4 +- .../flutter/lib/src/services/autofill.dart | 2 +- .../lib/src/services/platform_views.dart | 8 ++-- .../flutter/lib/src/services/text_input.dart | 8 +--- .../lib/src/widgets/widget_inspector.dart | 7 +--- .../lib/src/common/request_data.dart | 2 +- .../flutter_tools/lib/src/android/java.dart | 2 +- .../flutter_tools/lib/src/build_info.dart | 18 ++++---- .../lib/src/build_system/build_system.dart | 2 +- .../lib/src/commands/daemon.dart | 2 +- packages/flutter_tools/lib/src/daemon.dart | 13 ++---- .../debug_adapters/flutter_adapter_args.dart | 20 ++++----- .../lib/src/drive/web_driver_service.dart | 4 +- .../lib/src/platform_plugins.dart | 42 +++++++++---------- packages/flutter_tools/lib/src/project.dart | 4 +- .../lib/src/proxied_devices/devices.dart | 2 +- .../lib/src/reporting/usage.dart | 4 +- .../lib/src/test/flutter_tester_device.dart | 2 +- .../lib/src/test/flutter_web_platform.dart | 2 +- .../flutter_tools/lib/src/test/runner.dart | 2 +- packages/flutter_tools/lib/src/version.dart | 6 +-- packages/flutter_tools/lib/src/vmservice.dart | 2 +- .../flutter_tools/lib/src/web/compile.dart | 4 +- .../lib/src/web/compiler_config.dart | 2 +- .../lib/src/windows/build_windows.dart | 2 +- .../hermetic/build_ios_test.dart | 2 +- .../coverage_collector_test.dart | 2 +- .../test/general.shard/daemon_test.dart | 2 +- .../test/test_golden_comparator_test.dart | 2 +- .../test/general.shard/version_test.dart | 2 +- packages/flutter_tools/test/src/common.dart | 2 +- packages/flutter_tools/test/src/fakes.dart | 2 +- packages/integration_test/lib/common.dart | 2 +- 35 files changed, 85 insertions(+), 101 deletions(-) diff --git a/dev/devicelab/lib/framework/ab.dart b/dev/devicelab/lib/framework/ab.dart index 5f9c2e9639f..ad20fe8bb40 100644 --- a/dev/devicelab/lib/framework/ab.dart +++ b/dev/devicelab/lib/framework/ab.dart @@ -89,7 +89,7 @@ class ABTest { kBenchmarkTypeKeyName: kBenchmarkResultsType, kBenchmarkVersionKeyName: kBenchmarkABVersion, kLocalEngineKeyName: localEngine, - if (localEngineHost != null) kLocalEngineHostKeyName: localEngineHost, + kLocalEngineHostKeyName: ?localEngineHost, kTaskNameKeyName: taskName, kRunStartKeyName: runStart.toIso8601String(), kRunEndKeyName: runEnd!.toIso8601String(), diff --git a/dev/devicelab/lib/framework/runner.dart b/dev/devicelab/lib/framework/runner.dart index ef73d6ed0ba..05d6e2a37f3 100644 --- a/dev/devicelab/lib/framework/runner.dart +++ b/dev/devicelab/lib/framework/runner.dart @@ -199,7 +199,7 @@ Future runTask( taskExecutable, ...?taskArgs, ], - environment: {if (deviceId != null) DeviceIdEnvName: deviceId}, + environment: {DeviceIdEnvName: ?deviceId}, ); bool runnerFinished = false; diff --git a/packages/flutter/lib/src/foundation/diagnostics.dart b/packages/flutter/lib/src/foundation/diagnostics.dart index 5a6158ba64e..d40371dfa0c 100644 --- a/packages/flutter/lib/src/foundation/diagnostics.dart +++ b/packages/flutter/lib/src/foundation/diagnostics.dart @@ -1647,11 +1647,11 @@ abstract class DiagnosticsNode { result = { 'description': toDescription(), 'type': runtimeType.toString(), - if (name != null) 'name': name, + 'name': ?name, if (!showSeparator) 'showSeparator': showSeparator, if (level != DiagnosticLevel.info) 'level': level.name, if (!showName) 'showName': showName, - if (emptyBodyDescription != null) 'emptyBodyDescription': emptyBodyDescription, + 'emptyBodyDescription': ?emptyBodyDescription, if (style != DiagnosticsTreeStyle.sparse) 'style': style!.name, if (allowTruncate) 'allowTruncate': allowTruncate, if (hasChildren) 'hasChildren': hasChildren, diff --git a/packages/flutter/lib/src/services/autofill.dart b/packages/flutter/lib/src/services/autofill.dart index 48a8ce831a2..8326cbe957a 100644 --- a/packages/flutter/lib/src/services/autofill.dart +++ b/packages/flutter/lib/src/services/autofill.dart @@ -733,7 +733,7 @@ class AutofillConfiguration { 'uniqueIdentifier': uniqueIdentifier, 'hints': autofillHints, 'editingValue': currentEditingValue.toJSON(), - if (hintText != null) 'hintText': hintText, + 'hintText': ?hintText, } : null; } diff --git a/packages/flutter/lib/src/services/platform_views.dart b/packages/flutter/lib/src/services/platform_views.dart index 8a24b223961..3e11eb0bd56 100644 --- a/packages/flutter/lib/src/services/platform_views.dart +++ b/packages/flutter/lib/src/services/platform_views.dart @@ -1312,11 +1312,11 @@ abstract class _AndroidViewControllerInternals { 'viewType': viewType, 'direction': AndroidViewController._getAndroidDirection(layoutDirection), if (hybrid) 'hybrid': hybrid, - if (size != null) 'width': size.width, - if (size != null) 'height': size.height, + 'width': ?size?.width, + 'height': ?size?.height, if (hybridFallback) 'hybridFallback': hybridFallback, - if (position != null) 'left': position.dx, - if (position != null) 'top': position.dy, + 'left': ?position?.dx, + 'top': ?position?.dy, }; if (creationParams != null) { final ByteData paramsByteData = creationParams.codec.encodeMessage(creationParams.data)!; diff --git a/packages/flutter/lib/src/services/text_input.dart b/packages/flutter/lib/src/services/text_input.dart index 4e8a6d2dae9..0116bfa5468 100644 --- a/packages/flutter/lib/src/services/text_input.dart +++ b/packages/flutter/lib/src/services/text_input.dart @@ -791,7 +791,7 @@ class TextInputConfiguration { 'keyboardAppearance': keyboardAppearance.toString(), 'enableIMEPersonalizedLearning': enableIMEPersonalizedLearning, 'contentCommitMimeTypes': allowedMimeTypes, - if (autofill != null) 'autofill': autofill, + 'autofill': ?autofill, 'enableDeltaModel': enableDeltaModel, 'hintLocales': hintLocales?.map((Locale locale) => locale.toLanguageTag()).toList(), }; @@ -2866,11 +2866,7 @@ sealed class IOSSystemContextMenuItemData { /// Returns json for use in method channel calls, specifically /// `ContextMenu.showSystemContextMenu`. Map get _json { - return { - 'callbackId': hashCode, - if (title != null) 'title': title, - 'type': _jsonType, - }; + return {'callbackId': hashCode, 'title': ?title, 'type': _jsonType}; } @override diff --git a/packages/flutter/lib/src/widgets/widget_inspector.dart b/packages/flutter/lib/src/widgets/widget_inspector.dart index be7394b9c7c..607f26f4031 100644 --- a/packages/flutter/lib/src/widgets/widget_inspector.dart +++ b/packages/flutter/lib/src/widgets/widget_inspector.dart @@ -4074,12 +4074,7 @@ class _Location { final String? name; Map toJsonMap() { - return { - 'file': file, - 'line': line, - 'column': column, - if (name != null) 'name': name, - }; + return {'file': file, 'line': line, 'column': column, 'name': ?name}; } @override diff --git a/packages/flutter_driver/lib/src/common/request_data.dart b/packages/flutter_driver/lib/src/common/request_data.dart index de4b972be35..89871f99b96 100644 --- a/packages/flutter_driver/lib/src/common/request_data.dart +++ b/packages/flutter_driver/lib/src/common/request_data.dart @@ -24,7 +24,7 @@ class RequestData extends Command { @override Map serialize() => - super.serialize()..addAll({if (message != null) 'message': message!}); + super.serialize()..addAll({'message': ?message}); } /// The result of the [RequestData] command. diff --git a/packages/flutter_tools/lib/src/android/java.dart b/packages/flutter_tools/lib/src/android/java.dart index 2b34b47cca1..a7410410336 100644 --- a/packages/flutter_tools/lib/src/android/java.dart +++ b/packages/flutter_tools/lib/src/android/java.dart @@ -152,7 +152,7 @@ class Java { /// This map should be used as the environment when invoking any Java-dependent /// processes, such as Gradle or Android SDK tools (avdmanager, sdkmanager, etc.) Map get environment => { - if (javaHome != null) javaHomeEnvironmentVariable: javaHome!, + javaHomeEnvironmentVariable: ?javaHome, 'PATH': _fileSystem.path.dirname(binaryPath) + _os.pathVarSeparator + diff --git a/packages/flutter_tools/lib/src/build_info.dart b/packages/flutter_tools/lib/src/build_info.dart index b94cd02ceb6..2a5d1676cb9 100644 --- a/packages/flutter_tools/lib/src/build_info.dart +++ b/packages/flutter_tools/lib/src/build_info.dart @@ -313,18 +313,18 @@ class BuildInfo { kBuildMode: mode.cliName, if (dartDefines.isNotEmpty) kDartDefines: encodeDartDefines(dartDefines), kDartObfuscation: dartObfuscation.toString(), - if (frontendServerStarterPath != null) kFrontendServerStarterPath: frontendServerStarterPath!, + kFrontendServerStarterPath: ?frontendServerStarterPath, if (extraFrontEndOptions.isNotEmpty) kExtraFrontEndOptions: extraFrontEndOptions.join(','), if (extraGenSnapshotOptions.isNotEmpty) kExtraGenSnapshotOptions: extraGenSnapshotOptions.join(','), - if (splitDebugInfoPath != null) kSplitDebugInfo: splitDebugInfoPath!, + kSplitDebugInfo: ?splitDebugInfoPath, kTrackWidgetCreation: trackWidgetCreation.toString(), kIconTreeShakerFlag: treeShakeIcons.toString(), - if (codeSizeDirectory != null) kCodeSizeDirectory: codeSizeDirectory!, + kCodeSizeDirectory: ?codeSizeDirectory, if (fileSystemRoots.isNotEmpty) kFileSystemRoots: fileSystemRoots.join(','), - if (fileSystemScheme != null) kFileSystemScheme: fileSystemScheme!, - if (buildName != null) kBuildName: buildName!, - if (buildNumber != null) kBuildNumber: buildNumber!, + kFileSystemScheme: ?fileSystemScheme, + kBuildName: ?buildName, + kBuildNumber: ?buildNumber, if (useLocalCanvasKit) kUseLocalCanvasKitFlag: useLocalCanvasKit.toString(), }; } @@ -343,14 +343,14 @@ class BuildInfo { 'EXTRA_FRONT_END_OPTIONS': extraFrontEndOptions.join(','), if (extraGenSnapshotOptions.isNotEmpty) 'EXTRA_GEN_SNAPSHOT_OPTIONS': extraGenSnapshotOptions.join(','), - if (splitDebugInfoPath != null) 'SPLIT_DEBUG_INFO': splitDebugInfoPath!, + 'SPLIT_DEBUG_INFO': ?splitDebugInfoPath, 'TRACK_WIDGET_CREATION': trackWidgetCreation.toString(), 'TREE_SHAKE_ICONS': treeShakeIcons.toString(), if (performanceMeasurementFile != null) 'PERFORMANCE_MEASUREMENT_FILE': performanceMeasurementFile!, 'PACKAGE_CONFIG': packageConfigPath, - if (codeSizeDirectory != null) 'CODE_SIZE_DIRECTORY': codeSizeDirectory!, - if (flavor != null) 'FLAVOR': flavor!, + 'CODE_SIZE_DIRECTORY': ?codeSizeDirectory, + 'FLAVOR': ?flavor, }; } diff --git a/packages/flutter_tools/lib/src/build_system/build_system.dart b/packages/flutter_tools/lib/src/build_system/build_system.dart index 7b44ee67483..0146558ea23 100644 --- a/packages/flutter_tools/lib/src/build_system/build_system.dart +++ b/packages/flutter_tools/lib/src/build_system/build_system.dart @@ -227,7 +227,7 @@ abstract class Target { 'dependencies': [for (final Target target in dependencies) target.name], 'inputs': [for (final File file in resolveInputs(environment).sources) file.path], 'outputs': [for (final File file in resolveOutputs(environment).sources) file.path], - if (key != null) 'buildKey': key, + 'buildKey': ?key, 'stamp': _findStampFile(environment).absolute.path, }; } diff --git a/packages/flutter_tools/lib/src/commands/daemon.dart b/packages/flutter_tools/lib/src/commands/daemon.dart index ba45ab2846f..d34f163b74c 100644 --- a/packages/flutter_tools/lib/src/commands/daemon.dart +++ b/packages/flutter_tools/lib/src/commands/daemon.dart @@ -1824,7 +1824,7 @@ final class MachineOutputLogger extends DelegatingLogger { final event = { 'id': eventId, 'progressId': eventType, - if (message != null) 'message': message, + 'message': ?message, 'finished': finished, }; diff --git a/packages/flutter_tools/lib/src/daemon.dart b/packages/flutter_tools/lib/src/daemon.dart index f11629a9a8b..efa0f541746 100644 --- a/packages/flutter_tools/lib/src/daemon.dart +++ b/packages/flutter_tools/lib/src/daemon.dart @@ -282,11 +282,7 @@ class DaemonConnection { final id = '${++_outgoingRequestId}'; final completer = Completer(); _outgoingRequestCompleters[id] = completer; - final data = { - 'id': id, - 'method': method, - if (params != null) 'params': params, - }; + final data = {'id': id, 'method': method, 'params': ?params}; _logger.printTrace('-> Sending to daemon, id = $id, method = $method'); _daemonStreams.send(data, binary); return completer.future; @@ -294,7 +290,7 @@ class DaemonConnection { /// Sends a response to the other end of the connection. void sendResponse(Object id, [Object? result]) { - _daemonStreams.send({'id': id, if (result != null) 'result': result}); + _daemonStreams.send({'id': id, 'result': ?result}); } /// Sends an error response to the other end of the connection. @@ -304,10 +300,7 @@ class DaemonConnection { /// Sends an event to the client. void sendEvent(String name, [Object? params, List? binary]) { - _daemonStreams.send({ - 'event': name, - if (params != null) 'params': params, - }, binary); + _daemonStreams.send({'event': name, 'params': ?params}, binary); } /// Handles the input from the stream. diff --git a/packages/flutter_tools/lib/src/debug_adapters/flutter_adapter_args.dart b/packages/flutter_tools/lib/src/debug_adapters/flutter_adapter_args.dart index ff5b3776b19..3be9e937129 100644 --- a/packages/flutter_tools/lib/src/debug_adapters/flutter_adapter_args.dart +++ b/packages/flutter_tools/lib/src/debug_adapters/flutter_adapter_args.dart @@ -81,10 +81,10 @@ class FlutterAttachRequestArguments extends DartCommonLaunchAttachRequestArgumen @override Map toJson() => { ...super.toJson(), - if (toolArgs != null) 'toolArgs': toolArgs, - if (customTool != null) 'customTool': customTool, - if (customToolReplacesArgs != null) 'customToolReplacesArgs': customToolReplacesArgs, - if (vmServiceUri != null) 'vmServiceUri': vmServiceUri, + 'toolArgs': ?toolArgs, + 'customTool': ?customTool, + 'customToolReplacesArgs': ?customToolReplacesArgs, + 'vmServiceUri': ?vmServiceUri, }; } @@ -162,11 +162,11 @@ class FlutterLaunchRequestArguments extends DartCommonLaunchAttachRequestArgumen @override Map toJson() => { ...super.toJson(), - if (noDebug != null) 'noDebug': noDebug, - if (program != null) 'program': program, - if (args != null) 'args': args, - if (toolArgs != null) 'toolArgs': toolArgs, - if (customTool != null) 'customTool': customTool, - if (customToolReplacesArgs != null) 'customToolReplacesArgs': customToolReplacesArgs, + 'noDebug': ?noDebug, + 'program': ?program, + 'args': ?args, + 'toolArgs': ?toolArgs, + 'customTool': ?customTool, + 'customToolReplacesArgs': ?customToolReplacesArgs, }; } diff --git a/packages/flutter_tools/lib/src/drive/web_driver_service.dart b/packages/flutter_tools/lib/src/drive/web_driver_service.dart index c7d878424d7..75e7e088431 100644 --- a/packages/flutter_tools/lib/src/drive/web_driver_service.dart +++ b/packages/flutter_tools/lib/src/drive/web_driver_service.dart @@ -352,8 +352,8 @@ Map getDesiredCapabilities( 'v8,blink.console,benchmark,blink,' 'blink.user_timing', }, - if (chromeBinary != null) 'binary': chromeBinary, - if (mobileEmulation != null) 'mobileEmulation': mobileEmulation, + 'binary': ?chromeBinary, + 'mobileEmulation': ?mobileEmulation, }, }, Browser.firefox => { diff --git a/packages/flutter_tools/lib/src/platform_plugins.dart b/packages/flutter_tools/lib/src/platform_plugins.dart index a7d066afea7..0dac5673cb6 100644 --- a/packages/flutter_tools/lib/src/platform_plugins.dart +++ b/packages/flutter_tools/lib/src/platform_plugins.dart @@ -166,12 +166,12 @@ class AndroidPlugin extends PluginPlatform implements NativeOrDartPlugin { Map toMap() { return { 'name': name, - if (package != null) 'package': package, - if (pluginClass != null) 'class': pluginClass, - if (dartPluginClass != null) kDartPluginClass: dartPluginClass, - if (dartFileName != null) kDartFileName: dartFileName, + 'package': ?package, + 'class': ?pluginClass, + kDartPluginClass: ?dartPluginClass, + kDartFileName: ?dartFileName, if (ffiPlugin) kFfiPlugin: true, - if (defaultPackage != null) kDefaultPackage: defaultPackage, + kDefaultPackage: ?defaultPackage, // Mustache doesn't support complex types. 'supportsEmbeddingV1': _supportedEmbeddings.contains('1'), 'supportsEmbeddingV2': _supportedEmbeddings.contains('2'), @@ -326,12 +326,12 @@ class IOSPlugin extends PluginPlatform implements NativeOrDartPlugin, DarwinPlug return { 'name': name, 'prefix': classPrefix, - if (pluginClass != null) 'class': pluginClass, - if (dartPluginClass != null) kDartPluginClass: dartPluginClass, - if (dartFileName != null) kDartFileName: dartFileName, + 'class': ?pluginClass, + kDartPluginClass: ?dartPluginClass, + kDartFileName: ?dartFileName, if (ffiPlugin) kFfiPlugin: true, if (sharedDarwinSource) kSharedDarwinSource: true, - if (defaultPackage != null) kDefaultPackage: defaultPackage, + kDefaultPackage: ?defaultPackage, }; } } @@ -413,12 +413,12 @@ class MacOSPlugin extends PluginPlatform implements NativeOrDartPlugin, DarwinPl Map toMap() { return { 'name': name, - if (pluginClass != null) 'class': pluginClass, - if (dartPluginClass != null) kDartPluginClass: dartPluginClass, - if (dartFileName != null) kDartFileName: dartFileName, + 'class': ?pluginClass, + kDartPluginClass: ?dartPluginClass, + kDartFileName: ?dartFileName, if (ffiPlugin) kFfiPlugin: true, if (sharedDarwinSource) kSharedDarwinSource: true, - if (defaultPackage != null) kDefaultPackage: defaultPackage, + kDefaultPackage: ?defaultPackage, }; } } @@ -513,12 +513,12 @@ class WindowsPlugin extends PluginPlatform implements NativeOrDartPlugin, Varian Map toMap() { return { 'name': name, - if (pluginClass != null) 'class': pluginClass, + 'class': ?pluginClass, if (pluginClass != null) 'filename': _filenameForCppClass(pluginClass!), - if (dartPluginClass != null) kDartPluginClass: dartPluginClass, - if (dartFileName != null) kDartFileName: dartFileName, + kDartPluginClass: ?dartPluginClass, + kDartFileName: ?dartFileName, if (ffiPlugin) kFfiPlugin: true, - if (defaultPackage != null) kDefaultPackage: defaultPackage, + kDefaultPackage: ?defaultPackage, }; } } @@ -596,12 +596,12 @@ class LinuxPlugin extends PluginPlatform implements NativeOrDartPlugin { Map toMap() { return { 'name': name, - if (pluginClass != null) 'class': pluginClass, + 'class': ?pluginClass, if (pluginClass != null) 'filename': _filenameForCppClass(pluginClass!), - if (dartPluginClass != null) kDartPluginClass: dartPluginClass, - if (dartFileName != null) kDartFileName: dartFileName, + kDartPluginClass: ?dartPluginClass, + kDartFileName: ?dartFileName, if (ffiPlugin) kFfiPlugin: true, - if (defaultPackage != null) kDefaultPackage: defaultPackage, + kDefaultPackage: ?defaultPackage, }; } } diff --git a/packages/flutter_tools/lib/src/project.dart b/packages/flutter_tools/lib/src/project.dart index ffefebb07ea..c857ffe7003 100644 --- a/packages/flutter_tools/lib/src/project.dart +++ b/packages/flutter_tools/lib/src/project.dart @@ -414,8 +414,8 @@ class FlutterProject { final String? buildNumber = manifest.buildNumber; final versionFileJson = { 'app_name': manifest.appName, - if (buildName != null) 'version': buildName, - if (buildNumber != null) 'build_number': buildNumber, + 'version': ?buildName, + 'build_number': ?buildNumber, 'package_name': manifest.appName, }; return jsonEncode(versionFileJson); diff --git a/packages/flutter_tools/lib/src/proxied_devices/devices.dart b/packages/flutter_tools/lib/src/proxied_devices/devices.dart index 0915476983e..658027245ff 100644 --- a/packages/flutter_tools/lib/src/proxied_devices/devices.dart +++ b/packages/flutter_tools/lib/src/proxied_devices/devices.dart @@ -519,7 +519,7 @@ class _ProxiedLogReader extends DeviceLogReader { (String? applicationPackageId) async => _cast( await connection.sendRequest('device.logReader.start', { 'deviceId': device.id, - if (applicationPackageId != null) 'applicationPackageId': applicationPackageId, + 'applicationPackageId': ?applicationPackageId, }), ), ); diff --git a/packages/flutter_tools/lib/src/reporting/usage.dart b/packages/flutter_tools/lib/src/reporting/usage.dart index 1bc0f92ce49..cdea29afd29 100644 --- a/packages/flutter_tools/lib/src/reporting/usage.dart +++ b/packages/flutter_tools/lib/src/reporting/usage.dart @@ -379,8 +379,8 @@ class LogToFileAnalytics extends AnalyticsMock { final parameters = { 'variableName': variableName, 'time': '$time', - if (category != null) 'category': category, - if (label != null) 'label': label, + 'category': ?category, + 'label': ?label, }; _sendController.add(parameters); logFile.writeAsStringSync('timing $parameters\n', mode: FileMode.append); diff --git a/packages/flutter_tools/lib/src/test/flutter_tester_device.dart b/packages/flutter_tools/lib/src/test/flutter_tester_device.dart index dfc34548d66..6986b06f7c8 100644 --- a/packages/flutter_tools/lib/src/test/flutter_tester_device.dart +++ b/packages/flutter_tools/lib/src/test/flutter_tester_device.dart @@ -138,7 +138,7 @@ class FlutterTesterTestDevice extends TestDevice { 'APP_NAME': flutterProject?.manifest.appName ?? '', if (debuggingOptions.enableImpeller == ImpellerStatus.enabled) 'FLUTTER_TEST_IMPELLER': 'true', - if (testAssetDirectory != null) 'UNIT_TEST_ASSETS': testAssetDirectory!, + 'UNIT_TEST_ASSETS': ?testAssetDirectory, if (platform.isWindows && nativeAssetsBuilder != null && flutterProject != null) 'PATH': '${nativeAssetsBuilder!.windowsBuildDirectory(flutterProject!)};${platform.environment['PATH']}', diff --git a/packages/flutter_tools/lib/src/test/flutter_web_platform.dart b/packages/flutter_tools/lib/src/test/flutter_web_platform.dart index 04716575657..010876f9672 100644 --- a/packages/flutter_tools/lib/src/test/flutter_web_platform.dart +++ b/packages/flutter_tools/lib/src/test/flutter_web_platform.dart @@ -57,7 +57,7 @@ shelf.Handler createDirectoryHandler(Directory directory, {required bool crossOr return shelf.Response.ok( file.openRead(), headers: { - if (contentType != null) 'Content-Type': contentType, + 'Content-Type': ?contentType, if (needsCrossOriginIsolated) ...kMultiThreadedHeaders, }, ); diff --git a/packages/flutter_tools/lib/src/test/runner.dart b/packages/flutter_tools/lib/src/test/runner.dart index 86aa2ea0882..d47d28f605b 100644 --- a/packages/flutter_tools/lib/src/test/runner.dart +++ b/packages/flutter_tools/lib/src/test/runner.dart @@ -734,7 +734,7 @@ class SpawnPlugin extends PlatformPlugin { 'FLUTTER_TEST': flutterTest, 'FONTCONFIG_FILE': FontConfigManager().fontConfigFile.path, 'APP_NAME': flutterProject.manifest.appName, - if (testAssetDirectory != null) 'UNIT_TEST_ASSETS': testAssetDirectory, + 'UNIT_TEST_ASSETS': ?testAssetDirectory, if (nativeAssetsBuilder != null && globals.platform.isWindows) 'PATH': '${nativeAssetsBuilder.windowsBuildDirectory(flutterProject)};${globals.platform.environment['PATH']}', diff --git a/packages/flutter_tools/lib/src/version.dart b/packages/flutter_tools/lib/src/version.dart index 97801031e50..a57787931d1 100644 --- a/packages/flutter_tools/lib/src/version.dart +++ b/packages/flutter_tools/lib/src/version.dart @@ -271,9 +271,9 @@ abstract class FlutterVersion { 'frameworkRevision': frameworkRevision, 'frameworkCommitDate': frameworkCommitDate, 'engineRevision': engineRevision, - if (engineCommitDate != null) 'engineCommitDate': engineCommitDate!, - if (engineContentHash != null) 'engineContentHash': engineContentHash!, - if (engineBuildDate != null) 'engineBuildDate': engineBuildDate!, + 'engineCommitDate': ?engineCommitDate, + 'engineContentHash': ?engineContentHash, + 'engineBuildDate': ?engineBuildDate, 'dartSdkVersion': dartSdkVersion, 'devToolsVersion': devToolsVersion, 'flutterVersion': frameworkVersion, diff --git a/packages/flutter_tools/lib/src/vmservice.dart b/packages/flutter_tools/lib/src/vmservice.dart index 2fdf3374a4d..21d21501f44 100644 --- a/packages/flutter_tools/lib/src/vmservice.dart +++ b/packages/flutter_tools/lib/src/vmservice.dart @@ -789,7 +789,7 @@ class FlutterVmService { }) async { final vm_service.Response? response = await _checkedCallServiceExtension( method, - args: {if (isolateId != null) 'isolateId': isolateId, ...?args}, + args: {'isolateId': ?isolateId, ...?args}, ); return response?.json; } diff --git a/packages/flutter_tools/lib/src/web/compile.dart b/packages/flutter_tools/lib/src/web/compile.dart index 1e1a72a5198..b79ee7c3099 100644 --- a/packages/flutter_tools/lib/src/web/compile.dart +++ b/packages/flutter_tools/lib/src/web/compile.dart @@ -102,8 +102,8 @@ class WebBuilder { defines: { kTargetFile: target, kHasWebPlugins: hasWebPlugins.toString(), - if (baseHref != null) kBaseHref: baseHref, - if (staticAssetsUrl != null) kStaticAssetsUrl: staticAssetsUrl, + kBaseHref: ?baseHref, + kStaticAssetsUrl: ?staticAssetsUrl, kServiceWorkerStrategy: serviceWorkerStrategy.cliName, ...buildInfo.toBuildSystemEnvironment(), }, diff --git a/packages/flutter_tools/lib/src/web/compiler_config.dart b/packages/flutter_tools/lib/src/web/compiler_config.dart index 4479e06be5e..aef8968a7d8 100644 --- a/packages/flutter_tools/lib/src/web/compiler_config.dart +++ b/packages/flutter_tools/lib/src/web/compiler_config.dart @@ -43,7 +43,7 @@ sealed class WebCompilerConfig { String get buildKey; Map get buildEventAnalyticsValues => { - if (optimizationLevel != null) 'optimizationLevel': optimizationLevel!, + 'optimizationLevel': ?optimizationLevel, }; Map get _buildKeyMap => { diff --git a/packages/flutter_tools/lib/src/windows/build_windows.dart b/packages/flutter_tools/lib/src/windows/build_windows.dart index 9eee4dfdd45..44d8992e29e 100644 --- a/packages/flutter_tools/lib/src/windows/build_windows.dart +++ b/packages/flutter_tools/lib/src/windows/build_windows.dart @@ -281,7 +281,7 @@ void _writeGeneratedFlutterConfig( 'FLUTTER_ROOT': Cache.flutterRoot!, 'FLUTTER_EPHEMERAL_DIR': windowsProject.ephemeralDirectory.path, 'PROJECT_DIR': windowsProject.parent.directory.path, - if (target != null) 'FLUTTER_TARGET': target, + 'FLUTTER_TARGET': ?target, ...buildInfo.toEnvironmentConfig(), }; final LocalEngineInfo? localEngineInfo = globals.artifacts?.localEngineInfo; diff --git a/packages/flutter_tools/test/commands.shard/hermetic/build_ios_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/build_ios_test.dart index 4ab321cb85e..70ef5188b83 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/build_ios_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/build_ios_test.dart @@ -49,7 +49,7 @@ class FakeXcodeProjectInterpreterWithBuildSettings extends FakeXcodeProjectInter 'PRODUCT_BUNDLE_IDENTIFIER': productBundleIdentifier ?? 'io.flutter.someProject', 'TARGET_BUILD_DIR': 'build/ios/Release-iphoneos', 'WRAPPER_NAME': 'Runner.app', - if (developmentTeam != null) 'DEVELOPMENT_TEAM': developmentTeam!, + 'DEVELOPMENT_TEAM': ?developmentTeam, }; } diff --git a/packages/flutter_tools/test/general.shard/coverage_collector_test.dart b/packages/flutter_tools/test/general.shard/coverage_collector_test.dart index 082d1678bde..0ac9783ea32 100644 --- a/packages/flutter_tools/test/general.shard/coverage_collector_test.dart +++ b/packages/flutter_tools/test/general.shard/coverage_collector_test.dart @@ -770,7 +770,7 @@ FakeVmServiceHost createFakeVmServiceHostWithFooAndBar({ 'forceCompile': true, 'reportLines': true, 'librariesAlreadyCompiled': librariesAlreadyCompiled, - if (libraryFilters != null) 'libraryFilters': libraryFilters, + 'libraryFilters': ?libraryFilters, }, jsonResponse: SourceReport( ranges: [ diff --git a/packages/flutter_tools/test/general.shard/daemon_test.dart b/packages/flutter_tools/test/general.shard/daemon_test.dart index 59f2ea75180..708480a5668 100644 --- a/packages/flutter_tools/test/general.shard/daemon_test.dart +++ b/packages/flutter_tools/test/general.shard/daemon_test.dart @@ -197,7 +197,7 @@ void main() { Map testCommand(int id, [int? binarySize]) => { 'id': id, 'method': 'test', - if (binarySize != null) '_binaryLength': binarySize, + '_binaryLength': ?binarySize, }; List testCommandBinary(int id, [int? binarySize]) => utf8.encode('[${json.encode(testCommand(id, binarySize))}]\n'); diff --git a/packages/flutter_tools/test/general.shard/test/test_golden_comparator_test.dart b/packages/flutter_tools/test/general.shard/test/test_golden_comparator_test.dart index c81b4846a08..161ea35c6fc 100644 --- a/packages/flutter_tools/test/general.shard/test/test_golden_comparator_test.dart +++ b/packages/flutter_tools/test/general.shard/test/test_golden_comparator_test.dart @@ -242,7 +242,7 @@ void main() { } String _encodeStdout({required bool success, String? message}) { - return jsonEncode({'success': success, if (message != null) 'message': message}); + return jsonEncode({'success': success, 'message': ?message}); } final class _FakeTestCompiler extends Fake implements TestCompiler { diff --git a/packages/flutter_tools/test/general.shard/version_test.dart b/packages/flutter_tools/test/general.shard/version_test.dart index 84fa833a1aa..afa9b103e10 100644 --- a/packages/flutter_tools/test/general.shard/version_test.dart +++ b/packages/flutter_tools/test/general.shard/version_test.dart @@ -735,7 +735,7 @@ void main() { VersionCheckError? runUpstreamValidator({String? versionUpstreamUrl, String? flutterGitUrl}) { final Platform testPlatform = FakePlatform( - environment: {if (flutterGitUrl != null) 'FLUTTER_GIT_URL': flutterGitUrl}, + environment: {'FLUTTER_GIT_URL': ?flutterGitUrl}, ); return VersionUpstreamValidator( version: FakeFlutterVersion(repositoryUrl: versionUpstreamUrl), diff --git a/packages/flutter_tools/test/src/common.dart b/packages/flutter_tools/test/src/common.dart index 1154f02c49a..283e0fa6824 100644 --- a/packages/flutter_tools/test/src/common.dart +++ b/packages/flutter_tools/test/src/common.dart @@ -376,7 +376,7 @@ bool analyticsTimingEventExists({ final lookup = { 'workflow': workflow, 'variableName': variableName, - if (label != null) 'label': label, + 'label': ?label, }; for (final e in sentEvents) { diff --git a/packages/flutter_tools/test/src/fakes.dart b/packages/flutter_tools/test/src/fakes.dart index ba3198b7da8..267bd3ee39f 100644 --- a/packages/flutter_tools/test/src/fakes.dart +++ b/packages/flutter_tools/test/src/fakes.dart @@ -726,7 +726,7 @@ class FakeJava extends Fake implements Java { }) : binaryPath = binary, version = version ?? const Version.withText(19, 0, 2, 'openjdk 19.0.2 2023-01-17'), _environment = { - if (javaHome != null) Java.javaHomeEnvironmentVariable: javaHome, + Java.javaHomeEnvironmentVariable: ?javaHome, 'PATH': '/android-studio/jbr/bin', }, _canRun = canRun; diff --git a/packages/integration_test/lib/common.dart b/packages/integration_test/lib/common.dart index 4fc134c32de..cc31bce1f46 100644 --- a/packages/integration_test/lib/common.dart +++ b/packages/integration_test/lib/common.dart @@ -72,7 +72,7 @@ class Response { String toJson() => json.encode({ 'result': allTestsPassed.toString(), 'failureDetails': _failureDetailsAsString(), - if (data != null) 'data': data, + 'data': ?data, }); /// Deserializes the result from JSON.