Unverified Commit 6feedcc6 authored by Jonah Williams's avatar Jonah Williams Committed by GitHub

use toFixedAsString and DoubleProperty in diagnosticProperties (#33488)

parent 0df3ec6b
...@@ -24,7 +24,8 @@ import 'print.dart'; ...@@ -24,7 +24,8 @@ import 'print.dart';
bool debugAssertAllFoundationVarsUnset(String reason, { DebugPrintCallback debugPrintOverride = debugPrintThrottled }) { bool debugAssertAllFoundationVarsUnset(String reason, { DebugPrintCallback debugPrintOverride = debugPrintThrottled }) {
assert(() { assert(() {
if (debugPrint != debugPrintOverride || if (debugPrint != debugPrintOverride ||
debugDefaultTargetPlatformOverride != null) debugDefaultTargetPlatformOverride != null ||
debugDoublePrecision != null)
throw FlutterError(reason); throw FlutterError(reason);
return true; return true;
}()); }());
...@@ -73,3 +74,21 @@ Future<T> debugInstrumentAction<T>(String description, Future<T> action()) { ...@@ -73,3 +74,21 @@ Future<T> debugInstrumentAction<T>(String description, Future<T> action()) {
const Map<String, String> timelineWhitelistArguments = <String, String>{ const Map<String, String> timelineWhitelistArguments = <String, String>{
'mode': 'basic', 'mode': 'basic',
}; };
/// Configure [debugFormatDouble] using [num.toStringAsPrecision].
///
/// Defaults to null, which uses the default logic of [debugFormatDouble].
int debugDoublePrecision;
/// Formats a double to have standard formatting.
///
/// This behavior can be overriden by [debugDoublePrecision].
String debugFormatDouble(double value) {
if (value == null) {
return 'null';
}
if (debugDoublePrecision != null) {
return value.toStringAsPrecision(debugDoublePrecision);
}
return value.toStringAsFixed(1);
}
...@@ -7,6 +7,7 @@ import 'dart:math' as math; ...@@ -7,6 +7,7 @@ import 'dart:math' as math;
import 'package:meta/meta.dart'; import 'package:meta/meta.dart';
import 'assertions.dart'; import 'assertions.dart';
import 'debug.dart';
// Examples can assume: // Examples can assume:
// int rows, columns; // int rows, columns;
...@@ -1911,7 +1912,7 @@ class DoubleProperty extends _NumProperty<double> { ...@@ -1911,7 +1912,7 @@ class DoubleProperty extends _NumProperty<double> {
); );
@override @override
String numberToString() => value?.toStringAsFixed(1); String numberToString() => debugFormatDouble(value);
} }
/// An int valued property with an optional unit the value is measured in. /// An int valued property with an optional unit the value is measured in.
......
...@@ -105,7 +105,7 @@ class BottomSheetThemeData extends Diagnosticable { ...@@ -105,7 +105,7 @@ class BottomSheetThemeData extends Diagnosticable {
void debugFillProperties(DiagnosticPropertiesBuilder properties) { void debugFillProperties(DiagnosticPropertiesBuilder properties) {
super.debugFillProperties(properties); super.debugFillProperties(properties);
properties.add(DiagnosticsProperty<Color>('backgroundColor', backgroundColor, defaultValue: null)); properties.add(DiagnosticsProperty<Color>('backgroundColor', backgroundColor, defaultValue: null));
properties.add(DiagnosticsProperty<double>('elevation', elevation, defaultValue: null)); properties.add(DoubleProperty('elevation', elevation, defaultValue: null));
properties.add(DiagnosticsProperty<ShapeBorder>('shape', shape, defaultValue: null)); properties.add(DiagnosticsProperty<ShapeBorder>('shape', shape, defaultValue: null));
} }
} }
...@@ -122,7 +122,7 @@ class DialogTheme extends Diagnosticable { ...@@ -122,7 +122,7 @@ class DialogTheme extends Diagnosticable {
super.debugFillProperties(properties); super.debugFillProperties(properties);
properties.add(DiagnosticsProperty<Color>('backgroundColor', backgroundColor)); properties.add(DiagnosticsProperty<Color>('backgroundColor', backgroundColor));
properties.add(DiagnosticsProperty<ShapeBorder>('shape', shape, defaultValue: null)); properties.add(DiagnosticsProperty<ShapeBorder>('shape', shape, defaultValue: null));
properties.add(DiagnosticsProperty<double>('elevation', elevation)); properties.add(DoubleProperty('elevation', elevation));
properties.add(DiagnosticsProperty<TextStyle>('titleTextStyle', titleTextStyle, defaultValue: null)); properties.add(DiagnosticsProperty<TextStyle>('titleTextStyle', titleTextStyle, defaultValue: null));
properties.add(DiagnosticsProperty<TextStyle>('contentTextStyle', contentTextStyle, defaultValue: null)); properties.add(DiagnosticsProperty<TextStyle>('contentTextStyle', contentTextStyle, defaultValue: null));
} }
......
...@@ -179,11 +179,11 @@ class FloatingActionButtonThemeData extends Diagnosticable { ...@@ -179,11 +179,11 @@ class FloatingActionButtonThemeData extends Diagnosticable {
properties.add(DiagnosticsProperty<Color>('backgroundColor', backgroundColor, defaultValue: defaultData.backgroundColor)); properties.add(DiagnosticsProperty<Color>('backgroundColor', backgroundColor, defaultValue: defaultData.backgroundColor));
properties.add(DiagnosticsProperty<Color>('focusColor', focusColor, defaultValue: defaultData.focusColor)); properties.add(DiagnosticsProperty<Color>('focusColor', focusColor, defaultValue: defaultData.focusColor));
properties.add(DiagnosticsProperty<Color>('hoverColor', hoverColor, defaultValue: defaultData.hoverColor)); properties.add(DiagnosticsProperty<Color>('hoverColor', hoverColor, defaultValue: defaultData.hoverColor));
properties.add(DiagnosticsProperty<double>('elevation', elevation, defaultValue: defaultData.elevation)); properties.add(DoubleProperty('elevation', elevation, defaultValue: defaultData.elevation));
properties.add(DiagnosticsProperty<double>('focusElevation', focusElevation, defaultValue: defaultData.focusElevation)); properties.add(DoubleProperty('focusElevation', focusElevation, defaultValue: defaultData.focusElevation));
properties.add(DiagnosticsProperty<double>('hoverElevation', hoverElevation, defaultValue: defaultData.hoverElevation)); properties.add(DoubleProperty('hoverElevation', hoverElevation, defaultValue: defaultData.hoverElevation));
properties.add(DiagnosticsProperty<double>('disabledElevation', disabledElevation, defaultValue: defaultData.disabledElevation)); properties.add(DoubleProperty('disabledElevation', disabledElevation, defaultValue: defaultData.disabledElevation));
properties.add(DiagnosticsProperty<double>('highlightElevation', highlightElevation, defaultValue: defaultData.highlightElevation)); properties.add(DoubleProperty('highlightElevation', highlightElevation, defaultValue: defaultData.highlightElevation));
properties.add(DiagnosticsProperty<ShapeBorder>('shape', shape, defaultValue: defaultData.shape)); properties.add(DiagnosticsProperty<ShapeBorder>('shape', shape, defaultValue: defaultData.shape));
} }
} }
...@@ -166,7 +166,7 @@ class SnackBarThemeData extends Diagnosticable { ...@@ -166,7 +166,7 @@ class SnackBarThemeData extends Diagnosticable {
properties.add(DiagnosticsProperty<Color>('backgroundColor', backgroundColor, defaultValue: null)); properties.add(DiagnosticsProperty<Color>('backgroundColor', backgroundColor, defaultValue: null));
properties.add(DiagnosticsProperty<Color>('actionTextColor', actionTextColor, defaultValue: null)); properties.add(DiagnosticsProperty<Color>('actionTextColor', actionTextColor, defaultValue: null));
properties.add(DiagnosticsProperty<Color>('disabledActionTextColor', disabledActionTextColor, defaultValue: null)); properties.add(DiagnosticsProperty<Color>('disabledActionTextColor', disabledActionTextColor, defaultValue: null));
properties.add(DiagnosticsProperty<double>('elevation', elevation, defaultValue: null)); properties.add(DoubleProperty('elevation', elevation, defaultValue: null));
properties.add(DiagnosticsProperty<ShapeBorder>('shape', shape, defaultValue: null)); properties.add(DiagnosticsProperty<ShapeBorder>('shape', shape, defaultValue: null));
properties.add(DiagnosticsProperty<SnackBarBehavior>('behavior', behavior, defaultValue: null)); properties.add(DiagnosticsProperty<SnackBarBehavior>('behavior', behavior, defaultValue: null));
} }
......
...@@ -238,7 +238,7 @@ class FlutterLogoDecoration extends Decoration { ...@@ -238,7 +238,7 @@ class FlutterLogoDecoration extends Decoration {
properties.add(DiagnosticsNode.message('$lightColor/$darkColor on $textColor')); properties.add(DiagnosticsNode.message('$lightColor/$darkColor on $textColor'));
properties.add(EnumProperty<FlutterLogoStyle>('style', style)); properties.add(EnumProperty<FlutterLogoStyle>('style', style));
if (_inTransition) if (_inTransition)
properties.add(DiagnosticsNode.message('transition $_position:$_opacity')); properties.add(DiagnosticsNode.message('transition ${debugFormatDouble(_position)}:${debugFormatDouble(_opacity)}'));
} }
} }
......
...@@ -41,7 +41,7 @@ class ImageInfo { ...@@ -41,7 +41,7 @@ class ImageInfo {
final double scale; final double scale;
@override @override
String toString() => '$image @ ${scale}x'; String toString() => '$image @ ${debugFormatDouble(scale)}x';
@override @override
int get hashCode => hashValues(image, scale); int get hashCode => hashValues(image, scale);
......
...@@ -265,9 +265,12 @@ class MatrixUtils { ...@@ -265,9 +265,12 @@ class MatrixUtils {
List<String> debugDescribeTransform(Matrix4 transform) { List<String> debugDescribeTransform(Matrix4 transform) {
if (transform == null) if (transform == null)
return const <String>['null']; return const <String>['null'];
final List<String> matrix = transform.toString().split('\n').toList(); return <String>[
matrix.removeLast(); '[0] ${debugFormatDouble(transform.entry(0, 0))},${debugFormatDouble(transform.entry(0, 1))},${debugFormatDouble(transform.entry(0, 2))},${debugFormatDouble(transform.entry(0, 3))}',
return matrix; '[1] ${debugFormatDouble(transform.entry(1, 0))},${debugFormatDouble(transform.entry(1, 1))},${debugFormatDouble(transform.entry(1, 2))},${debugFormatDouble(transform.entry(1, 3))}',
'[2] ${debugFormatDouble(transform.entry(2, 0))},${debugFormatDouble(transform.entry(2, 1))},${debugFormatDouble(transform.entry(2, 2))},${debugFormatDouble(transform.entry(2, 3))}',
'[3] ${debugFormatDouble(transform.entry(3, 0))},${debugFormatDouble(transform.entry(3, 1))},${debugFormatDouble(transform.entry(3, 2))},${debugFormatDouble(transform.entry(3, 3))}',
];
} }
/// Property which handles [Matrix4] that represent transforms. /// Property which handles [Matrix4] that represent transforms.
...@@ -296,13 +299,13 @@ class TransformProperty extends DiagnosticsProperty<Matrix4> { ...@@ -296,13 +299,13 @@ class TransformProperty extends DiagnosticsProperty<Matrix4> {
if (parentConfiguration != null && !parentConfiguration.lineBreakProperties) { if (parentConfiguration != null && !parentConfiguration.lineBreakProperties) {
// Format the value on a single line to be compatible with the parent's // Format the value on a single line to be compatible with the parent's
// style. // style.
final List<Vector4> rows = <Vector4>[ final List<String> values = <String>[
value.getRow(0), '${debugFormatDouble(value.entry(0, 0))},${debugFormatDouble(value.entry(0, 1))},${debugFormatDouble(value.entry(0, 2))},${debugFormatDouble(value.entry(0, 3))}',
value.getRow(1), '${debugFormatDouble(value.entry(1, 0))},${debugFormatDouble(value.entry(1, 1))},${debugFormatDouble(value.entry(1, 2))},${debugFormatDouble(value.entry(1, 3))}',
value.getRow(2), '${debugFormatDouble(value.entry(2, 0))},${debugFormatDouble(value.entry(2, 1))},${debugFormatDouble(value.entry(2, 2))},${debugFormatDouble(value.entry(2, 3))}',
value.getRow(3), '${debugFormatDouble(value.entry(3, 0))},${debugFormatDouble(value.entry(3, 1))},${debugFormatDouble(value.entry(3, 2))},${debugFormatDouble(value.entry(3, 3))}',
]; ];
return '[${rows.join("; ")}]'; return '[${values.join('; ')}]';
} }
return debugDescribeTransform(value).join('\n'); return debugDescribeTransform(value).join('\n');
} }
......
...@@ -215,17 +215,17 @@ class StackParentData extends ContainerBoxParentData<RenderBox> { ...@@ -215,17 +215,17 @@ class StackParentData extends ContainerBoxParentData<RenderBox> {
String toString() { String toString() {
final List<String> values = <String>[]; final List<String> values = <String>[];
if (top != null) if (top != null)
values.add('top=$top'); values.add('top=${debugFormatDouble(top)}');
if (right != null) if (right != null)
values.add('right=$right'); values.add('right=${debugFormatDouble(right)}');
if (bottom != null) if (bottom != null)
values.add('bottom=$bottom'); values.add('bottom=${debugFormatDouble(bottom)}');
if (left != null) if (left != null)
values.add('left=$left'); values.add('left=${debugFormatDouble(left)}');
if (width != null) if (width != null)
values.add('width=$width'); values.add('width=${debugFormatDouble(width)}');
if (height != null) if (height != null)
values.add('height=$height'); values.add('height=${debugFormatDouble(height)}');
if (values.isEmpty) if (values.isEmpty)
values.add('not positioned'); values.add('not positioned');
values.add(super.toString()); values.add(super.toString());
......
...@@ -141,7 +141,7 @@ class FixedColumnWidth extends TableColumnWidth { ...@@ -141,7 +141,7 @@ class FixedColumnWidth extends TableColumnWidth {
} }
@override @override
String toString() => '$runtimeType($value)'; String toString() => '$runtimeType(${debugFormatDouble(value)})';
} }
/// Sizes the column to a fraction of the table's constraints' maxWidth. /// Sizes the column to a fraction of the table's constraints' maxWidth.
...@@ -210,7 +210,7 @@ class FlexColumnWidth extends TableColumnWidth { ...@@ -210,7 +210,7 @@ class FlexColumnWidth extends TableColumnWidth {
} }
@override @override
String toString() => '$runtimeType($value)'; String toString() => '$runtimeType(${debugFormatDouble(value)})';
} }
/// Sizes the column such that it is the size that is the maximum of /// Sizes the column such that it is the size that is the maximum of
...@@ -1178,8 +1178,8 @@ class RenderTable extends RenderBox { ...@@ -1178,8 +1178,8 @@ class RenderTable extends RenderBox {
properties.add(DiagnosticsProperty<Map<int, TableColumnWidth>>('specified column widths', _columnWidths, level: _columnWidths.isEmpty ? DiagnosticLevel.hidden : DiagnosticLevel.info)); properties.add(DiagnosticsProperty<Map<int, TableColumnWidth>>('specified column widths', _columnWidths, level: _columnWidths.isEmpty ? DiagnosticLevel.hidden : DiagnosticLevel.info));
properties.add(DiagnosticsProperty<TableColumnWidth>('default column width', defaultColumnWidth)); properties.add(DiagnosticsProperty<TableColumnWidth>('default column width', defaultColumnWidth));
properties.add(MessageProperty('table size', '$columns\u00D7$rows')); properties.add(MessageProperty('table size', '$columns\u00D7$rows'));
properties.add(IterableProperty<double>('column offsets', _columnLefts, ifNull: 'unknown')); properties.add(IterableProperty<String>('column offsets', _columnLefts?.map(debugFormatDouble), ifNull: 'unknown'));
properties.add(IterableProperty<double>('row offsets', _rowTops, ifNull: 'unknown')); properties.add(IterableProperty<String>('row offsets', _rowTops?.map(debugFormatDouble), ifNull: 'unknown'));
} }
@override @override
......
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:flutter/foundation.dart';
import '../flutter_test_alternative.dart';
void main() {
test('debugFormatDouble formats doubles', () {
expect(debugFormatDouble(1), '1.0');
expect(debugFormatDouble(1.1), '1.1');
expect(debugFormatDouble(null), 'null');
});
test('debugDoublePrecision can control double precision', () {
debugDoublePrecision = 3;
expect(debugFormatDouble(1), '1.00');
debugDoublePrecision = null;
});
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment