From 2f3af49b0aa11dd472def29db84a4942e313883b Mon Sep 17 00:00:00 2001 From: Adam Barth Date: Thu, 6 Aug 2015 22:42:13 -0700 Subject: [PATCH] Improve error messages for StyledText Now they give you a hint as to what went wrong. Also, in checked mode, they now throw during construction instead of during building. Fixes #418 --- packages/flutter/lib/widgets/basic.dart | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/flutter/lib/widgets/basic.dart b/packages/flutter/lib/widgets/basic.dart index d87e2140f4d..8153a760b34 100644 --- a/packages/flutter/lib/widgets/basic.dart +++ b/packages/flutter/lib/widgets/basic.dart @@ -463,16 +463,22 @@ class StyledText extends Component { // elements ::= "string" | [ *] // Where "string" is text to display and text-style is an instance of // TextStyle. The text-style applies to all of the elements that follow. - StyledText({ this.elements, Key key }) : super(key: key); + StyledText({ this.elements, Key key }) : super(key: key) { + assert(_toInline(elements) != null); + } final dynamic elements; RenderInline _toInline(dynamic element) { if (element is String) return new RenderText(element); - if (element is Iterable && element.first is TextStyle) - return new RenderStyled(element.first, element.skip(1).map(_toInline).toList()); - throw new ArgumentError("invalid elements"); + if (element is Iterable) { + dynamic first = element.first; + if (first is! TextStyle) + throw new ArgumentError("First element of Iterable is a ${first.runtimeType} not a TextStyle"); + return new RenderStyled(first, element.skip(1).map(_toInline).toList()); + } + throw new ArgumentError("Element is ${element.runtimeType} not a String or an Iterable"); } Widget build() {