diff --git a/dev/tools/gen_defaults/lib/bottom_sheet_template.dart b/dev/tools/gen_defaults/lib/bottom_sheet_template.dart index b6cdc10022..e355b639e6 100644 --- a/dev/tools/gen_defaults/lib/bottom_sheet_template.dart +++ b/dev/tools/gen_defaults/lib/bottom_sheet_template.dart @@ -5,7 +5,10 @@ import 'template.dart'; class BottomSheetTemplate extends TokenTemplate { - const BottomSheetTemplate(super.blockName, super.fileName, super.tokens, { + const BottomSheetTemplate( + super.blockName, + super.fileName, + super.tokens, { super.colorSchemePrefix = '_colors.', }); @@ -37,6 +40,9 @@ class _${blockName}DefaultsM3 extends BottomSheetThemeData { @override Size? get dragHandleSize => ${size("md.comp.sheet.bottom.docked.drag-handle")}; + + @override + BoxConstraints? get constraints => const BoxConstraints(maxWidth: 640.0); } '''; } diff --git a/packages/flutter/lib/src/material/bottom_sheet.dart b/packages/flutter/lib/src/material/bottom_sheet.dart index c4d587ef48..3b59572a99 100644 --- a/packages/flutter/lib/src/material/bottom_sheet.dart +++ b/packages/flutter/lib/src/material/bottom_sheet.dart @@ -210,14 +210,13 @@ class BottomSheet extends StatefulWidget { /// Defines minimum and maximum sizes for a [BottomSheet]. /// - /// Typically a bottom sheet will cover the entire width of its - /// parent. Consider limiting the width by setting smaller constraints - /// for large screens. - /// /// If null, then the ambient [ThemeData.bottomSheetTheme]'s /// [BottomSheetThemeData.constraints] will be used. If that - /// is null then the bottom sheet's size will be constrained - /// by its parent (usually a [Scaffold]). + /// is null and [ThemeData.useMaterial3] is true, then the bottom sheet + /// will have a max width of 640dp. If [ThemeData.useMaterial3] is false, then + /// the bottom sheet's size will be constrained by its parent + /// (usually a [Scaffold]). In this case, consider limiting the width by + /// setting smaller constraints for large screens. /// /// If constraints are specified (either in this property or in the /// theme), the bottom sheet will be aligned to the bottom-center of @@ -882,14 +881,13 @@ class ModalBottomSheetRoute extends PopupRoute { /// Defines minimum and maximum sizes for a [BottomSheet]. /// - /// Typically a bottom sheet will cover the entire width of its - /// parent. Consider limiting the width by setting smaller constraints - /// for large screens. - /// /// If null, the ambient [ThemeData.bottomSheetTheme]'s /// [BottomSheetThemeData.constraints] will be used. If that - /// is null, the bottom sheet's size will be constrained - /// by its parent (usually a [Scaffold]). + /// is null and [ThemeData.useMaterial3] is true, then the bottom sheet + /// will have a max width of 640dp. If [ThemeData.useMaterial3] is false, then + /// the bottom sheet's size will be constrained by its parent + /// (usually a [Scaffold]). In this case, consider limiting the width by + /// setting smaller constraints for large screens. /// /// If constraints are specified (either in this property or in the /// theme), the bottom sheet will be aligned to the bottom-center of @@ -1335,6 +1333,9 @@ class _BottomSheetDefaultsM3 extends BottomSheetThemeData { @override Size? get dragHandleSize => const Size(32, 4); + + @override + BoxConstraints? get constraints => const BoxConstraints(maxWidth: 640.0); } // END GENERATED TOKEN PROPERTIES - BottomSheet diff --git a/packages/flutter/test/material/bottom_sheet_test.dart b/packages/flutter/test/material/bottom_sheet_test.dart index 39bd42fa85..8a002286d7 100644 --- a/packages/flutter/test/material/bottom_sheet_test.dart +++ b/packages/flutter/test/material/bottom_sheet_test.dart @@ -900,16 +900,17 @@ void main() { ), )); - final Material material = tester.widget( - find.descendant( - of: find.byType(BottomSheet), - matching: find.byType(Material), - ), + final Finder finder = find.descendant( + of: find.byType(BottomSheet), + matching: find.byType(Material), ); + final Material material = tester.widget(finder); + expect(material.color, surfaceColor); expect(material.surfaceTintColor, surfaceTintColor); expect(material.elevation, 1.0); expect(material.shape, defaultShape); + expect(tester.getSize(finder).width, 640); }); testWidgets('BottomSheet has transparent shadow in material3', (WidgetTester tester) async {