Make `Logger` required when injected in flutter_tool (#114111)

diff --git a/packages/flutter_tools/lib/executable.dart b/packages/flutter_tools/lib/executable.dart
index 620a693..1d77435 100644
--- a/packages/flutter_tools/lib/executable.dart
+++ b/packages/flutter_tools/lib/executable.dart
@@ -184,7 +184,7 @@
   DebugAdapterCommand(verboseHelp: verboseHelp),
   DevicesCommand(verboseHelp: verboseHelp),
   DoctorCommand(verbose: verbose),
-  DowngradeCommand(verboseHelp: verboseHelp),
+  DowngradeCommand(verboseHelp: verboseHelp, logger: globals.logger),
   DriveCommand(verboseHelp: verboseHelp,
     fileSystem: globals.fs,
     logger: globals.logger,
diff --git a/packages/flutter_tools/lib/src/commands/daemon.dart b/packages/flutter_tools/lib/src/commands/daemon.dart
index f5406a9..11fb279 100644
--- a/packages/flutter_tools/lib/src/commands/daemon.dart
+++ b/packages/flutter_tools/lib/src/commands/daemon.dart
@@ -102,21 +102,21 @@
 class _DaemonServer {
   _DaemonServer({
     this.port,
-    this.logger,
+    required this.logger,
     this.notifyingLogger,
   });
 
   final int? port;
 
   /// Stdout logger used to print general server-related errors.
-  final Logger? logger;
+  final Logger logger;
 
   // Logger that sends the message to the other end of daemon connection.
   final NotifyingLogger? notifyingLogger;
 
   Future<void> run() async {
     final ServerSocket serverSocket = await ServerSocket.bind(InternetAddress.loopbackIPv4, port!);
-    logger!.printStatus('Daemon server listening on ${serverSocket.port}');
+    logger.printStatus('Daemon server listening on ${serverSocket.port}');
 
     final StreamSubscription<Socket> subscription = serverSocket.listen(
       (Socket socket) async {
@@ -124,13 +124,13 @@
         // reset, we will receive an uncatchable exception.
         // https://github.com/dart-lang/sdk/issues/25518
         final Future<void> socketDone = socket.done.catchError((Object error, StackTrace stackTrace) {
-          logger!.printError('Socket error: $error');
-          logger!.printTrace('$stackTrace');
+          logger.printError('Socket error: $error');
+          logger.printTrace('$stackTrace');
         });
         final Daemon daemon = Daemon(
           DaemonConnection(
-            daemonStreams: DaemonStreams.fromSocket(socket, logger: logger!),
-            logger: logger!,
+            daemonStreams: DaemonStreams.fromSocket(socket, logger: logger),
+            logger: logger,
           ),
           notifyingLogger: notifyingLogger,
         );
diff --git a/packages/flutter_tools/lib/src/commands/downgrade.dart b/packages/flutter_tools/lib/src/commands/downgrade.dart
index 666c190..2172ee7 100644
--- a/packages/flutter_tools/lib/src/commands/downgrade.dart
+++ b/packages/flutter_tools/lib/src/commands/downgrade.dart
@@ -30,7 +30,7 @@
   DowngradeCommand({
     bool verboseHelp = false,
     PersistentToolState? persistentToolState,
-    Logger? logger,
+    required Logger logger,
     ProcessManager? processManager,
     FlutterVersion? flutterVersion,
     Terminal? terminal,
@@ -64,7 +64,7 @@
   PersistentToolState? _persistentToolState;
   ProcessUtils? _processUtils;
   ProcessManager? _processManager;
-  Logger? _logger;
+  final Logger _logger;
   Stdio? _stdio;
   FileSystem? _fileSystem;
 
@@ -83,11 +83,10 @@
     // values when being created. Fields must be lazily instantiated in runCommand,
     // at least until the zone injection is refactored.
     _terminal ??= globals.terminal;
-    _logger ??= globals.logger;
     _flutterVersion ??= globals.flutterVersion;
     _persistentToolState ??= globals.persistentToolState;
     _processManager ??= globals.processManager;
-    _processUtils ??= ProcessUtils(processManager: _processManager!, logger: _logger!);
+    _processUtils ??= ProcessUtils(processManager: _processManager!, logger: _logger);
     _stdio ??= globals.stdio;
     _fileSystem ??= globals.fs;
     String workingDirectory = Cache.flutterRoot!;
@@ -128,19 +127,18 @@
     // If there is a terminal attached, prompt the user to confirm the downgrade.
     final Stdio stdio = _stdio!;
     final Terminal terminal = _terminal!;
-    final Logger logger = _logger!;
     if (stdio.hasTerminal && boolArgDeprecated('prompt')) {
       terminal.usesTerminalUi = true;
       final String result = await terminal.promptForCharInput(
         const <String>['y', 'n'],
         prompt: 'Downgrade flutter to version $humanReadableVersion?',
-        logger: logger,
+        logger: _logger,
       );
       if (result == 'n') {
         return FlutterCommandResult.success();
       }
     } else {
-      logger.printStatus('Downgrading Flutter to version $humanReadableVersion');
+      _logger.printStatus('Downgrading Flutter to version $humanReadableVersion');
     }
 
     // To downgrade the tool, we perform a git checkout --hard, and then
@@ -175,7 +173,7 @@
       );
     }
     await FlutterVersion.resetFlutterVersionFreshnessCheck();
-    logger.printStatus('Success');
+    _logger.printStatus('Success');
     return FlutterCommandResult.success();
   }
 
diff --git a/packages/flutter_tools/lib/src/commands/drive.dart b/packages/flutter_tools/lib/src/commands/drive.dart
index e336417..e33f2ae 100644
--- a/packages/flutter_tools/lib/src/commands/drive.dart
+++ b/packages/flutter_tools/lib/src/commands/drive.dart
@@ -52,7 +52,7 @@
     @visibleForTesting FlutterDriverFactory? flutterDriverFactory,
     @visibleForTesting this.signalsToHandle = const <ProcessSignal>{ProcessSignal.sigint, ProcessSignal.sigterm},
     required FileSystem fileSystem,
-    required Logger? logger,
+    required Logger logger,
     required Platform platform,
     required this.signals,
   }) : _flutterDriverFactory = flutterDriverFactory,
@@ -171,7 +171,7 @@
 
   FlutterDriverFactory? _flutterDriverFactory;
   final FileSystem _fileSystem;
-  final Logger? _logger;
+  final Logger _logger;
   final FileSystemUtils _fsUtils;
 
   @override
@@ -222,20 +222,20 @@
       throwToolExit(null);
     }
     if (screenshot != null && !device.supportsScreenshot) {
-      _logger!.printError('Screenshot not supported for ${device.name}.');
+      _logger.printError('Screenshot not supported for ${device.name}.');
     }
 
     final bool web = device is WebServerDevice || device is ChromiumDevice;
     _flutterDriverFactory ??= FlutterDriverFactory(
       applicationPackageFactory: ApplicationPackageFactory.instance!,
-      logger: _logger!,
+      logger: _logger,
       processUtils: globals.processUtils,
       dartSdkPath: globals.artifacts!.getHostArtifact(HostArtifact.engineDartBinary).path,
       devtoolsLauncher: DevtoolsLauncher.instance!,
     );
     final PackageConfig packageConfig = await loadPackageConfigWithLogging(
       _fileSystem.file('.packages'),
-      logger: _logger!,
+      logger: _logger,
       throwOnError: false,
     );
     final DriverService driverService = _flutterDriverFactory!.createDriverService(web);
@@ -297,7 +297,7 @@
       );
       // If the test is sent a signal, take a screenshot before exiting
       final Map<ProcessSignal, Object> screenshotTokens = _registerScreenshotCallbacks((ProcessSignal signal) async {
-        _logger!.printError('Caught $signal');
+        _logger.printError('Caught $signal');
         await _takeScreenshot(device);
       });
       final int testResult = await testResultFuture;
@@ -309,7 +309,7 @@
       }
 
       if (boolArgDeprecated('keep-app-running')) {
-        _logger!.printStatus('Leaving the application running.');
+        _logger.printStatus('Leaving the application running.');
       } else {
         final File? skslFile = stringArgDeprecated('write-sksl-on-exit') != null
           ? _fileSystem.file(stringArgDeprecated('write-sksl-on-exit'))
@@ -332,7 +332,7 @@
   }
 
   Map<ProcessSignal, Object> _registerScreenshotCallbacks(Function(ProcessSignal) callback) {
-    _logger!.printTrace('Registering signal handlers...');
+    _logger.printTrace('Registering signal handlers...');
     final Map<ProcessSignal, Object> tokens = <ProcessSignal, Object>{};
     for (final ProcessSignal signal in signalsToHandle) {
       tokens[signal] = signals.addHandler(signal, callback);
@@ -341,7 +341,7 @@
   }
 
   void _unregisterScreenshotCallbacks(Map<ProcessSignal, Object> tokens) {
-    _logger!.printTrace('Unregistering signal handlers...');
+    _logger.printTrace('Unregistering signal handlers...');
     for (final MapEntry<ProcessSignal, Object> entry in tokens.entries) {
       signals.removeHandler(entry.key, entry.value);
     }
@@ -362,7 +362,7 @@
     // for the corresponding test file relative to it.
     if (!_fileSystem.path.isRelative(appFile)) {
       if (!_fileSystem.path.isWithin(packageDir, appFile)) {
-        _logger!.printError(
+        _logger.printError(
           'Application file $appFile is outside the package directory $packageDir'
         );
         return null;
@@ -374,7 +374,7 @@
     final List<String> parts = _fileSystem.path.split(appFile);
 
     if (parts.length < 2) {
-      _logger!.printError(
+      _logger.printError(
         'Application file $appFile must reside in one of the sub-directories '
         'of the package structure, not in the root directory.'
       );
@@ -402,9 +402,9 @@
         'png',
       );
       await device.takeScreenshot(outputFile);
-      _logger!.printStatus('Screenshot written to ${outputFile.path}');
+      _logger.printStatus('Screenshot written to ${outputFile.path}');
     } on Exception catch (error) {
-      _logger!.printError('Error taking screenshot: $error');
+      _logger.printError('Error taking screenshot: $error');
     }
   }
 }
diff --git a/packages/flutter_tools/lib/src/commands/run.dart b/packages/flutter_tools/lib/src/commands/run.dart
index aad941a..afd11e7 100644
--- a/packages/flutter_tools/lib/src/commands/run.dart
+++ b/packages/flutter_tools/lib/src/commands/run.dart
@@ -541,7 +541,6 @@
         ipv6: ipv6,
         debuggingOptions: await createDebuggingOptions(webMode),
         stayResident: stayResident,
-        urlTunneller: null,
         fileSystem: globals.fs,
         usage: globals.flutterUsage,
         logger: globals.logger,
diff --git a/packages/flutter_tools/lib/src/devtools_launcher.dart b/packages/flutter_tools/lib/src/devtools_launcher.dart
index c895712..25811c7 100644
--- a/packages/flutter_tools/lib/src/devtools_launcher.dart
+++ b/packages/flutter_tools/lib/src/devtools_launcher.dart
@@ -22,7 +22,7 @@
   DevtoolsServerLauncher({
     required ProcessManager processManager,
     required String dartExecutable,
-    required Logger? logger,
+    required Logger logger,
     required BotDetector botDetector,
   })  : _processManager = processManager,
         _dartExecutable = dartExecutable,
@@ -31,7 +31,7 @@
 
   final ProcessManager _processManager;
   final String _dartExecutable;
-  final Logger? _logger;
+  final Logger _logger;
   final BotDetector _botDetector;
   final Completer<void> _processStartCompleter = Completer<void>();
 
@@ -73,7 +73,7 @@
       _devToolsProcess!.stderr
           .transform(utf8.decoder)
           .transform(const LineSplitter())
-          .listen(_logger!.printError);
+          .listen(_logger.printError);
 
       final bool runningOnBot = await _botDetector.isRunningOnBot;
       devToolsProcessExit = _devToolsProcess!.exitCode.then(
@@ -86,7 +86,7 @@
 
       devToolsUrl = await completer.future;
     } on Exception catch (e, st) {
-      _logger!.printError('Failed to launch DevTools: $e', stackTrace: st);
+      _logger.printError('Failed to launch DevTools: $e', stackTrace: st);
     }
   }
 
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 62bbb2b..38d96dc 100644
--- a/packages/flutter_tools/lib/src/drive/web_driver_service.dart
+++ b/packages/flutter_tools/lib/src/drive/web_driver_service.dart
@@ -82,7 +82,6 @@
           disablePortPublication: debuggingOptions.disablePortPublication,
         ),
       stayResident: true,
-      urlTunneller: null,
       flutterProject: FlutterProject.current(),
       fileSystem: globals.fs,
       usage: globals.flutterUsage,
diff --git a/packages/flutter_tools/lib/src/isolated/resident_web_runner.dart b/packages/flutter_tools/lib/src/isolated/resident_web_runner.dart
index ce339e3..e8bb48d 100644
--- a/packages/flutter_tools/lib/src/isolated/resident_web_runner.dart
+++ b/packages/flutter_tools/lib/src/isolated/resident_web_runner.dart
@@ -51,8 +51,8 @@
     required FlutterProject flutterProject,
     required bool? ipv6,
     required DebuggingOptions debuggingOptions,
-    required UrlTunneller? urlTunneller,
-    required Logger? logger,
+    UrlTunneller? urlTunneller,
+    required Logger logger,
     required FileSystem fileSystem,
     required SystemClock systemClock,
     required Usage usage,
@@ -89,7 +89,7 @@
     required bool? ipv6,
     required DebuggingOptions debuggingOptions,
     required FileSystem fileSystem,
-    required Logger? logger,
+    required Logger logger,
     required SystemClock systemClock,
     required Usage usage,
     UrlTunneller? urlTunneller,
@@ -110,13 +110,13 @@
         );
 
   final FileSystem _fileSystem;
