@@ -13,6 +13,7 @@ import 'package:process/process.dart';
1313import '../artifacts.dart' ;
1414import '../base/common.dart' ;
1515import '../base/file_system.dart' ;
16+ import '../base/io.dart' ;
1617import '../base/logger.dart' ;
1718import '../base/os.dart' ;
1819import '../base/platform.dart' ;
@@ -28,7 +29,6 @@ import '../isolated/resident_web_runner.dart';
2829import '../project.dart' ;
2930import '../resident_runner.dart' ;
3031import '../runner/flutter_command.dart' ;
31- import '../runner/flutter_command_runner.dart' ;
3232import '../web/web_device.dart' ;
3333import '../widget_preview/analytics.dart' ;
3434import '../widget_preview/dependency_graph.dart' ;
@@ -77,7 +77,8 @@ class WidgetPreviewCommand extends FlutterCommand {
7777 String get description => 'Manage the widget preview environment.' ;
7878
7979 @override
80- String get name => 'widget-preview' ;
80+ String get name => kWidgetPreview;
81+ static const kWidgetPreview = 'widget-preview' ;
8182
8283 @override
8384 String get category => FlutterCommandCategory .tools;
@@ -130,7 +131,7 @@ final class WidgetPreviewStartCommand extends WidgetPreviewSubCommandBase with C
130131 required this .processManager,
131132 required this .artifacts,
132133 @visibleForTesting WidgetPreviewDtdServices ? dtdServicesOverride,
133- }) : logger = WidgetPreviewMachineAwareLogger ( logger) {
134+ }) : _logger = logger {
134135 if (dtdServicesOverride != null ) {
135136 _dtdService = dtdServicesOverride;
136137 }
@@ -200,7 +201,8 @@ final class WidgetPreviewStartCommand extends WidgetPreviewSubCommandBase with C
200201 final FileSystem fs;
201202
202203 @override
203- final WidgetPreviewMachineAwareLogger logger;
204+ WidgetPreviewMachineAwareLogger get logger => _logger as WidgetPreviewMachineAwareLogger ;
205+ final Logger _logger;
204206
205207 @override
206208 final FlutterProjectFactory projectFactory;
@@ -259,17 +261,17 @@ final class WidgetPreviewStartCommand extends WidgetPreviewSubCommandBase with C
259261
260262 @override
261263 Future <FlutterCommandResult > runCommand () async {
264+ assert (_logger is WidgetPreviewMachineAwareLogger );
265+
262266 // Start the timer tracking how long it takes to launch the preview environment.
263267 previewAnalytics.initializeLaunchStopwatch ();
268+ logger.sendInitializingEvent ();
264269
265270 final String ? customPreviewScaffoldOutput = stringArg (kWidgetPreviewScaffoldOutputDir);
266271 final Directory widgetPreviewScaffold = customPreviewScaffoldOutput != null
267272 ? fs.directory (customPreviewScaffoldOutput)
268273 : rootProject.widgetPreviewScaffold;
269274
270- final bool machine = boolArg (FlutterGlobalOptions .kMachineFlag);
271- logger.machine = machine;
272-
273275 // Check to see if a preview scaffold has already been generated. If not,
274276 // generate one.
275277 final bool generateScaffoldProject =
@@ -479,7 +481,7 @@ final class WidgetPreviewStartCommand extends WidgetPreviewSubCommandBase with C
479481 );
480482 unawaited (_widgetPreviewApp! .run (appStartedCompleter: appStarted));
481483 await appStarted.future;
482- logger.sendEvent ( 'started' , { 'url' : flutterDevice.devFS! .baseUri. toString ()} );
484+ logger.sendStartedEvent (applicationUrl : flutterDevice.devFS! .baseUri! );
483485 }
484486 } on Exception catch (error) {
485487 throwToolExit (error.toString ());
@@ -531,9 +533,10 @@ final class WidgetPreviewCleanCommand extends WidgetPreviewSubCommandBase {
531533/// A custom logger for the widget-preview commands that disables non-event output to stdio when
532534/// machine mode is enabled.
533535final class WidgetPreviewMachineAwareLogger extends DelegatingLogger {
534- WidgetPreviewMachineAwareLogger (super .delegate);
536+ WidgetPreviewMachineAwareLogger (super .delegate, { required this .machine, required this .verbose} );
535537
536- var machine = false ;
538+ final bool machine;
539+ final bool verbose;
537540
538541 @override
539542 void printError (
@@ -546,6 +549,11 @@ final class WidgetPreviewMachineAwareLogger extends DelegatingLogger {
546549 bool ? wrap,
547550 }) {
548551 if (machine) {
552+ sendEvent ('logMessage' , < String , Object ? > {
553+ 'level' : 'error' ,
554+ 'message' : message,
555+ 'stackTrace' : ? stackTrace? .toString (),
556+ });
549557 return ;
550558 }
551559 super .printError (
@@ -570,6 +578,7 @@ final class WidgetPreviewMachineAwareLogger extends DelegatingLogger {
570578 bool fatal = true ,
571579 }) {
572580 if (machine) {
581+ sendEvent ('logMessage' , < String , Object ? > {'level' : 'warning' , 'message' : message});
573582 return ;
574583 }
575584 super .printWarning (
@@ -594,6 +603,7 @@ final class WidgetPreviewMachineAwareLogger extends DelegatingLogger {
594603 bool ? wrap,
595604 }) {
596605 if (machine) {
606+ sendEvent ('logMessage' , < String , Object ? > {'level' : 'status' , 'message' : message});
597607 return ;
598608 }
599609 super .printStatus (
@@ -617,12 +627,27 @@ final class WidgetPreviewMachineAwareLogger extends DelegatingLogger {
617627
618628 @override
619629 void printTrace (String message) {
630+ if (! verbose) {
631+ return ;
632+ }
620633 if (machine) {
634+ sendEvent ('logMessage' , < String , Object ? > {'level' : 'trace' , 'message' : message});
621635 return ;
622636 }
623637 super .printTrace (message);
624638 }
625639
640+ /// Notifies tooling that the widget previewer is initializing.
641+ void sendInitializingEvent () {
642+ sendEvent ('initializing' , {'pid' : pid});
643+ }
644+
645+ /// Notifies tooling that the widget previewer has started and is being
646+ /// served at [applicationUrl] .
647+ void sendStartedEvent ({required Uri applicationUrl}) {
648+ sendEvent ('started' , {'url' : applicationUrl.toString ()});
649+ }
650+
626651 @override
627652 void sendEvent (String name, [Map <String , dynamic >? args]) {
628653 if (! machine) {
@@ -642,6 +667,7 @@ final class WidgetPreviewMachineAwareLogger extends DelegatingLogger {
642667 int progressIndicatorPadding = kDefaultStatusPadding,
643668 }) {
644669 if (machine) {
670+ printStatus (message);
645671 return SilentStatus (stopwatch: Stopwatch ());
646672 }
647673 return super .startProgress (
0 commit comments