-
Notifications
You must be signed in to change notification settings - Fork 29.7k
Fix showSnackBar can't access useMaterial3 from the theme #157707
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 showSnackBar can't access useMaterial3 from the theme #157707
Conversation
|
@nate-thegrate To review (from triage). |
nate-thegrate
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's super great to see the simple fix, thank you!
I had an idea for the test and would love to hear your thoughts :)
| await tester.pumpWidget(MaterialApp( | ||
| theme: customTheme, | ||
| home: Scaffold( | ||
| body: Builder( | ||
| builder: (BuildContext context) { | ||
| return GestureDetector( | ||
| key: tapTarget, | ||
| onTap: () { | ||
| scaffoldMessenger = ScaffoldMessenger.maybeOf(context); | ||
| }, | ||
| behavior: HitTestBehavior.opaque, | ||
| child: const SizedBox( | ||
| height: 100.0, | ||
| width: 100.0, | ||
| ), | ||
| ); | ||
| }, | ||
| ), | ||
| ), | ||
| )); | ||
|
|
||
| await tester.tap(find.byKey(tapTarget)); | ||
| await tester.pump(); | ||
|
|
||
| final ThemeData messengerTheme = Theme.of(scaffoldMessenger!.context); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I believe we could make use of MaterialApp's scaffoldMessengerKey parameter here:
| await tester.pumpWidget(MaterialApp( | |
| theme: customTheme, | |
| home: Scaffold( | |
| body: Builder( | |
| builder: (BuildContext context) { | |
| return GestureDetector( | |
| key: tapTarget, | |
| onTap: () { | |
| scaffoldMessenger = ScaffoldMessenger.maybeOf(context); | |
| }, | |
| behavior: HitTestBehavior.opaque, | |
| child: const SizedBox( | |
| height: 100.0, | |
| width: 100.0, | |
| ), | |
| ); | |
| }, | |
| ), | |
| ), | |
| )); | |
| await tester.tap(find.byKey(tapTarget)); | |
| await tester.pump(); | |
| final ThemeData messengerTheme = Theme.of(scaffoldMessenger!.context); | |
| await tester.pumpWidget( | |
| MaterialApp( | |
| scaffoldMessengerKey: scaffoldMessengerKey, | |
| theme: customTheme, | |
| home: const SizedBox.shrink(), | |
| ), | |
| ); | |
| final ThemeData messengerTheme = Theme.of(scaffoldMessengerKey.currentContext!); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice! I will make the change tomorrow morning (it is the evening here).
| testWidgets('ScaffoldMessenger showSnackBar default animation', (WidgetTester tester) async { | ||
| // Regression test for https://github.com/flutter/flutter/issues/115924. | ||
| testWidgets('Default ScaffoldMessenger can access ambient theme', (WidgetTester tester) async { | ||
| ScaffoldMessengerState? scaffoldMessenger; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| ScaffoldMessengerState? scaffoldMessenger; | |
| final GlobalKey<ScaffoldMessengerState> scaffoldMessengerKey = GlobalKey<ScaffoldMessengerState>(); |
(Kate is out this week btw) |
fd4b72c to
a1b4402
Compare
nate-thegrate
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| child: DefaultSelectionStyle( | ||
| selectionColor: effectiveSelectionColor, | ||
| cursorColor: effectiveCursorColor, | ||
| child: childWidget, | ||
| ), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Probably not in the scope of this PR, but I noticed that the Theme widget already builds a DefaultSelectionStyle:
flutter/packages/flutter/lib/src/material/theme.dart
Lines 132 to 142 in 16622e6
| Widget _wrapsWidgetThemes(BuildContext context, Widget child) { | |
| final DefaultSelectionStyle selectionStyle = DefaultSelectionStyle.of(context); | |
| return IconTheme( | |
| data: data.iconTheme, | |
| child: DefaultSelectionStyle( | |
| selectionColor: data.textSelectionTheme.selectionColor ?? selectionStyle.selectionColor, | |
| cursorColor: data.textSelectionTheme.cursorColor ?? selectionStyle.cursorColor, | |
| child: child, | |
| ), | |
| ); | |
| } |
Would be nice to remove the duplicate widget here at some point :)
flutter/flutter@0fe6153...f86b777 2024-11-01 [email protected] Roll Packages from 7cc1caa to 796afa3 (15 revisions) (flutter/flutter#158003) 2024-11-01 [email protected] Marks Linux_pixel_7pro service_extensions_test to be flaky (flutter/flutter#157853) 2024-11-01 [email protected] Roll Flutter Engine from 0a0d5c9be6ff to 3a090b46dd35 (1 revision) (flutter/flutter#157994) 2024-11-01 [email protected] Roll Flutter Engine from bacc5e1e73b7 to 0a0d5c9be6ff (3 revisions) (flutter/flutter#157991) 2024-11-01 [email protected] Add test for `interactive_viewer.transformation_controller.0.dart` (flutter/flutter#157986) 2024-11-01 [email protected] Roll Flutter Engine from d7e928911ac2 to bacc5e1e73b7 (1 revision) (flutter/flutter#157982) 2024-11-01 [email protected] Add test for `notification.0.dart` (flutter/flutter#157909) 2024-11-01 [email protected] performance: Override .elementAt in CachingIterable (flutter/flutter#152477) 2024-11-01 [email protected] Roll Flutter Engine from cd46383cd55e to d7e928911ac2 (4 revisions) (flutter/flutter#157978) 2024-11-01 [email protected] Roll Flutter Engine from bb77cf867aef to cd46383cd55e (11 revisions) (flutter/flutter#157972) 2024-11-01 [email protected] Add a warning/additional handlers for parsing`synthetic-package`. (flutter/flutter#157934) 2024-10-31 [email protected] Roll Flutter Engine from f2154ef3e31c to bb77cf867aef (6 revisions) (flutter/flutter#157960) 2024-10-31 [email protected] Renames `injectBuildTimePluginFilesForWebPlatform` and removes unused named parameter. (flutter/flutter#157944) 2024-10-31 [email protected] [flutter_driver] use mostly public screenshot API. (flutter/flutter#157888) 2024-10-31 [email protected] Made insetPadding configurable for Date Picker Dialog (flutter/flutter#155651) 2024-10-31 [email protected] Fix showSnackBar can't access useMaterial3 from the theme (flutter/flutter#157707) 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 [email protected],[email protected] 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://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md

Description
This PR makes it possible for the
MaterialAppbuilt inScaffoldMessengerstate to access the ambient theme.Before this PR, the built in messenger was above the theme.
After this PR, the build in messenger is below the theme.
Related Issue
Fixes Can't access useMaterial3 from the theme in the showSnackBar method
Tests
Adds 1 test.