-  final Logger? _logger;
+  final Logger _logger;
   final SystemClock _systemClock;
   final Usage _usage;
   final UrlTunneller? _urlTunneller;
 
   @override
-  Logger? get logger => _logger;
+  Logger get logger => _logger;
 
   @override
   FileSystem get fileSystem => _fileSystem;
@@ -190,7 +190,7 @@
       _generatedEntrypointDirectory?.deleteSync(recursive: true);
     } on FileSystemException {
       // Best effort to clean up temp dirs.
-      _logger!.printTrace(
+      _logger.printTrace(
         'Failed to clean up temp directory: ${_generatedEntrypointDirectory!.path}',
       );
     }
@@ -210,14 +210,14 @@
     const String fire = '🔥';
     const String rawMessage =
         '  To hot restart changes while running, press "r" or "R".';
-    final String message = _logger!.terminal.color(
-      fire + _logger!.terminal.bolden(rawMessage),
+    final String message = _logger.terminal.color(
+      fire + _logger.terminal.bolden(rawMessage),
       TerminalColor.red,
     );
-    _logger!.printStatus(message);
+    _logger.printStatus(message);
     const String quitMessage = 'To quit, press "q".';
-    _logger!.printStatus('For a more detailed help message, press "h". $quitMessage');
-    _logger!.printStatus('');
+    _logger.printStatus('For a more detailed help message, press "h". $quitMessage');
+    _logger.printStatus('');
     printDebuggerList();
   }
 
@@ -240,11 +240,11 @@
       buildInfo: debuggingOptions.buildInfo,
     );
     if (package == null) {
-      _logger!.printStatus('This application is not configured to build on the web.');
-      _logger!.printStatus('To add web support to a project, run `flutter create .`.');
+      _logger.printStatus('This application is not configured to build on the web.');
+      _logger.printStatus('To add web support to a project, run `flutter create .`.');
     }
     final String modeName = debuggingOptions.buildInfo.friendlyModeName;
