From 4dff688f777fa2a889ca7771ac89771682821e73 Mon Sep 17 00:00:00 2001 From: Kenzie Davisson Date: Fri, 4 Oct 2024 12:25:31 -0700 Subject: [PATCH 1/7] enable flag --- packages/devtools_app/lib/src/shared/feature_flags.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/devtools_app/lib/src/shared/feature_flags.dart b/packages/devtools_app/lib/src/shared/feature_flags.dart index 8901a3b4195..041d35b1600 100644 --- a/packages/devtools_app/lib/src/shared/feature_flags.dart +++ b/packages/devtools_app/lib/src/shared/feature_flags.dart @@ -87,7 +87,7 @@ abstract class FeatureFlags { /// Flag to enable the new Logging experience. /// /// https://github.com/flutter/devtools/issues/7703 - static bool loggingV2 = enableExperiments; + static bool loggingV2 = true; /// Flag to enable debugging via DAP. /// From 1df16dcb1be616214d9e7ca5e2dadee9c77b2709 Mon Sep 17 00:00:00 2001 From: Kenzie Davisson Date: Fri, 4 Oct 2024 12:28:37 -0700 Subject: [PATCH 2/7] Tweak metadata padding --- .../logging_screen_v2/logging_table_row.dart | 39 +++++++++++++------ 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/packages/devtools_app/lib/src/screens/logging/logging_screen_v2/logging_table_row.dart b/packages/devtools_app/lib/src/screens/logging/logging_screen_v2/logging_table_row.dart index 03b0f43d49c..9df2ede5268 100644 --- a/packages/devtools_app/lib/src/screens/logging/logging_screen_v2/logging_table_row.dart +++ b/packages/devtools_app/lib/src/screens/logging/logging_screen_v2/logging_table_row.dart @@ -176,28 +176,35 @@ abstract class MetadataChip extends StatelessWidget { required this.maxWidth, required this.icon, required this.text, + this.includeLeadingPadding = true, }); final LogDataV2 data; final double maxWidth; - final IconData icon; + final IconData? icon; final String text; + final bool includeLeadingPadding; - static const padding = defaultSpacing; + static const padding = denseSpacing; + static const iconPadding = densePadding; /// Estimates the size of this single metadata chip. /// /// If the [build] method is changed then this may need to be updated Size estimateSize() { - final maxWidthInsidePadding = maxWidth - padding * 2; + final horizontalPaddingCount = includeLeadingPadding ? 2 : 1; + final maxWidthInsidePadding = + max(0.0, maxWidth - padding * horizontalPaddingCount); final iconSize = Size.square(tooltipIconSize); final textSize = calculateTextSpanSize( _buildValueText(), maxWidth: maxWidthInsidePadding, ); return Size( - iconSize.width + defaultSpacing + textSize.width + padding * 2, - max(iconSize.height, textSize.height) + padding * 2, + (icon != null ? iconSize.width + iconPadding : 0.0) + + textSize.width + + padding * horizontalPaddingCount, // Horizontal padding. + max(iconSize.height, textSize.height) + padding * 2, // Vertical padding. ); } @@ -206,15 +213,22 @@ abstract class MetadataChip extends StatelessWidget { Widget build(BuildContext context) { return Container( constraints: BoxConstraints(maxWidth: maxWidth), - padding: const EdgeInsets.all(padding), + padding: EdgeInsets.fromLTRB( + includeLeadingPadding ? padding : 0, + padding, + padding, + padding, + ), child: Row( mainAxisSize: MainAxisSize.min, children: [ - Icon( - icon, - size: tooltipIconSize, - ), - const SizedBox(width: defaultSpacing), + if (icon != null) ...[ + Icon( + icon, + size: tooltipIconSize, + ), + const SizedBox(width: iconPadding), + ], RichText( text: _buildValueText(), ), @@ -238,11 +252,12 @@ class WhenMetaDataChip extends MetadataChip { required super.data, required super.maxWidth, }) : super( - icon: Icons.punch_clock, + icon: null, text: data.timestamp == null ? '' : loggingTableTimeFormat .format(DateTime.fromMillisecondsSinceEpoch(data.timestamp!)), + includeLeadingPadding: false, ); } From a509c572d2cb3ed9a8d71eb8c2dc41a317a7d9a8 Mon Sep 17 00:00:00 2001 From: Kenzie Davisson Date: Fri, 4 Oct 2024 12:36:19 -0700 Subject: [PATCH 3/7] Add clear button and border --- .../logging/logging_screen_v2/logging_table_v2.dart | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/devtools_app/lib/src/screens/logging/logging_screen_v2/logging_table_v2.dart b/packages/devtools_app/lib/src/screens/logging/logging_screen_v2/logging_table_v2.dart index e7e75248fe0..9d307ee6b4d 100644 --- a/packages/devtools_app/lib/src/screens/logging/logging_screen_v2/logging_table_v2.dart +++ b/packages/devtools_app/lib/src/screens/logging/logging_screen_v2/logging_table_v2.dart @@ -48,6 +48,12 @@ class _LoggingTableV2State extends State children: [ Row( children: [ + ClearButton( + onPressed: controller.clear, + gaScreen: gac.logging, + gaSelection: gac.clear, + ), + const SizedBox(width: defaultSpacing), Expanded( child: DevToolsClearableTextField( labelText: 'Search', // TODO(danchevalier): use SearchField @@ -77,8 +83,11 @@ class _LoggingTableV2State extends State ), const SizedBox(height: denseSpacing), Expanded( - child: _LoggingTableProgress( - model: widget.model, + child: RoundedOutlinedBorder( + clip: true, + child: _LoggingTableProgress( + model: widget.model, + ), ), ), ], From c2c066bb2dbf4fdf82488f71feaf87d093df599f Mon Sep 17 00:00:00 2001 From: Kenzie Davisson Date: Fri, 4 Oct 2024 12:48:33 -0700 Subject: [PATCH 4/7] Metadata chip icons and color --- .../logging_screen_v2/logging_table_row.dart | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/packages/devtools_app/lib/src/screens/logging/logging_screen_v2/logging_table_row.dart b/packages/devtools_app/lib/src/screens/logging/logging_screen_v2/logging_table_row.dart index 9df2ede5268..ac25469ed39 100644 --- a/packages/devtools_app/lib/src/screens/logging/logging_screen_v2/logging_table_row.dart +++ b/packages/devtools_app/lib/src/screens/logging/logging_screen_v2/logging_table_row.dart @@ -52,6 +52,13 @@ class LoggingTableRow extends StatefulWidget { // Ignore exception; [elapsedFrameTimeAsString] will be null. } + var kindIcon = Icons.crop_square_outlined; + if (data.kind == 'stdout' || data.kind == 'stderr') { + kindIcon = Icons.terminal_rounded; + } else if (RegExp(r'^flutter\..*$').hasMatch(data.kind)) { + kindIcon = Icons.flutter_dash; // TODO(kenz): use flutter icon + } + return [ if (data.timestamp != null) WhenMetaDataChip( @@ -61,6 +68,7 @@ class LoggingTableRow extends StatefulWidget { KindMetaDataChip( data: data, maxWidth: maxWidth, + icon: kindIcon, ), if (elapsedFrameTimeAsString != null) FrameElapsedMetaDataChip( @@ -195,7 +203,7 @@ abstract class MetadataChip extends StatelessWidget { final horizontalPaddingCount = includeLeadingPadding ? 2 : 1; final maxWidthInsidePadding = max(0.0, maxWidth - padding * horizontalPaddingCount); - final iconSize = Size.square(tooltipIconSize); + final iconSize = Size.square(defaultIconSize); final textSize = calculateTextSpanSize( _buildValueText(), maxWidth: maxWidthInsidePadding, @@ -225,7 +233,8 @@ abstract class MetadataChip extends StatelessWidget { if (icon != null) ...[ Icon( icon, - size: tooltipIconSize, + size: defaultIconSize, + color: Theme.of(context).colorScheme.subtleTextColor, ), const SizedBox(width: iconPadding), ], @@ -267,7 +276,8 @@ class KindMetaDataChip extends MetadataChip { super.key, required super.data, required super.maxWidth, - }) : super(icon: Icons.type_specimen, text: data.kind); + required super.icon, + }) : super(text: data.kind); } @visibleForTesting From 56ac3c19a9c6b53234c840bcb712278865adbf75 Mon Sep 17 00:00:00 2001 From: Kenzie Davisson Date: Fri, 4 Oct 2024 13:36:54 -0700 Subject: [PATCH 5/7] Use flutter icon --- .../logging_screen_v2/logging_table_row.dart | 42 ++++++++++++------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/packages/devtools_app/lib/src/screens/logging/logging_screen_v2/logging_table_row.dart b/packages/devtools_app/lib/src/screens/logging/logging_screen_v2/logging_table_row.dart index ac25469ed39..d12f3beb783 100644 --- a/packages/devtools_app/lib/src/screens/logging/logging_screen_v2/logging_table_row.dart +++ b/packages/devtools_app/lib/src/screens/logging/logging_screen_v2/logging_table_row.dart @@ -10,6 +10,7 @@ import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import '../../../shared/globals.dart'; +import '../../../shared/ui/icons.dart'; import '../../../shared/ui/utils.dart'; import 'logging_controller_v2.dart'; @@ -52,13 +53,7 @@ class LoggingTableRow extends StatefulWidget { // Ignore exception; [elapsedFrameTimeAsString] will be null. } - var kindIcon = Icons.crop_square_outlined; - if (data.kind == 'stdout' || data.kind == 'stderr') { - kindIcon = Icons.terminal_rounded; - } else if (RegExp(r'^flutter\..*$').hasMatch(data.kind)) { - kindIcon = Icons.flutter_dash; // TODO(kenz): use flutter icon - } - + final kindIcon = KindMetaDataChip.generateIcon(data.kind); return [ if (data.timestamp != null) WhenMetaDataChip( @@ -68,7 +63,8 @@ class LoggingTableRow extends StatefulWidget { KindMetaDataChip( data: data, maxWidth: maxWidth, - icon: kindIcon, + icon: kindIcon.icon, + iconAsset: kindIcon.iconAsset, ), if (elapsedFrameTimeAsString != null) FrameElapsedMetaDataChip( @@ -182,14 +178,16 @@ abstract class MetadataChip extends StatelessWidget { super.key, required this.data, required this.maxWidth, - required this.icon, required this.text, + this.icon, + this.iconAsset, this.includeLeadingPadding = true, }); final LogDataV2 data; final double maxWidth; final IconData? icon; + final String? iconAsset; final String text; final bool includeLeadingPadding; @@ -209,7 +207,9 @@ abstract class MetadataChip extends StatelessWidget { maxWidth: maxWidthInsidePadding, ); return Size( - (icon != null ? iconSize.width + iconPadding : 0.0) + + ((icon != null || iconAsset != null) + ? iconSize.width + iconPadding + : 0.0) + textSize.width + padding * horizontalPaddingCount, // Horizontal padding. max(iconSize.height, textSize.height) + padding * 2, // Vertical padding. @@ -230,9 +230,10 @@ abstract class MetadataChip extends StatelessWidget { child: Row( mainAxisSize: MainAxisSize.min, children: [ - if (icon != null) ...[ - Icon( - icon, + if (icon != null || iconAsset != null) ...[ + DevToolsIcon( + icon: icon, + iconAsset: iconAsset, size: defaultIconSize, color: Theme.of(context).colorScheme.subtleTextColor, ), @@ -276,8 +277,21 @@ class KindMetaDataChip extends MetadataChip { super.key, required super.data, required super.maxWidth, - required super.icon, + super.icon, + super.iconAsset, }) : super(text: data.kind); + + static ({IconData? icon, String? iconAsset}) generateIcon(String kind) { + IconData? kindIcon = Icons.list_rounded; + String? kindIconAsset; + if (kind == 'stdout' || kind == 'stderr') { + kindIcon = Icons.terminal_rounded; + } else if (RegExp(r'^flutter\..*$').hasMatch(kind)) { + kindIconAsset = 'icons/flutter.png'; + kindIcon = null; + } + return (icon: kindIcon, iconAsset: kindIconAsset); + } } @visibleForTesting From 7837ebd0ac076a0ba72bab145a0e598dd6481f6f Mon Sep 17 00:00:00 2001 From: Kenzie Davisson Date: Fri, 4 Oct 2024 13:50:04 -0700 Subject: [PATCH 6/7] revert flag --- packages/devtools_app/lib/src/shared/feature_flags.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/devtools_app/lib/src/shared/feature_flags.dart b/packages/devtools_app/lib/src/shared/feature_flags.dart index 041d35b1600..8901a3b4195 100644 --- a/packages/devtools_app/lib/src/shared/feature_flags.dart +++ b/packages/devtools_app/lib/src/shared/feature_flags.dart @@ -87,7 +87,7 @@ abstract class FeatureFlags { /// Flag to enable the new Logging experience. /// /// https://github.com/flutter/devtools/issues/7703 - static bool loggingV2 = true; + static bool loggingV2 = enableExperiments; /// Flag to enable debugging via DAP. /// From fbd1b0b370852ae990bcf370b193d1c5b097dd65 Mon Sep 17 00:00:00 2001 From: Kenzie Davisson Date: Fri, 4 Oct 2024 15:01:24 -0700 Subject: [PATCH 7/7] fix test --- .../screens/logging/logging_screen_v2/logging_table_row.dart | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/devtools_app/lib/src/screens/logging/logging_screen_v2/logging_table_row.dart b/packages/devtools_app/lib/src/screens/logging/logging_screen_v2/logging_table_row.dart index d12f3beb783..ce042f484b4 100644 --- a/packages/devtools_app/lib/src/screens/logging/logging_screen_v2/logging_table_row.dart +++ b/packages/devtools_app/lib/src/screens/logging/logging_screen_v2/logging_table_row.dart @@ -238,7 +238,10 @@ abstract class MetadataChip extends StatelessWidget { color: Theme.of(context).colorScheme.subtleTextColor, ), const SizedBox(width: iconPadding), - ], + ] else + // Include an empty SizedBox to ensure a consistent height for the + // chips, regardless of whether the chip includes an icon. + SizedBox(height: defaultIconSize), RichText( text: _buildValueText(), ),