From 0d152a6ba9fdecda148e3de80798657016a01409 Mon Sep 17 00:00:00 2001 From: Dwayne Slater Date: Sun, 16 Apr 2017 22:01:37 -0400 Subject: [PATCH] fix DefaultTextStyle not notifying updates for some changes (#9416) --- packages/flutter/lib/src/widgets/text.dart | 8 +++- .../test/widgets/default_text_style_test.dart | 43 +++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 packages/flutter/test/widgets/default_text_style_test.dart diff --git a/packages/flutter/lib/src/widgets/text.dart b/packages/flutter/lib/src/widgets/text.dart index e7b3059cec..c0dbc0ac97 100644 --- a/packages/flutter/lib/src/widgets/text.dart +++ b/packages/flutter/lib/src/widgets/text.dart @@ -108,7 +108,13 @@ class DefaultTextStyle extends InheritedWidget { } @override - bool updateShouldNotify(DefaultTextStyle old) => style != old.style; + bool updateShouldNotify(DefaultTextStyle old) { + return style != old.style || + textAlign != old.textAlign || + softWrap != old.softWrap || + overflow != old.overflow || + maxLines != old.maxLines; + } @override void debugFillDescription(List description) { diff --git a/packages/flutter/test/widgets/default_text_style_test.dart b/packages/flutter/test/widgets/default_text_style_test.dart new file mode 100644 index 0000000000..28da82627e --- /dev/null +++ b/packages/flutter/test/widgets/default_text_style_test.dart @@ -0,0 +1,43 @@ +// 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/widgets.dart'; + +void main() { + testWidgets('DefaultTextStyle changes propagate to Text', (WidgetTester tester) async { + const Text textWidget = const Text('Hello'); + const TextStyle s1 = const TextStyle( + fontSize: 10.0, + fontWeight: FontWeight.w800, + height: 123.0, + ); + + await tester.pumpWidget(const DefaultTextStyle( + style: s1, + child: textWidget + )); + + RichText text = tester.firstWidget(find.byType(RichText)); + expect(text, isNotNull); + expect(text.text.style, s1); + + await tester.pumpWidget(const DefaultTextStyle( + style: s1, + textAlign: TextAlign.justify, + softWrap: false, + overflow: TextOverflow.fade, + maxLines: 3, + child: textWidget + )); + + text = tester.firstWidget(find.byType(RichText)); + expect(text, isNotNull); + expect(text.text.style, s1); + expect(text.textAlign, TextAlign.justify); + expect(text.softWrap, false); + expect(text.overflow, TextOverflow.fade); + expect(text.maxLines, 3); + }); +}