From bd5c347193c84347833314751efe075b6233eecc Mon Sep 17 00:00:00 2001 From: Casey Hillers Date: Tue, 27 Sep 2022 08:15:59 -0700 Subject: [PATCH] Revert "Add support for Material 3 `Divider` and `VerticalDivider`" (#112471) --- dev/tools/gen_defaults/bin/gen_defaults.dart | 3 - .../gen_defaults/lib/divider_template.dart | 24 ------ .../api/lib/material/divider/divider.0.dart | 11 ++- .../api/lib/material/divider/divider.1.dart | 52 ------------- .../material/divider/vertical_divider.0.dart | 11 ++- .../material/divider/vertical_divider.1.dart | 52 ------------- .../test/material/divider/divider.0_test.dart | 28 ------- .../test/material/divider/divider.1_test.dart | 28 ------- .../divider/vertical_divider.0_test.dart | 28 ------- .../divider/vertical_divider.1_test.dart | 28 ------- .../flutter/lib/src/material/divider.dart | 49 +----------- .../test/material/divider_theme_test.dart | 74 ++----------------- 12 files changed, 24 insertions(+), 364 deletions(-) delete mode 100644 dev/tools/gen_defaults/lib/divider_template.dart delete mode 100644 examples/api/lib/material/divider/divider.1.dart delete mode 100644 examples/api/lib/material/divider/vertical_divider.1.dart delete mode 100644 examples/api/test/material/divider/divider.0_test.dart delete mode 100644 examples/api/test/material/divider/divider.1_test.dart delete mode 100644 examples/api/test/material/divider/vertical_divider.0_test.dart delete mode 100644 examples/api/test/material/divider/vertical_divider.1_test.dart diff --git a/dev/tools/gen_defaults/bin/gen_defaults.dart b/dev/tools/gen_defaults/bin/gen_defaults.dart index 00c6cd763f..ef1f32af64 100644 --- a/dev/tools/gen_defaults/bin/gen_defaults.dart +++ b/dev/tools/gen_defaults/bin/gen_defaults.dart @@ -24,7 +24,6 @@ import 'package:gen_defaults/button_template.dart'; import 'package:gen_defaults/card_template.dart'; import 'package:gen_defaults/checkbox_template.dart'; import 'package:gen_defaults/dialog_template.dart'; -import 'package:gen_defaults/divider_template.dart'; import 'package:gen_defaults/fab_template.dart'; import 'package:gen_defaults/filter_chip_template.dart'; import 'package:gen_defaults/icon_button_template.dart'; @@ -66,7 +65,6 @@ Future main(List args) async { 'date_picker_docked.json', 'date_picker_modal.json', 'dialog.json', - 'divider.json', 'dialog_fullscreen.json', 'elevation.json', 'fab_extended_primary.json', @@ -123,7 +121,6 @@ Future main(List args) async { CardTemplate('Card', '$materialLib/card.dart', tokens).updateFile(); CheckboxTemplate('Checkbox', '$materialLib/checkbox.dart', tokens).updateFile(); DialogTemplate('Dialog', '$materialLib/dialog.dart', tokens).updateFile(); - DividerTemplate('Divider', '$materialLib/divider.dart', tokens).updateFile(); FABTemplate('FAB', '$materialLib/floating_action_button.dart', tokens).updateFile(); FilterChipTemplate('ChoiceChip', '$materialLib/choice_chip.dart', tokens).updateFile(); FilterChipTemplate('FilterChip', '$materialLib/filter_chip.dart', tokens).updateFile(); diff --git a/dev/tools/gen_defaults/lib/divider_template.dart b/dev/tools/gen_defaults/lib/divider_template.dart deleted file mode 100644 index 2028dcbcc7..0000000000 --- a/dev/tools/gen_defaults/lib/divider_template.dart +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2014 The Flutter 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 'template.dart'; - -class DividerTemplate extends TokenTemplate { - const DividerTemplate(super.blockName, super.fileName, super.tokens, { - super.colorSchemePrefix = '_colors.', - super.textThemePrefix = '_textTheme.' - }); - - @override - String generate() => ''' -class _${blockName}DefaultsM3 extends DividerThemeData { - _${blockName}DefaultsM3(this.context) : super(thickness: ${tokens["md.comp.divider.thickness"]}); - - final BuildContext context; - late final ColorScheme _colors = Theme.of(context).colorScheme; - - @override Color? get color => ${componentColor("md.comp.divider")}; -} -'''; -} diff --git a/examples/api/lib/material/divider/divider.0.dart b/examples/api/lib/material/divider/divider.0.dart index 6672379269..5912c1f456 100644 --- a/examples/api/lib/material/divider/divider.0.dart +++ b/examples/api/lib/material/divider/divider.0.dart @@ -11,19 +11,22 @@ void main() => runApp(const MyApp()); class MyApp extends StatelessWidget { const MyApp({super.key}); + static const String _title = 'Flutter Code Sample'; + @override Widget build(BuildContext context) { return MaterialApp( + title: _title, home: Scaffold( - appBar: AppBar(title: const Text('Divider Sample')), - body: const DividerExample(), + appBar: AppBar(title: const Text(_title)), + body: const MyStatelessWidget(), ), ); } } -class DividerExample extends StatelessWidget { - const DividerExample({super.key}); +class MyStatelessWidget extends StatelessWidget { + const MyStatelessWidget({super.key}); @override Widget build(BuildContext context) { diff --git a/examples/api/lib/material/divider/divider.1.dart b/examples/api/lib/material/divider/divider.1.dart deleted file mode 100644 index 708e642152..0000000000 --- a/examples/api/lib/material/divider/divider.1.dart +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2014 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -/// Flutter code sample for [Divider]. - -import 'package:flutter/material.dart'; - -void main() => runApp(const MyApp()); - -class MyApp extends StatelessWidget { - const MyApp({super.key}); - - @override - Widget build(BuildContext context) { - return MaterialApp( - theme: ThemeData(colorSchemeSeed: const Color(0xff6750a4), useMaterial3: true), - home: Scaffold( - appBar: AppBar(title: const Text('Divider Sample')), - body: const DividerExample(), - ), - ); - } -} - -class DividerExample extends StatelessWidget { - const DividerExample({super.key}); - - @override - Widget build(BuildContext context) { - return Center( - child: Padding( - padding: const EdgeInsets.all(16.0), - child: Column( - children: const [ - Expanded( - child: Card( - child: SizedBox.expand(), - ), - ), - Divider(), - Expanded( - child: Card( - child: SizedBox.expand(), - ), - ), - ], - ), - ), - ); - } -} diff --git a/examples/api/lib/material/divider/vertical_divider.0.dart b/examples/api/lib/material/divider/vertical_divider.0.dart index 2bb5ad1e78..0a9a5cb71a 100644 --- a/examples/api/lib/material/divider/vertical_divider.0.dart +++ b/examples/api/lib/material/divider/vertical_divider.0.dart @@ -11,19 +11,22 @@ void main() => runApp(const MyApp()); class MyApp extends StatelessWidget { const MyApp({super.key}); + static const String _title = 'Flutter Code Sample'; + @override Widget build(BuildContext context) { return MaterialApp( + title: _title, home: Scaffold( - appBar: AppBar(title: const Text('VerticalDivider Sample')), - body: const DividerExample(), + appBar: AppBar(title: const Text(_title)), + body: const MyStatelessWidget(), ), ); } } -class DividerExample extends StatelessWidget { - const DividerExample({super.key}); +class MyStatelessWidget extends StatelessWidget { + const MyStatelessWidget({super.key}); @override Widget build(BuildContext context) { diff --git a/examples/api/lib/material/divider/vertical_divider.1.dart b/examples/api/lib/material/divider/vertical_divider.1.dart deleted file mode 100644 index 47a7b548dd..0000000000 --- a/examples/api/lib/material/divider/vertical_divider.1.dart +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2014 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -/// Flutter code sample for [Divider]. - -import 'package:flutter/material.dart'; - -void main() => runApp(const MyApp()); - -class MyApp extends StatelessWidget { - const MyApp({super.key}); - - @override - Widget build(BuildContext context) { - return MaterialApp( - theme: ThemeData(colorSchemeSeed: const Color(0xff6750a4), useMaterial3: true), - home: Scaffold( - appBar: AppBar(title: const Text('Divider Sample')), - body: const DividerExample(), - ), - ); - } -} - -class DividerExample extends StatelessWidget { - const DividerExample({super.key}); - - @override - Widget build(BuildContext context) { - return Center( - child: Padding( - padding: const EdgeInsets.all(16.0), - child: Row( - children: const [ - Expanded( - child: Card( - child: SizedBox.expand(), - ), - ), - VerticalDivider(), - Expanded( - child: Card( - child: SizedBox.expand(), - ), - ), - ], - ), - ), - ); - } -} diff --git a/examples/api/test/material/divider/divider.0_test.dart b/examples/api/test/material/divider/divider.0_test.dart deleted file mode 100644 index 825f0cbcc0..0000000000 --- a/examples/api/test/material/divider/divider.0_test.dart +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2014 The Flutter 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/material.dart'; -import 'package:flutter_api_samples/material/divider/divider.0.dart' as example; -import 'package:flutter_test/flutter_test.dart'; - -void main() { - testWidgets('Horizontal Divider', (WidgetTester tester) async { - await tester.pumpWidget( - const MaterialApp( - home: Scaffold( - body: example.MyApp(), - ), - ), - ); - - expect(find.byType(Divider), findsOneWidget); - - // Divider is positioned horizintally. - final Offset container = tester.getBottomLeft(find.byType(Container).first); - expect(container.dy, tester.getTopLeft(find.byType(Divider)).dy); - - final Offset subheader = tester.getTopLeft(find.text('Subheader')); - expect(subheader.dy, tester.getBottomLeft(find.byType(Divider)).dy); - }); -} diff --git a/examples/api/test/material/divider/divider.1_test.dart b/examples/api/test/material/divider/divider.1_test.dart deleted file mode 100644 index a0cedbbe45..0000000000 --- a/examples/api/test/material/divider/divider.1_test.dart +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2014 The Flutter 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/material.dart'; -import 'package:flutter_api_samples/material/divider/divider.1.dart' as example; -import 'package:flutter_test/flutter_test.dart'; - -void main() { - testWidgets('Horizontal Divider', (WidgetTester tester) async { - await tester.pumpWidget( - const MaterialApp( - home: Scaffold( - body: example.MyApp(), - ), - ), - ); - - expect(find.byType(Divider), findsOneWidget); - - // Divider is positioned horizontally. - Offset card = tester.getBottomLeft(find.byType(Card).first); - expect(card.dy, tester.getTopLeft(find.byType(Divider)).dy); - - card = tester.getTopLeft(find.byType(Card).last); - expect(card.dy, tester.getBottomLeft(find.byType(Divider)).dy); - }); -} diff --git a/examples/api/test/material/divider/vertical_divider.0_test.dart b/examples/api/test/material/divider/vertical_divider.0_test.dart deleted file mode 100644 index 63c7513557..0000000000 --- a/examples/api/test/material/divider/vertical_divider.0_test.dart +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2014 The Flutter 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/material.dart'; -import 'package:flutter_api_samples/material/divider/vertical_divider.0.dart' as example; -import 'package:flutter_test/flutter_test.dart'; - -void main() { - testWidgets('Vertical Divider', (WidgetTester tester) async { - await tester.pumpWidget( - const MaterialApp( - home: Scaffold( - body: example.MyApp(), - ), - ), - ); - - expect(find.byType(VerticalDivider), findsOneWidget); - - // Divider is positioned horizintally. - Offset expanded = tester.getTopRight(find.byType(Expanded).first); - expect(expanded.dx, tester.getTopLeft(find.byType(VerticalDivider)).dx); - - expanded = tester.getTopLeft(find.byType(Expanded).last); - expect(expanded.dx, tester.getTopRight(find.byType(VerticalDivider)).dx); - }); -} diff --git a/examples/api/test/material/divider/vertical_divider.1_test.dart b/examples/api/test/material/divider/vertical_divider.1_test.dart deleted file mode 100644 index 8840fee58b..0000000000 --- a/examples/api/test/material/divider/vertical_divider.1_test.dart +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2014 The Flutter 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/material.dart'; -import 'package:flutter_api_samples/material/divider/vertical_divider.1.dart' as example; -import 'package:flutter_test/flutter_test.dart'; - -void main() { - testWidgets('Vertical Divider', (WidgetTester tester) async { - await tester.pumpWidget( - const MaterialApp( - home: Scaffold( - body: example.MyApp(), - ), - ), - ); - - expect(find.byType(VerticalDivider), findsOneWidget); - - // Divider is positioned vertically. - Offset card = tester.getTopRight(find.byType(Card).first); - expect(card.dx, tester.getTopLeft(find.byType(VerticalDivider)).dx); - - card = tester.getTopLeft(find.byType(Card).last); - expect(card.dx, tester.getTopRight(find.byType(VerticalDivider)).dx); - }); -} diff --git a/packages/flutter/lib/src/material/divider.dart b/packages/flutter/lib/src/material/divider.dart index c3f30f4226..44b3f6649b 100644 --- a/packages/flutter/lib/src/material/divider.dart +++ b/packages/flutter/lib/src/material/divider.dart @@ -4,7 +4,6 @@ import 'package:flutter/widgets.dart'; -import 'color_scheme.dart'; import 'divider_theme.dart'; import 'theme.dart'; @@ -35,13 +34,6 @@ import 'theme.dart'; /// ** See code in examples/api/lib/material/divider/divider.0.dart ** /// {@end-tool} /// -/// {@tool dartpad} -/// This sample shows the creation of [Divider] widget, as described in: -/// https://m3.material.io/components/divider/overview -/// -/// ** See code in examples/api/lib/material/divider/divider.1.dart ** -/// {@end-tool} -/// /// See also: /// /// * [PopupMenuDivider], which is the equivalent but for popup menus. @@ -162,14 +154,11 @@ class Divider extends StatelessWidget { @override Widget build(BuildContext context) { - final ThemeData theme = Theme.of(context); final DividerThemeData dividerTheme = DividerTheme.of(context); - final DividerThemeData defaults = theme.useMaterial3 ? _DividerDefaultsM3(context) : const _DividerDefaultsM2(); final double height = this.height ?? dividerTheme.space ?? 16.0; - final double thickness = this.thickness ?? dividerTheme.thickness ?? defaults.thickness!; + final double thickness = this.thickness ?? dividerTheme.thickness ?? 0.0; final double indent = this.indent ?? dividerTheme.indent ?? 0.0; final double endIndent = this.endIndent ?? dividerTheme.endIndent ?? 0.0; - final Color? color = this.color ?? defaults.color; return SizedBox( height: height, @@ -206,13 +195,6 @@ class Divider extends StatelessWidget { /// ** See code in examples/api/lib/material/divider/vertical_divider.0.dart ** /// {@end-tool} /// -/// {@tool dartpad} -/// This sample shows the creation of [VerticalDivider] widget, as described in: -/// https://m3.material.io/components/divider/overview -/// -/// ** See code in examples/api/lib/material/divider/vertical_divider.1.dart ** -/// {@end-tool} -/// /// See also: /// /// * [ListView.separated], which can be used to generate vertical dividers. @@ -282,14 +264,11 @@ class VerticalDivider extends StatelessWidget { @override Widget build(BuildContext context) { - final ThemeData theme = Theme.of(context); final DividerThemeData dividerTheme = DividerTheme.of(context); - final DividerThemeData defaults = theme.useMaterial3 ? _DividerDefaultsM3(context) : const _DividerDefaultsM2(); final double width = this.width ?? dividerTheme.space ?? 16.0; - final double thickness = this.thickness ?? dividerTheme.thickness ?? defaults.thickness!; + final double thickness = this.thickness ?? dividerTheme.thickness ?? 0.0; final double indent = this.indent ?? dividerTheme.indent ?? 0.0; final double endIndent = this.endIndent ?? dividerTheme.endIndent ?? 0.0; - final Color? color = this.color ?? defaults.color; return SizedBox( width: width, @@ -307,27 +286,3 @@ class VerticalDivider extends StatelessWidget { ); } } - -class _DividerDefaultsM2 extends DividerThemeData { - const _DividerDefaultsM2() : super(thickness: 0.0); -} - -// BEGIN GENERATED TOKEN PROPERTIES - Divider - -// Do not edit by hand. The code between the "BEGIN GENERATED" and -// "END GENERATED" comments are generated from data in the Material -// Design token database by the script: -// dev/tools/gen_defaults/bin/gen_defaults.dart. - -// Token database version: v0_132 - -class _DividerDefaultsM3 extends DividerThemeData { - _DividerDefaultsM3(this.context) : super(thickness: 1.0); - - final BuildContext context; - late final ColorScheme _colors = Theme.of(context).colorScheme; - - @override Color? get color => _colors.outlineVariant; -} - -// END GENERATED TOKEN PROPERTIES - Divider diff --git a/packages/flutter/test/material/divider_theme_test.dart b/packages/flutter/test/material/divider_theme_test.dart index 909c9e4c20..4d34e28a41 100644 --- a/packages/flutter/test/material/divider_theme_test.dart +++ b/packages/flutter/test/material/divider_theme_test.dart @@ -59,9 +59,8 @@ void main() { group('Horizontal Divider', () { testWidgets('Passing no DividerThemeData returns defaults', (WidgetTester tester) async { - await tester.pumpWidget( MaterialApp( - theme: ThemeData(useMaterial3: true), - home: const Scaffold( + await tester.pumpWidget(const MaterialApp( + home: Scaffold( body: Divider(), ), )); @@ -71,10 +70,10 @@ void main() { final Container container = tester.widget(find.byType(Container)); final BoxDecoration decoration = container.decoration! as BoxDecoration; - expect(decoration.border!.bottom.width, 1.0); + expect(decoration.border!.bottom.width, 0.0); final ThemeData theme = ThemeData(); - expect(decoration.border!.bottom.color, theme.colorScheme.outlineVariant); + expect(decoration.border!.bottom.color, theme.dividerColor); final Rect dividerRect = tester.getRect(find.byType(Divider)); final Rect lineRect = tester.getRect(find.byType(DecoratedBox)); @@ -143,9 +142,8 @@ void main() { group('Vertical Divider', () { testWidgets('Passing no DividerThemeData returns defaults', (WidgetTester tester) async { - await tester.pumpWidget(MaterialApp( - theme: ThemeData(useMaterial3: true), - home: const Scaffold( + await tester.pumpWidget(const MaterialApp( + home: Scaffold( body: VerticalDivider(), ), )); @@ -156,10 +154,10 @@ void main() { final Container container = tester.widget(find.byType(Container)); final BoxDecoration decoration = container.decoration! as BoxDecoration; final Border border = decoration.border! as Border; - expect(border.left.width, 1.0); + expect(border.left.width, 0.0); final ThemeData theme = ThemeData(); - expect(border.left.color, theme.colorScheme.outlineVariant); + expect(border.left.color, theme.dividerColor); final Rect dividerRect = tester.getRect(find.byType(VerticalDivider)); final Rect lineRect = tester.getRect(find.byType(DecoratedBox)); @@ -227,62 +225,6 @@ void main() { expect(lineRect.bottom, dividerRect.bottom - endIndent); }); }); - - group('Material 2', () { - // Tests that are only relevant for Material 2. Once ThemeData.useMaterial3 - // is turned on by default, these tests can be removed. - - group('Horizontal Divider', () { - testWidgets('Passing no DividerThemeData returns defaults', (WidgetTester tester) async { - await tester.pumpWidget(const MaterialApp( - home: Scaffold( - body: Divider(), - ), - )); - - final RenderBox box = tester.firstRenderObject(find.byType(Divider)); - expect(box.size.height, 16.0); - - final Container container = tester.widget(find.byType(Container)); - final BoxDecoration decoration = container.decoration! as BoxDecoration; - expect(decoration.border!.bottom.width, 0.0); - - final ThemeData theme = ThemeData(); - expect(decoration.border!.bottom.color, theme.dividerColor); - - final Rect dividerRect = tester.getRect(find.byType(Divider)); - final Rect lineRect = tester.getRect(find.byType(DecoratedBox)); - expect(lineRect.left, dividerRect.left); - expect(lineRect.right, dividerRect.right); - }); - }); - - group('Vertical Divider', () { - testWidgets('Passing no DividerThemeData returns defaults', (WidgetTester tester) async { - await tester.pumpWidget(const MaterialApp( - home: Scaffold( - body: VerticalDivider(), - ), - )); - - final RenderBox box = tester.firstRenderObject(find.byType(VerticalDivider)); - expect(box.size.width, 16.0); - - final Container container = tester.widget(find.byType(Container)); - final BoxDecoration decoration = container.decoration! as BoxDecoration; - final Border border = decoration.border! as Border; - expect(border.left.width, 0.0); - - final ThemeData theme = ThemeData(); - expect(border.left.color, theme.dividerColor); - - final Rect dividerRect = tester.getRect(find.byType(VerticalDivider)); - final Rect lineRect = tester.getRect(find.byType(DecoratedBox)); - expect(lineRect.top, dividerRect.top); - expect(lineRect.bottom, dividerRect.bottom); - }); - }); - }); } DividerThemeData _dividerTheme() {