Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix ExpansionTile properties cannot be updated with setState #134218

Merged

Conversation

TahaTesser
Copy link
Member

fixes ExpansionTile properties aren't updated with setState

Code sample

expand to view the code sample
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'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

Before

before.mov

After

after.mov

Pre-launch Checklist

  • I read the Contributor Guide and followed the process outlined there for submitting PRs.
  • I read the Tree Hygiene wiki page, which explains my responsibilities.
  • I read and followed the Flutter Style Guide, including Features we expect every widget to implement.
  • I signed the CLA.
  • I listed at least one issue that this PR fixes in the description above.
  • I updated/added relevant documentation (doc comments with ///).
  • I added new tests to check the change I am making, or this PR is test-exempt.
  • All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel on Discord.

@github-actions github-actions bot added framework flutter/packages/flutter repository. See also f: labels. f: material design flutter/packages/flutter/material repository. labels Sep 7, 2023
@TahaTesser TahaTesser marked this pull request as ready for review September 7, 2023 15:40
void _updateShapeBorder(
ThemeData theme,
ExpansionTileThemeData expansionTileTheme,
ExpansionTileThemeData defaults,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This parameter isn't used, but presumably it should be?

Copy link
Member Author

@TahaTesser TahaTesser Sep 7, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great catch, it should be only expansionTileTheme and themeData fallback

?? expansionTileTheme.shape
?? Border(
top: BorderSide(color: theme.dividerColor),
bottom: BorderSide(color: theme.dividerColor),

Copy link
Contributor

@HansMuller HansMuller left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@HansMuller HansMuller added the autosubmit Merge PR when tree becomes green via auto submit App label Sep 7, 2023
@auto-submit auto-submit bot merged commit 30234a0 into flutter:master Sep 7, 2023
66 checks passed
@TahaTesser TahaTesser deleted the fix_expansion_tile_setState_properties branch September 7, 2023 22:01
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Sep 8, 2023
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Sep 8, 2023
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Sep 8, 2023
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Sep 8, 2023
auto-submit bot pushed a commit to flutter/packages that referenced this pull request Sep 8, 2023
flutter/flutter@aea4552...da676f7

2023-09-08 fluttergithubbot@gmail.com Marks Linux_android very_long_picture_scrolling_perf__e2e_summary to be unflaky (flutter/flutter#134116)
2023-09-08 31859944+LongCatIsLooong@users.noreply.github.com Make `CupertinoTextField` at least as tall as its first line of placeholder (flutter/flutter#134198)
2023-09-08 engine-flutter-autoroll@skia.org Roll Flutter Engine from f09a139101c3 to 6d6b44886175 (3 revisions) (flutter/flutter#134306)
2023-09-08 gspencergoog@users.noreply.github.com Update links to iOS embedder docs to point to new Doxygen docs (flutter/flutter#134246)
2023-09-08 engine-flutter-autoroll@skia.org Roll Packages from 22d4754 to aaae5ef (7 revisions) (flutter/flutter#134301)
2023-09-08 engine-flutter-autoroll@skia.org Roll Flutter Engine from c38feb382e96 to f09a139101c3 (1 revision) (flutter/flutter#134299)
2023-09-08 engine-flutter-autoroll@skia.org Roll Flutter Engine from f146d4bf244b to c38feb382e96 (1 revision) (flutter/flutter#134293)
2023-09-08 engine-flutter-autoroll@skia.org Roll Flutter Engine from a140ab4a4ec6 to f146d4bf244b (1 revision) (flutter/flutter#134290)
2023-09-08 engine-flutter-autoroll@skia.org Roll Flutter Engine from ea1d0d28e26f to a140ab4a4ec6 (5 revisions) (flutter/flutter#134288)
2023-09-08 xubaolin@oppo.com fix a Scrollbar example crash (flutter/flutter#127925)
2023-09-08 tessertaha@gmail.com Fix `Drawer` examples are missing `dartpad` tag (flutter/flutter#134219)
2023-09-08 engine-flutter-autoroll@skia.org Roll Flutter Engine from 4ac4429a206b to ea1d0d28e26f (1 revision) (flutter/flutter#134270)
2023-09-08 engine-flutter-autoroll@skia.org Roll Flutter Engine from df3965a55fd8 to 4ac4429a206b (1 revision) (flutter/flutter#134267)
2023-09-08 engine-flutter-autoroll@skia.org Roll Flutter Engine from 505ef3c33102 to df3965a55fd8 (1 revision) (flutter/flutter#134263)
2023-09-08 polinach@google.com _TabBarViewState should dispose created instances of PageController. (flutter/flutter#134091)
2023-09-08 polinach@google.com Remove non needed controllers in SegmentedButton. (flutter/flutter#134064)
2023-09-08 polinach@google.com EditableTextState should dispose cursorVisibilityNotifier. (flutter/flutter#133858)
2023-09-08 polinach@google.com TestWidgetsFlutterBinding should dispose old RestorationManager on reset. (flutter/flutter#133999)
2023-09-08 engine-flutter-autoroll@skia.org Roll Flutter Engine from 65f6fb841c7a to 505ef3c33102 (4 revisions) (flutter/flutter#134260)
2023-09-07 polinach@google.com CupertinoAlertDialog should not create ScrollController on every build, if null values are passed in constructor. (flutter/flutter#134075)
2023-09-07 engine-flutter-autoroll@skia.org Roll Flutter Engine from a828c26e7e97 to 65f6fb841c7a (1 revision) (flutter/flutter#134254)
2023-09-07 polinach@google.com _SearchBarState should dispose FocusNode, if it created it. (flutter/flutter#134076)
2023-09-07 engine-flutter-autoroll@skia.org Roll Flutter Engine from 2dba8ceca824 to a828c26e7e97 (8 revisions) (flutter/flutter#134249)
2023-09-07 34871572+gmackall@users.noreply.github.com [integration_test] Allow capture of screenshots for `FlutterFragmentActivity`s (flutter/flutter#132406)
2023-09-07 engine-flutter-autoroll@skia.org Roll Flutter Engine from 8d07c2947e60 to 2dba8ceca824 (2 revisions) (flutter/flutter#134243)
2023-09-07 tessertaha@gmail.com Fix `ExpansionTile` properties cannot be updated with `setState` (flutter/flutter#134218)
2023-09-07 737941+loic-sharma@users.noreply.github.com [Windows Arm64] Remove device_type property (flutter/flutter#134181)
2023-09-07 engine-flutter-autoroll@skia.org Roll Flutter Engine from f0b718e28779 to 8d07c2947e60 (3 revisions) (flutter/flutter#134240)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-packages
Please CC rmistry@google.com,stuartmorgan@google.com,tarrinneal@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://bugs.chromium.org/p/skia/issues/entry?template=Autoroller+Bug

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Nov 15, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
autosubmit Merge PR when tree becomes green via auto submit App f: material design flutter/packages/flutter/material repository. framework flutter/packages/flutter repository. See also f: labels.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

ExpansionTile properties aren't updated with setState
2 participants