// 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'; /// Flutter code sample for [showBottomSheet]. void main() => runApp(const BottomSheetExampleApp()); class BottomSheetExampleApp extends StatelessWidget { const BottomSheetExampleApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar(title: const Text('Bottom Sheet Sample')), body: const BottomSheetExample(), ), ); } } enum AnimationStyles { defaultStyle, custom, none } const List<(AnimationStyles, String)> animationStyleSegments = <(AnimationStyles, String)>[ (AnimationStyles.defaultStyle, 'Default'), (AnimationStyles.custom, 'Custom'), (AnimationStyles.none, 'None'), ]; class BottomSheetExample extends StatefulWidget { const BottomSheetExample({super.key}); @override State createState() => _BottomSheetExampleState(); } class _BottomSheetExampleState extends State { Set _animationStyleSelection = {AnimationStyles.defaultStyle}; AnimationStyle? _animationStyle; @override Widget build(BuildContext context) { return Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ SegmentedButton( selected: _animationStyleSelection, onSelectionChanged: (Set styles) { setState(() { _animationStyle = switch (styles.first) { AnimationStyles.defaultStyle => null, AnimationStyles.custom => AnimationStyle( duration: const Duration(seconds: 3), reverseDuration: const Duration(seconds: 1), ), AnimationStyles.none => AnimationStyle.noAnimation, }; _animationStyleSelection = styles; }); }, segments: animationStyleSegments .map>(((AnimationStyles, String) shirt) { return ButtonSegment(value: shirt.$1, label: Text(shirt.$2)); }) .toList(), ), const SizedBox(height: 10), ElevatedButton( child: const Text('showBottomSheet'), onPressed: () { showBottomSheet( context: context, sheetAnimationStyle: _animationStyle, builder: (BuildContext context) { return SizedBox.expand( child: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, mainAxisSize: MainAxisSize.min, children: [ const Text('Bottom sheet'), ElevatedButton( child: const Text('Close'), onPressed: () => Navigator.pop(context), ), ], ), ), ); }, ); }, ), ], ), ); } }