• Taha Tesser's avatar
    Fix `ExpansionTile` properties cannot be updated with `setState` (#134218) · 30234a00
    Taha Tesser authored
    fixes [`ExpansionTile` properties aren't updated with `setState`](https://github.com/flutter/flutter/issues/24493)
    
    ### Code sample
    
    <details>
    <summary>expand to view the code sample</summary> 
    
    ```dart
    import 'package:flutter/material.dart';
    
    void main() => runApp(const MyApp());
    
    class MyApp extends StatelessWidget {
      const MyApp({super.key});
    
      @override
      Widget build(BuildContext context) {
        return const MaterialApp(
          debugShowCheckedModeBanner: false,
          home: Example(),
        );
      }
    }
    
    class Example extends StatefulWidget {
      const Example({super.key});
    
      @override
      State<Example> createState() => _ExampleState();
    }
    
    class _ExampleState extends State<Example> {
      ShapeBorder collapsedShape = const RoundedRectangleBorder(
        borderRadius: BorderRadius.all(Radius.circular(4)),
      );
      Color collapsedTextColor = const Color(0xffffffff);
      Color collapsedBackgroundColor = const Color(0xffff0000);
      Color collapsedIconColor = const Color(0xffffffff);
      ShapeBorder shape = const RoundedRectangleBorder(
        borderRadius: BorderRadius.all(Radius.circular(16)),
      );
      Color backgroundColor = const Color(0xffff0000);
      Color textColor = const Color(0xffffffff);
      Color iconColor = const Color(0xffffffff);
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: Center(
            child: Padding(
              padding: const EdgeInsets.symmetric(horizontal: 16.0),
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  ExpansionTile(
                    shape: shape,
                    backgroundColor: backgroundColor,
                    textColor: textColor,
                    iconColor: iconColor,
                    collapsedShape: collapsedShape,
                    collapsedTextColor: collapsedTextColor,
                    collapsedBackgroundColor: collapsedBackgroundColor,
                    collapsedIconColor: collapsedIconColor,
                    title: const Text('Collapsed ExpansionTile'),
                    children: const [
                      ListTile(
                        title: Text('Revealed!'),
                      ),
                    ],
                  ),
                  const SizedBox(height: 16),
                  ExpansionTile(
                    shape: shape,
                    backgroundColor: backgroundColor,
                    textColor: textColor,
                    iconColor: iconColor,
                    initiallyExpanded: true,
                    title: const Text('Expanded ExpansionTile'),
                    children: const [
                      ListTile(
                        title: Text('Revealed!'),
                      ),
                    ],
                  ),
                  const SizedBox(height: 16),
                  FilledButton(
                    onPressed: () {
                      setState(() {
                        collapsedShape = const RoundedRectangleBorder(
                          borderRadius: BorderRadius.all(Radius.circular(50)),
                        );
                        collapsedTextColor = const Color(0xfff00000);
                        collapsedBackgroundColor = const Color(0xffffff00);
                        collapsedIconColor = const Color(0xfff00000);
    
                        shape = const RoundedRectangleBorder();
                        backgroundColor = const Color(0xfffff000);
                        textColor = const Color(0xfff00000);
                        iconColor = const Color(0xfff00000);
                      });
                    },
                    child: const Text('Update properties'),
                  ),
                ],
              ),
            ),
          ),
        );
      }
    }
    ```
    
    </details> 
    
    ### Before
    
    https://github.com/flutter/flutter/assets/48603081/b29aed98-38ff-40a3-9ed3-c4342ada35b6
    
    ### After
    
    https://github.com/flutter/flutter/assets/48603081/5e0b6a34-c577-40ed-8456-7ef55caa277b
    30234a00
Name
Last commit
Last update
..
about_test.dart Loading commit data...
action_chip_test.dart Loading commit data...
action_icons_theme_test.dart Loading commit data...
adaptive_text_selection_toolbar_test.dart Loading commit data...
animated_icons_test.dart Loading commit data...
app_bar_test.dart Loading commit data...
app_bar_theme_test.dart Loading commit data...
app_builder_test.dart Loading commit data...
app_test.dart Loading commit data...
arc_test.dart Loading commit data...
autocomplete_test.dart Loading commit data...
back_button_test.dart Loading commit data...
badge_test.dart Loading commit data...
badge_theme_test.dart Loading commit data...
banner_test.dart Loading commit data...
banner_theme_test.dart Loading commit data...
bottom_app_bar_test.dart Loading commit data...
bottom_app_bar_theme_test.dart Loading commit data...
bottom_navigation_bar_test.dart Loading commit data...
bottom_navigation_bar_theme_test.dart Loading commit data...
bottom_sheet_test.dart Loading commit data...
bottom_sheet_theme_test.dart Loading commit data...
button_bar_test.dart Loading commit data...
button_bar_theme_test.dart Loading commit data...
button_style_test.dart Loading commit data...
button_theme_test.dart Loading commit data...
calendar_date_picker_test.dart Loading commit data...
card_test.dart Loading commit data...
card_theme_test.dart Loading commit data...
checkbox_list_tile_test.dart Loading commit data...
checkbox_test.dart Loading commit data...
checkbox_theme_test.dart Loading commit data...
chip_test.dart Loading commit data...
chip_theme_test.dart Loading commit data...
choice_chip_test.dart Loading commit data...
circle_avatar_test.dart Loading commit data...
color_scheme_test.dart Loading commit data...
colors_test.dart Loading commit data...
data_table_test.dart Loading commit data...
data_table_test_utils.dart Loading commit data...
data_table_theme_test.dart Loading commit data...
date_picker_test.dart Loading commit data...
date_picker_theme_test.dart Loading commit data...
date_range_picker_test.dart Loading commit data...
debug_test.dart Loading commit data...
desktop_text_selection_toolbar_button_test.dart Loading commit data...
desktop_text_selection_toolbar_test.dart Loading commit data...
dialog_test.dart Loading commit data...
dialog_theme_test.dart Loading commit data...
divider_test.dart Loading commit data...
divider_theme_test.dart Loading commit data...
drawer_button_test.dart Loading commit data...
drawer_test.dart Loading commit data...
drawer_theme_test.dart Loading commit data...
dropdown_form_field_test.dart Loading commit data...
dropdown_menu_test.dart Loading commit data...
dropdown_menu_theme_test.dart Loading commit data...
dropdown_test.dart Loading commit data...
elevated_button_test.dart Loading commit data...
elevated_button_theme_test.dart Loading commit data...
elevation_overlay_test.dart Loading commit data...
expand_icon_test.dart Loading commit data...
expansion_panel_test.dart Loading commit data...
expansion_tile_test.dart Loading commit data...
expansion_tile_theme_test.dart Loading commit data...
feedback_test.dart Loading commit data...
feedback_tester.dart Loading commit data...
filled_button_test.dart Loading commit data...
filled_button_theme_test.dart Loading commit data...
filter_chip_test.dart Loading commit data...
flexible_space_bar_collapse_mode_test.dart Loading commit data...
flexible_space_bar_stretch_mode_test.dart Loading commit data...
flexible_space_bar_test.dart Loading commit data...
floating_action_button_location_test.dart Loading commit data...
floating_action_button_test.dart Loading commit data...
floating_action_button_theme_test.dart Loading commit data...
flutter_logo_test.dart Loading commit data...
grid_title_test.dart Loading commit data...
icon_button_test.dart Loading commit data...
icon_button_theme_test.dart Loading commit data...
icons_test.dart Loading commit data...
inherited_theme_test.dart Loading commit data...
ink_paint_test.dart Loading commit data...
ink_sparkle_test.dart Loading commit data...
ink_splash_test.dart Loading commit data...
ink_well_test.dart Loading commit data...
input_chip_test.dart Loading commit data...
input_date_picker_form_field_test.dart Loading commit data...
input_decorator_test.dart Loading commit data...
list_tile_test.dart Loading commit data...
list_tile_theme_test.dart Loading commit data...
localizations_test.dart Loading commit data...
magnifier_test.dart Loading commit data...
material_button_test.dart Loading commit data...
material_state_mixin_test.dart Loading commit data...
material_state_property_test.dart Loading commit data...
material_states_controller_test.dart Loading commit data...
material_test.dart Loading commit data...
menu_anchor_test.dart Loading commit data...
menu_bar_theme_test.dart Loading commit data...
menu_button_theme_test.dart Loading commit data...
menu_style_test.dart Loading commit data...
menu_theme_test.dart Loading commit data...
mergeable_material_test.dart Loading commit data...
navigation_bar_test.dart Loading commit data...
navigation_bar_theme_test.dart Loading commit data...
navigation_drawer_test.dart Loading commit data...
navigation_drawer_theme_test.dart Loading commit data...
navigation_rail_test.dart Loading commit data...
navigation_rail_theme_test.dart Loading commit data...
outlined_button_test.dart Loading commit data...
outlined_button_theme_test.dart Loading commit data...
page_selector_test.dart Loading commit data...
page_test.dart Loading commit data...
page_transitions_theme_test.dart Loading commit data...
paginated_data_table_test.dart Loading commit data...
persistent_bottom_sheet_test.dart Loading commit data...
popup_menu_test.dart Loading commit data...
popup_menu_theme_test.dart Loading commit data...
progress_indicator_test.dart Loading commit data...
progress_indicator_theme_test.dart Loading commit data...
radio_list_tile_test.dart Loading commit data...
radio_test.dart Loading commit data...
radio_theme_test.dart Loading commit data...
range_slider_test.dart Loading commit data...
raw_material_button_test.dart Loading commit data...
refresh_indicator_test.dart Loading commit data...
reorderable_list_test.dart Loading commit data...
scaffold_test.dart Loading commit data...
scrollbar_paint_test.dart Loading commit data...
scrollbar_test.dart Loading commit data...
scrollbar_theme_test.dart Loading commit data...
search_anchor_test.dart Loading commit data...
search_bar_theme_test.dart Loading commit data...
search_test.dart Loading commit data...
search_view_theme_test.dart Loading commit data...
segmented_button_test.dart Loading commit data...
segmented_button_theme_test.dart Loading commit data...
selection_area_test.dart Loading commit data...
slider_test.dart Loading commit data...
slider_theme_test.dart Loading commit data...
snack_bar_test.dart Loading commit data...
snack_bar_theme_test.dart Loading commit data...
spell_check_suggestions_toolbar_layout_delegate_test.dart Loading commit data...
spell_check_suggestions_toolbar_test.dart Loading commit data...
stepper_test.dart Loading commit data...
switch_list_tile_test.dart Loading commit data...
switch_test.dart Loading commit data...
switch_theme_test.dart Loading commit data...
tab_bar_theme_test.dart Loading commit data...
tabbed_scrollview_warp_test.dart Loading commit data...
tabs_test.dart Loading commit data...
text_button_test.dart Loading commit data...
text_button_theme_test.dart Loading commit data...
text_field_focus_test.dart Loading commit data...
text_field_helper_text_test.dart Loading commit data...
text_field_restoration_test.dart Loading commit data...
text_field_splash_test.dart Loading commit data...
text_field_test.dart Loading commit data...
text_form_field_restoration_test.dart Loading commit data...
text_form_field_test.dart Loading commit data...
text_selection_test.dart Loading commit data...
text_selection_theme_test.dart Loading commit data...
text_selection_toolbar_test.dart Loading commit data...
text_selection_toolbar_text_button_test.dart Loading commit data...
text_theme_test.dart Loading commit data...
theme_data_test.dart Loading commit data...
theme_defaults_test.dart Loading commit data...
theme_test.dart Loading commit data...
time_picker_test.dart Loading commit data...
time_picker_theme_test.dart Loading commit data...
time_test.dart Loading commit data...
toggle_buttons_test.dart Loading commit data...
toggle_buttons_theme_test.dart Loading commit data...
tooltip_test.dart Loading commit data...
tooltip_theme_test.dart Loading commit data...
tooltip_visibility_test.dart Loading commit data...
typography_test.dart Loading commit data...
user_accounts_drawer_header_test.dart Loading commit data...
value_indicating_slider_test.dart Loading commit data...
will_pop_test.dart Loading commit data...