-    _logger!.printStatus(
+    _logger.printStatus(
       'Launching ${getDisplayPath(target, _fileSystem)} '
       'on ${device!.device!.name} in $modeName mode...',
     );
@@ -283,7 +283,7 @@
           await runSourceGenerators();
           final UpdateFSReport report = await _updateDevFS(fullRestart: true);
           if (!report.success) {
-            _logger!.printError('Failed to compile application.');
+            _logger.printError('Failed to compile application.');
             appFailedToStart();
             return 1;
           }
@@ -318,19 +318,19 @@
       });
     } on WebSocketException catch (error, stackTrace) {
       appFailedToStart();
-      _logger!.printError('$error', stackTrace: stackTrace);
+      _logger.printError('$error', stackTrace: stackTrace);
       throwToolExit(kExitMessage);
     } on ChromeDebugException catch (error, stackTrace) {
       appFailedToStart();
-      _logger!.printError('$error', stackTrace: stackTrace);
+      _logger.printError('$error', stackTrace: stackTrace);
       throwToolExit(kExitMessage);
     } on AppConnectionException catch (error, stackTrace) {
       appFailedToStart();
-      _logger!.printError('$error', stackTrace: stackTrace);
+      _logger.printError('$error', stackTrace: stackTrace);
       throwToolExit(kExitMessage);
     } on SocketException catch (error, stackTrace) {
       appFailedToStart();
-      _logger!.printError('$error', stackTrace: stackTrace);
+      _logger.printError('$error', stackTrace: stackTrace);
       throwToolExit(kExitMessage);
     } on Exception {
       appFailedToStart();
@@ -346,7 +346,7 @@
     bool benchmarkMode = false,
   }) async {
     final DateTime start = _systemClock.now();
-    final Status status = _logger!.startProgress(
+    final Status status = _logger.startProgress(
       'Performing hot restart...',
       progressId: 'hot.restart',
     );
@@ -382,7 +382,7 @@
 
     try {
       if (!deviceIsDebuggable) {
-        _logger!.printStatus('Recompile complete. Page requires refresh.');
+        _logger.printStatus('Recompile complete. Page requires refresh.');
       } else if (isRunningDebug) {
         await _vmService.service.callMethod('hotRestart');
       } else {
@@ -400,7 +400,7 @@
 
     final Duration elapsed = _systemClock.now().difference(start);
     final String elapsedMS = getElapsedAsMilliseconds(elapsed);
-    _logger!.printStatus('Restarted application in $elapsedMS.');
+    _logger.printStatus('Restarted application in $elapsedMS.');
     unawaited(residentDevtoolsHandler!.hotRestart(flutterDevices));
 
     // Don't track restart times for dart2js builds or web-server devices.
@@ -468,7 +468,7 @@
     final bool isFirstUpload = !assetBundle.wasBuiltOnce();
     final bool rebuildBundle = assetBundle.needsBuild();
     if (rebuildBundle) {
-      _logger!.printTrace('Updating assets');
+      _logger.printTrace('Updating assets');
       final int result = await assetBundle.build(
         packagesPath: debuggingOptions.buildInfo.packagesPath,
         targetPlatform: TargetPlatform.web_javascript,
@@ -484,7 +484,7 @@
       packageConfig: device!.devFS!.lastPackageConfig
         ?? debuggingOptions.buildInfo.packageConfig,
     );
-    final Status devFSStatus = _logger!.startProgress(
+    final Status devFSStatus = _logger.startProgress(
       'Waiting for connection from debug service on ${device!.device!.name}...',
     );
     final UpdateFSReport report = await device!.devFS!.update(
@@ -507,7 +507,7 @@
       shaderCompiler: device!.developmentShaderCompiler,
     );
     devFSStatus.stop();
-    _logger!.printTrace('Synced ${getSizeAsMB(report.syncedBytes)}.');
+    _logger.printTrace('Synced ${getSizeAsMB(report.syncedBytes)}.');
     return report;
   }
 
@@ -538,7 +538,7 @@
 
       void onLogEvent(vmservice.Event event)  {
         final String message = processVmServiceMessage(event);
-        _logger!.printStatus(message);
+        _logger.printStatus(message);
       }
 
       _stdOutSub = _vmService.service.onStdoutEvent.listen(onLogEvent);
@@ -609,16 +609,16 @@
           ..createSync(recursive: true)
           ..writeAsStringSync(websocketUri.toString());
       }
-      _logger!.printStatus('Debug service listening on $websocketUri');
-      _logger!.printStatus('');
+      _logger.printStatus('Debug service listening on $websocketUri');
+      _logger.printStatus('');
       if (debuggingOptions.buildInfo.nullSafetyMode ==  NullSafetyMode.sound) {
-        _logger!.printStatus('💪 Running with sound null safety 💪', emphasis: true);
+        _logger.printStatus('💪 Running with sound null safety 💪', emphasis: true);
       } else {
-        _logger!.printStatus(
+        _logger.printStatus(
           'Running without sound null safety ⚠️',
           emphasis: true,
         );
-        _logger!.printStatus(
+        _logger.printStatus(
           'Dart 3 will only support sound null safety, see https://dart.dev/null-safety',
         );
       }
diff --git a/packages/flutter_tools/lib/src/resident_runner.dart b/packages/flutter_tools/lib/src/resident_runner.dart
index 4b493d9..7f4e838 100644
--- a/packages/flutter_tools/lib/src/resident_runner.dart
+++ b/packages/flutter_tools/lib/src/resident_runner.dart
@@ -637,7 +637,7 @@
   ResidentDevtoolsHandler? get residentDevtoolsHandler;
 
   @protected
-  Logger? get logger;
+  Logger get logger;
 
   @protected
   FileSystem? get fileSystem;
@@ -666,7 +666,7 @@
         final String data = await device.vmService!.flutterDebugDumpApp(
           isolateId: view.uiIsolate!.id!,
         );
-        logger!.printStatus(data);
+        logger.printStatus(data);
       }
     }
     return true;
@@ -683,7 +683,7 @@
         final String data = await device.vmService!.flutterDebugDumpRenderTree(
           isolateId: view.uiIsolate!.id!,
         );
-        logger!.printStatus(data);
+        logger.printStatus(data);
       }
     }
     return true;
@@ -702,7 +702,7 @@
     }
     for (final FlutterDevice? device in flutterDevices) {
       if (device?.targetPlatform == TargetPlatform.web_javascript) {
-        logger!.printWarning('Unable to get jank metrics for web');
+        logger.printWarning('Unable to get jank metrics for web');
         continue;
       }
       final List<FlutterView> views = await device!.vmService!.getFlutterViews();
@@ -719,9 +719,9 @@
             'json',
           );
           tempFile.writeAsStringSync(jsonEncode(rasterData), flush: true);
-          logger!.printStatus('Wrote jank metrics to ${tempFile.absolute.path}');
+          logger.printStatus('Wrote jank metrics to ${tempFile.absolute.path}');
         } else {
-          logger!.printWarning('Unable to get jank metrics.');
+          logger.printWarning('Unable to get jank metrics.');
         }
       }
     }
