Commit fa1b8d58 authored by xster's avatar xster Committed by GitHub

A low scope error message height fix for #3091 (#7685)

* Print the error message multiple times to avoid overlap with status bar and add paragraph to mock_canvas
parent 650b939f
...@@ -9,6 +9,8 @@ import 'object.dart'; ...@@ -9,6 +9,8 @@ import 'object.dart';
const double _kMaxWidth = 100000.0; const double _kMaxWidth = 100000.0;
const double _kMaxHeight = 100000.0; const double _kMaxHeight = 100000.0;
// Line length to fit small phones without dynamically checking size.
const String line = '\n────────────────────\n\n';
/// A render object used as a placeholder when an error occurs. /// A render object used as a placeholder when an error occurs.
/// ///
...@@ -42,7 +44,10 @@ class RenderErrorBox extends RenderBox { ...@@ -42,7 +44,10 @@ class RenderErrorBox extends RenderBox {
// see the paragraph.dart file and the RenderParagraph class. // see the paragraph.dart file and the RenderParagraph class.
ui.ParagraphBuilder builder = new ui.ParagraphBuilder(paragraphStyle); ui.ParagraphBuilder builder = new ui.ParagraphBuilder(paragraphStyle);
builder.pushStyle(textStyle); builder.pushStyle(textStyle);
builder.addText(message); builder.addText(
'$message$line$message$line$message$line$message$line$message$line$message$line'
'$message$line$message$line$message$line$message$line$message$line$message'
);
_paragraph = builder.build(); _paragraph = builder.build();
} }
} catch (e) { } } catch (e) { }
...@@ -79,14 +84,15 @@ class RenderErrorBox extends RenderBox { ...@@ -79,14 +84,15 @@ class RenderErrorBox extends RenderBox {
/// The text style to use when painting [RenderErrorBox] objects. /// The text style to use when painting [RenderErrorBox] objects.
static ui.TextStyle textStyle = new ui.TextStyle( static ui.TextStyle textStyle = new ui.TextStyle(
color: const Color(0xFFFFFF00), color: const Color(0xFFFFFF66),
fontFamily: 'monospace', fontFamily: 'monospace',
fontSize: 7.0 fontSize: 14.0,
fontWeight: FontWeight.bold
); );
/// The paragraph style to use when painting [RenderErrorBox] objects. /// The paragraph style to use when painting [RenderErrorBox] objects.
static ui.ParagraphStyle paragraphStyle = new ui.ParagraphStyle( static ui.ParagraphStyle paragraphStyle = new ui.ParagraphStyle(
lineHeight: 0.25 // TODO(ianh): https://github.com/flutter/flutter/issues/2460 will affect this lineHeight: 0.85
); );
@override @override
...@@ -104,6 +110,7 @@ class RenderErrorBox extends RenderBox { ...@@ -104,6 +110,7 @@ class RenderErrorBox extends RenderBox {
width = size.width; width = size.width;
} }
_paragraph.layout(new ui.ParagraphConstraints(width: width)); _paragraph.layout(new ui.ParagraphConstraints(width: width));
context.canvas.drawParagraph(_paragraph, offset); context.canvas.drawParagraph(_paragraph, offset);
} }
} catch (e) { } } catch (e) { }
......
// Copyright 2017 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_test/flutter_test.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/widgets.dart';
import '../rendering/mock_canvas.dart';
/// Unit tests error.dart's usage via ErrorWidget.
void main() {
final String errorMessage = 'Some error message';
testWidgets('test draw error paragraph', (WidgetTester tester) async {
await tester.pumpWidget(new ErrorWidget(new Exception(errorMessage)));
expect(find.byType(ErrorWidget), paints
..rect(rect: new Rect.fromLTWH(0.0, 0.0, 800.0, 600.0))
..paragraph(offset: Offset.zero));
});
}
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
import 'dart:ui' as ui show Paragraph;
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
...@@ -182,6 +184,15 @@ abstract class PaintPattern { ...@@ -182,6 +184,15 @@ abstract class PaintPattern {
/// [Canvas.drawLine] call are ignored. /// [Canvas.drawLine] call are ignored.
void line({ Color color, bool hasMaskFilter, PaintingStyle style }); void line({ Color color, bool hasMaskFilter, PaintingStyle style });
/// Indicates that a paragraph is expected next.
///
/// Calls are skipped until a call to [Canvas.drawParagraph] is found. Any
/// arguments that are passed to this method are compared to the actual
/// [Canvas.drawParagraph] call's argument, and any mismatches result in failure.
///
/// If no call to [Canvas.drawParagraph] was made, then this results in failure.
void paragraph({ ui.Paragraph paragraph, Offset offset });
/// Provides a custom matcher. /// Provides a custom matcher.
/// ///
/// Each method call after the last matched call (if any) will be passed to /// Each method call after the last matched call (if any) will be passed to
...@@ -269,6 +280,11 @@ class _TestRecordingCanvasPatternMatcher extends Matcher implements PaintPattern ...@@ -269,6 +280,11 @@ class _TestRecordingCanvasPatternMatcher extends Matcher implements PaintPattern
_predicates.add(new _LinePaintPredicate(color: color, hasMaskFilter: hasMaskFilter, style: style)); _predicates.add(new _LinePaintPredicate(color: color, hasMaskFilter: hasMaskFilter, style: style));
} }
@override
void paragraph({ ui.Paragraph paragraph, Offset offset }) {
_predicates.add(new _FunctionPaintPredicate(#drawParagraph, <dynamic>[paragraph, offset]));
}
@override @override
void something(PaintPatternPredicate predicate) { void something(PaintPatternPredicate predicate) {
_predicates.add(new _SomethingPaintPredicate(predicate)); _predicates.add(new _SomethingPaintPredicate(predicate));
......
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