[releases] Revert "Add support for Material 3 `Divider` and `VerticalDivider`" (#112471) (#112491)
diff --git a/dev/tools/gen_defaults/bin/gen_defaults.dart b/dev/tools/gen_defaults/bin/gen_defaults.dart
index 00c6cd7..ef1f32a 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/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 @@
'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 @@
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 2028dcb..0000000
--- 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 6672379..5912c1f 100644
--- a/examples/api/lib/material/divider/divider.0.dart
+++ b/examples/api/lib/material/divider/divider.0.dart
@@ -11,19 +11,22 @@
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 708e642..0000000
--- 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 <Widget>[
- 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 2bb5ad1..0a9a5cb 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 @@
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 47a7b54..0000000
--- 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 <Widget>[
- 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 825f0cb..0000000
--- 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 a0cedbb..0000000
--- 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 63c7513..0000000
--- 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 8840fee..0000000
--- 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 c3f30f4..44b3f66 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 @@
/// ** 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 @@
@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 @@
/// ** 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 @@
@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 _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 909c9e4..4d34e28 100644
--- a/packages/flutter/test/material/divider_theme_test.dart
+++ b/packages/flutter/test/material/divider_theme_test.dart
@@ -59,9 +59,8 @@
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 @@
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 @@
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 @@
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 @@
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() {