@@ -739,7 +739,7 @@
         final String data = await device.vmService!.flutterDebugDumpLayerTree(
           isolateId: view.uiIsolate!.id!,
         );
-        logger!.printStatus(data);
+        logger.printStatus(data);
       }
     }
     return true;
@@ -758,7 +758,7 @@
         final String data = await device.vmService!.flutterDebugDumpSemanticsTreeInTraversalOrder(
           isolateId: view.uiIsolate!.id!,
         );
-        logger!.printStatus(data);
+        logger.printStatus(data);
       }
     }
     return true;
@@ -777,7 +777,7 @@
         final String data = await device.vmService!.flutterDebugDumpSemanticsTreeInInverseHitTestOrder(
           isolateId: view.uiIsolate!.id!,
         );
-        logger!.printStatus(data);
+        logger.printStatus(data);
       }
     }
     return true;
@@ -891,7 +891,7 @@
           brightness: next,
         );
       }
-      logger!.printStatus('Changed brightness to $next.');
+      logger.printStatus('Changed brightness to $next.');
     }
     return true;
   }
@@ -916,7 +916,7 @@
         );
       }
     }
-    logger!.printStatus('Switched operating system to $to');
+    logger.printStatus('Switched operating system to $to');
     return true;
   }
 
@@ -954,7 +954,7 @@
     if (!device.device!.supportsScreenshot && !supportsServiceProtocol) {
       return;
     }
