• Taha Tesser's avatar
    Add `AnimationStyle` to `ExpansionTile` (#139664) · f794cf9d
    Taha Tesser authored
    fixes [Expose animation parameters for the [ExpansionTile] widget](https://github.com/flutter/flutter/issues/138047)
    
    ### Description
    Add `AnimationStyle` to the `ExpansionTile` widget to override the default expand and close animation.
    
    Syntax:
    ```dart
            child: ExpansionTile(
              title: const Text('Tap to expand'),
              expansionAnimationStyle: AnimationStyle(
                duration: Durations.extralong1,
                curve: Easing.emphasizedAccelerate,
              ),
              children: const <Widget>[FlutterLogo(size: 200)],
            ),
    ```
    
    ### Code sample
    
    <details>
    <summary>expand to view the code sample</summary> 
    
    ```dart
    // 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 [ExpansionTile] and [AnimationStyle].
    
    void main() {
      runApp(const ExpansionTileAnimationStyleApp());
    }
    
    enum AnimationStyles { defaultStyle, custom, none }
    const List<(AnimationStyles, String)> animationStyleSegments = <(AnimationStyles, String)>[
      (AnimationStyles.defaultStyle, 'Default'),
      (AnimationStyles.custom, 'Custom'),
      (AnimationStyles.none, 'None'),
    ];
    
    class ExpansionTileAnimationStyleApp extends StatefulWidget {
      const ExpansionTileAnimationStyleApp({super.key});
    
      @override
      State<ExpansionTileAnimationStyleApp> createState() => _ExpansionTileAnimationStyleAppState();
    }
    
    class _ExpansionTileAnimationStyleAppState extends State<ExpansionTileAnimationStyleApp> {
      Set<AnimationStyles> _animationStyleSelection = <AnimationStyles>{AnimationStyles.defaultStyle};
      AnimationStyle? _animationStyle;
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            body: SafeArea(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  SegmentedButton<AnimationStyles>(
                    selected: _animationStyleSelection,
                    onSelectionChanged: (Set<AnimationStyles> styles) {
                      setState(() {
                        _animationStyleSelection = styles;
                        switch (styles.first) {
                          case AnimationStyles.defaultStyle:
                            _animationStyle = null;
                          case AnimationStyles.custom:
                            _animationStyle = AnimationStyle(
                              curve: Easing.emphasizedAccelerate,
                              duration: Durations.extralong1,
                            );
                          case AnimationStyles.none:
                            _animationStyle = AnimationStyle.noAnimation;
                        }
                      });
                    },
                    segments: animationStyleSegments
                      .map<ButtonSegment<AnimationStyles>>(((AnimationStyles, String) shirt) {
                        return ButtonSegment<AnimationStyles>(value: shirt.$1, label: Text(shirt.$2));
                      })
                      .toList(),
                  ),
                  const SizedBox(height: 20),
                  ExpansionTile(
                    expansionAnimationStyle: _animationStyle,
                    title: const Text('ExpansionTile'),
                    children: const <Widget>[
                      ListTile(title: Text('Expanded Item 1')),
                      ListTile(title: Text('Expanded Item 2')),
                    ],
                  )
                ],
              ),
            ),
          ),
        );
      }
    }
    ```
    
    </details>
    
    Related to https://github.com/flutter/flutter/pull/138721.
    f794cf9d
Name
Last commit
Last update
..
about Loading commit data...
action_buttons Loading commit data...
action_chip Loading commit data...
animated_icon Loading commit data...
app Loading commit data...
app_bar Loading commit data...
autocomplete Loading commit data...
banner Loading commit data...
bottom_app_bar Loading commit data...
bottom_navigation_bar Loading commit data...
bottom_sheet Loading commit data...
button_style Loading commit data...
card Loading commit data...
checkbox Loading commit data...
checkbox_list_tile Loading commit data...
chip Loading commit data...
choice_chip Loading commit data...
color_scheme Loading commit data...
context_menu Loading commit data...
data_table Loading commit data...
date_picker Loading commit data...
dialog Loading commit data...
divider Loading commit data...
drawer Loading commit data...
dropdown Loading commit data...
dropdown_menu Loading commit data...
elevated_button Loading commit data...
expansion_panel Loading commit data...
expansion_tile Loading commit data...
filled_button Loading commit data...
filter_chip Loading commit data...
flexible_space_bar Loading commit data...
floating_action_button Loading commit data...
floating_action_button_location Loading commit data...
icon_button Loading commit data...
ink Loading commit data...
ink_well Loading commit data...
input_chip Loading commit data...
input_decorator Loading commit data...
list_tile Loading commit data...
material_state Loading commit data...
menu_anchor Loading commit data...
navigation_bar Loading commit data...
navigation_drawer Loading commit data...
navigation_rail Loading commit data...
outlined_button Loading commit data...
page_transitions_theme Loading commit data...
paginated_data_table Loading commit data...
platform_menu_bar Loading commit data...
popup_menu Loading commit data...
progress_indicator Loading commit data...
radio Loading commit data...
radio_list_tile Loading commit data...
range_slider Loading commit data...
refresh_indicator Loading commit data...
reorderable_list Loading commit data...
scaffold Loading commit data...
scrollbar Loading commit data...
search_anchor Loading commit data...
segmented_button Loading commit data...
selectable_region Loading commit data...
selection_area Loading commit data...
selection_container Loading commit data...
slider Loading commit data...
snack_bar Loading commit data...
stepper Loading commit data...
switch Loading commit data...
switch_list_tile Loading commit data...
tab_controller Loading commit data...
tabs Loading commit data...
text_button Loading commit data...
text_field Loading commit data...
text_form_field Loading commit data...
theme Loading commit data...
theme_data Loading commit data...
time_picker Loading commit data...
toggle_buttons Loading commit data...
tooltip Loading commit data...