From c272911a104dbd69ec47e888446e67373a87a7ed Mon Sep 17 00:00:00 2001 From: Dao Hoang Son Date: Fri, 28 Jan 2022 22:59:49 +0700 Subject: [PATCH 1/5] Add test for #698 --- packages/core/test/core_test.dart | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/packages/core/test/core_test.dart b/packages/core/test/core_test.dart index 2db0e2dc7..7ecfec4fa 100644 --- a/packages/core/test/core_test.dart +++ b/packages/core/test/core_test.dart @@ -1,3 +1,4 @@ +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_widget_from_html_core/flutter_widget_from_html_core.dart'; @@ -1585,6 +1586,22 @@ Future main() async { }); }); }); + + testWidgets('#698: MaterialApp > CupertinoPageScaffold', (tester) async { + const html = 'Hello world'; + final key = GlobalKey(); + + await tester.pumpWidget( + MaterialApp( + home: CupertinoPageScaffold( + child: HtmlWidget(html, key: key), + ), + ), + ); + + final explained = await explainWithoutPumping(key: key); + expect(explained, equals('[RichText:(#D0FF0000:$html)]')); + }); } class _InlineBlockOnWidgetsFactory extends WidgetFactory { From 42639afe0be6e1ed2202400811656a46b6de4356 Mon Sep 17 00:00:00 2001 From: Dao Hoang Son Date: Fri, 28 Jan 2022 23:01:06 +0700 Subject: [PATCH 2/5] Relax assertions --- packages/core/lib/src/data/text_style.dart | 6 --- .../fwfh_text_style/lib/fwfh_text_style.dart | 37 +++++++++++++------ 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/packages/core/lib/src/data/text_style.dart b/packages/core/lib/src/data/text_style.dart index 8b4a50cb4..67e9730d3 100644 --- a/packages/core/lib/src/data/text_style.dart +++ b/packages/core/lib/src/data/text_style.dart @@ -57,12 +57,6 @@ class TextStyleHtml { TextDirection? textDirection, CssWhitespace? whitespace, }) { - assert( - style is FwfhTextStyle?, - 'The text style should be modified by methods of the existing instance: ' - 'apply(), copyWith() or merge().', - ); - return TextStyleHtml._( deps: _deps, parent: parent ?? this.parent, diff --git a/packages/fwfh_text_style/lib/fwfh_text_style.dart b/packages/fwfh_text_style/lib/fwfh_text_style.dart index b25a083fc..6e44a83b2 100644 --- a/packages/fwfh_text_style/lib/fwfh_text_style.dart +++ b/packages/fwfh_text_style/lib/fwfh_text_style.dart @@ -7,16 +7,33 @@ const _default = _DefaultValue(); /// A [TextStyle] replacement. class FwfhTextStyle extends _TextStyleProxy { - /// Creates an instance from a [TextStyle] with inherit=false. + /// Creates an instance from another [TextStyle]. /// /// See also: [FwfhTextStyle.of]. - FwfhTextStyle.from(TextStyle ref) - : super._(ref is FwfhTextStyle ? ref.ref : ref); + static TextStyle from(TextStyle ref) { + if (ref.inherit) { + debugPrint( + 'Warning: Text style instance #${ref.hashCode} has inherit=true, ' + 'resetting its height will not be supported.', + ); + assert( + () { + debugPrint(StackTrace.current.toString()); + return true; + }(), + ); + return ref; + } else { + return FwfhTextStyle._(ref is FwfhTextStyle ? ref.ref : ref); + } + } /// Creates an instance from the closest [DefaultTextStyle]. - factory FwfhTextStyle.of(BuildContext context) => + static TextStyle of(BuildContext context) => FwfhTextStyle.from(DefaultTextStyle.of(context).style); + FwfhTextStyle._(TextStyle ref) : super._(ref); + @override TextStyle apply({ Color? color, @@ -163,12 +180,7 @@ class _DefaultValue { abstract class _TextStyleProxy implements TextStyle { final TextStyle ref; - _TextStyleProxy._(this.ref) - : assert( - ref.inherit == false, - "FwfhTextStyle.from() doesn't support incomplete TextStyle. " - 'Use `DefaultTextStyle.of(context)` to obtain the current style.', - ); + _TextStyleProxy._(this.ref); @override Paint? get background => ref.background; @@ -279,8 +291,11 @@ abstract class _TextStyleProxy implements TextStyle { @override double? get height => ref.height; + /// Flutter's [TextStyle.merge] implementation uses private properties + /// which will trigger weird errors in people's apps. + /// We cannot let that happen. @override - bool get inherit => ref.inherit; + bool get inherit => false; @override TextLeadingDistribution? get leadingDistribution => ref.leadingDistribution; From ea3b76485294b17b4c9593c37c06018e717cfd65 Mon Sep 17 00:00:00 2001 From: Dao Hoang Son Date: Fri, 28 Jan 2022 23:07:27 +0700 Subject: [PATCH 3/5] Add ignore: avoid_redundant_argument_values --- packages/fwfh_text_style/test/fwfh_text_style_test.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/fwfh_text_style/test/fwfh_text_style_test.dart b/packages/fwfh_text_style/test/fwfh_text_style_test.dart index 4ffd9af77..770577141 100644 --- a/packages/fwfh_text_style/test/fwfh_text_style_test.dart +++ b/packages/fwfh_text_style/test/fwfh_text_style_test.dart @@ -120,6 +120,7 @@ Future main() async { }); test('resets to null', () { + // ignore: avoid_redundant_argument_values final copied = obj.copyWith(height: null); expect(copied.height, isNull); expect(copied, isNot(equals(obj))); From 875cd0e73ec48ee25e82a7a9a13b04f27cf995a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=90=C3=A0o=20Ho=C3=A0ng=20S=C6=A1n?= Date: Fri, 28 Jan 2022 17:09:53 +0000 Subject: [PATCH 4/5] Add test --- .../fwfh_text_style/CupertinoPageScaffold.png | Bin 0 -> 7829 bytes .../test/fwfh_text_style_test.dart | 22 ++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 demo_app/test/fwfh_text_style/CupertinoPageScaffold.png diff --git a/demo_app/test/fwfh_text_style/CupertinoPageScaffold.png b/demo_app/test/fwfh_text_style/CupertinoPageScaffold.png new file mode 100644 index 0000000000000000000000000000000000000000..7472ebdaa4a6f076ceb2d620974d6a56a1cc1138 GIT binary patch literal 7829 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 main() async { await screenMatchesGolden(tester, 'TextSpan'); }); + + testGoldens( + '#698: MaterialApp > CupertinoPageScaffold', + (tester) async { + await tester.pumpWidget( + MaterialApp( + home: CupertinoPageScaffold( + child: Builder( + builder: (context) => Text( + 'Foo Roboto', + style: FwfhTextStyle.of(context) + .copyWith(fontFamily: 'Roboto'), + ), + ), + ), + ), + ); + + await screenMatchesGolden(tester, 'CupertinoPageScaffold'); + }, + ); }, skip: goldenSkip, ); From 944a7cb2c8ed20cc227281923fe12ce27b73eeda Mon Sep 17 00:00:00 2001 From: Dao Hoang Son Date: Sat, 29 Jan 2022 00:36:42 +0700 Subject: [PATCH 5/5] Update backward_compatibility.yml --- .github/workflows/backward_compatibility.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/backward_compatibility.yml b/.github/workflows/backward_compatibility.yml index 951c0b794..4c86f58be 100644 --- a/.github/workflows/backward_compatibility.yml +++ b/.github/workflows/backward_compatibility.yml @@ -75,6 +75,11 @@ jobs: flutter-version: ${{ env.FLUTTER_VERSION }} - run: flutter test + - uses: actions/upload-artifact@v2 + if: failure() + with: + name: failures + path: packages/${{ matrix.package }}/test/failures/ fwfh_text_style: strategy: @@ -109,3 +114,8 @@ jobs: channel: ${{ matrix.channel }} - run: flutter --version - run: flutter test + - uses: actions/upload-artifact@v2 + if: failure() + with: + name: failures + path: packages/fwfh_text_style/test/failures/