-    final Status status = logger!.startProgress(
+    final Status status = logger.startProgress(
       'Taking screenshot for ${device.device!.name}...',
     );
     final File outputFile = getUniqueFile(
@@ -975,12 +975,12 @@
       }
       final int sizeKB = outputFile.lengthSync() ~/ 1024;
       status.stop();
-      logger!.printStatus(
+      logger.printStatus(
         'Screenshot written to ${fileSystem!.path.relative(outputFile.path)} (${sizeKB}kB).',
       );
     } on Exception catch (error) {
       status.cancel();
-      logger!.printError('Error taking screenshot: $error');
+      logger.printError('Error taking screenshot: $error');
     }
   }
 
@@ -1016,7 +1016,7 @@
         }
         return true;
       } on vm_service.RPCError catch (error) {
-        logger!.printError('Error communicating with Flutter on the device: $error');
+        logger.printError('Error communicating with Flutter on the device: $error');
         return false;
       }
     }
@@ -1088,7 +1088,7 @@
   }
 
   @override
-  Logger? get logger => globals.logger;
+  Logger get logger => globals.logger;
 
   @override
   FileSystem get fileSystem => globals.fs;
diff --git a/packages/flutter_tools/lib/src/web/web_runner.dart b/packages/flutter_tools/lib/src/web/web_runner.dart
index 3094ac7..1ffe077 100644
--- a/packages/flutter_tools/lib/src/web/web_runner.dart
+++ b/packages/flutter_tools/lib/src/web/web_runner.dart
@@ -26,8 +26,8 @@
     required FlutterProject flutterProject,
     required bool? ipv6,
     required DebuggingOptions debuggingOptions,
-    required UrlTunneller? urlTunneller,
-    required Logger? logger,
+    UrlTunneller? urlTunneller,
+    required Logger logger,
     required FileSystem fileSystem,
     required SystemClock systemClock,
     required Usage usage,