-
Notifications
You must be signed in to change notification settings - Fork 28.7k
Allow the Slider to always show the value indicator. #162223
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
Conversation
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.
Thanks for another PR @yiiim!
FYI @TahaTesser who is verry familiar with sliders. :)
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.
This PR does a fair bit of refactoring to add OverlayPortal
, this makes sliders more complex.
We had previous show value indicator behaviors without OverlayPortal
. Please provide more details on OverlayPortal
addition and benefits.
Now, when And when we change |
bb3d73d
to
da97b9b
Compare
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.
Great work! Just some initial thoughts.
|
||
OverlayEntry? overlayEntry; | ||
Widget _buildValueIndicator(ShowValueIndicator? showValueIndicator) { | ||
late final Widget valueIndicator = CompositedTransformFollower( |
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.
late final Widget valueIndicator = CompositedTransformFollower( | |
late final Widget valueIndicator = CompositedTransformFollower( |
Is late
required since the value is assigned here.
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.
If valueIndicator
is never accessed, the assignment expression for valueIndicator
will not be executed. It is not necessarily required to create it in the subsequent code.
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.
the late
isn't required to execute this code.
link: _layerLink, | ||
child: _ValueIndicatorRenderObjectWidget(state: this), | ||
); | ||
late final Widget valueIndicatorWhenDragged = ValueListenableBuilder<bool>( |
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.
similarly, late
is used but value is also assigned here.
void hideValueIndicator() { | ||
assert(mounted); | ||
_showValueIndicatorForDragged.value = false; |
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.
Just making sure. Once the portal controller is created and assigned to shown, are we disposing it when value indicator is hidden? Considering a screen might have a bunch sliders and each of one of them might create a portal controller without being disposed.
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.
Do you mean OverlayPortalController
? OverlayPortalController
does not need to dispose.
The OverlayChild
will always be displayed. When ShowValueIndicator
is set to be shown during dragging, _showValueIndicatorForDragged
controls whether _ValueIndicatorRenderObjectWidget
is mounted to the tree within the OverlayChild
.
FYI @LongCatIsLooong on the overlay portal implementation. I was told you're working on something that would help Slider. |
Here is the PR #163575 |
late final OverlayPortalController _valueIndicatorOverlayPortalController = | ||
OverlayPortalController()..show(); | ||
// Control whether the value indicator is visible only when it needs to be shown during dragging. | ||
late final ValueNotifier<bool> _showValueIndicatorForDragged = ValueNotifier<bool>(false); |
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.
nit: I'm not familiar with the implementation, but adding the new state variable would probably make the implementation more complicated than checking if the animation status is .dismissed
?
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.
That's awesome! I completely overlooked that. It cleaned up a lot of code.
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 think I looked into doing that before, the slider theming API could have been much cleaner if we could use inherited widgets, so thanks for converting the implementation to using OverlayPortal! The OverlayPortal change LGTM.
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.
LGTM with some nits
@Deprecated( | ||
'Use ShowValueIndicator.onDrag. ' | ||
'This feature was deprecated after v3.28.0-1.0.pre.', | ||
) |
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.
Do you plan to write a dart fix for this deprecation? It'd be best to deprecate this property in a separate PR with dart fix.
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 will write this in a separate PR.
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.
The dart fix should be included in this PR, not a separate change.
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.
If the property is deprecated in this PR then dart fix should be included.
Perhaps, I wasn't clear. I suggested to mark it as deprecated and include dart fix in a separate PR so the dart fix can be included with the deprecation.
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.
dart fix
is included in this PR.
@yiiim Could you please also update #162223 (comment) with new API changes. |
@Piinks Can you help find out the reason why the Google test failed? |
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 just realised I approved it without making sure deprecation mark was reverted after @Piinks comment.
Please include dart fix in this PR if you plan to keep deprecation mark.
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.
@yiiim it looks like the Google testing shows the on tap functionality is broken by this change. When the slider is tapped on, it shows the value indicator in response. Can you take a look?
constant: 'onDrag' | ||
inEnum: 'ShowValueIndicator' | ||
|
||
# Before adding a new fix: read instructions at the top of this file. |
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.
Nit: missing a newline here.
@@ -0,0 +1,35 @@ | |||
# Copyright 2014 The Flutter Authors. All rights reserved. |
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 am not sure we need a new file just for one fix, can we just add this to the fixes in fix_material.yaml?
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.
Dart fixes also need to be tested. Can you please add tests under the test_fixes directory? They demonstrate the code before and after the tool applies the migration.
b6b9699
to
0fd3f15
Compare
Could you provide more information? I am unable to reproduce this. |
Thanks for your patience! Here is a recreation of the code from the broken test. import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
),
home: RangeSlidersDemo(),
);
}
}
class RangeSlidersDemo extends StatefulWidget {
static const slug = 'range-slider';
@override
State<StatefulWidget> createState() => _RangeSlidersDemoState();
}
class _RangeSlidersDemoState extends State<RangeSlidersDemo> {
RangeValues _continuousValues = const RangeValues(42, 49);
RangeValues _discreteValues = const RangeValues(20, 40);
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Column(
children: [
RangeSlider(
labels: RangeLabels(
_continuousValues.start.round().toString(),
_continuousValues.end.round().toString(),
),
values: _continuousValues,
min: 0,
max: 100,
onChanged: (RangeValues values) {
setState(() {
_continuousValues = values;
});
},
),
Text('Continuous Enabled'),
],
),
SliderTheme(
data: SliderTheme.of(context).copyWith(
showValueIndicator: ShowValueIndicator.onlyForContinuous,
),
child: Column(
children: [
RangeSlider(
// Key is for scuba testing only.
key: Key('continuousRangeSlider'),
labels: RangeLabels(
_continuousValues.start.round().toString(),
_continuousValues.end.round().toString(),
),
values: _continuousValues,
min: 0,
max: 100,
onChanged: (RangeValues values) {
setState(() {
_continuousValues = values;
});
},
),
Text('Continuous Enabled Value Indicator'),
],
),
),
SliderTheme(
data: SliderTheme.of(context).copyWith(
showValueIndicator: ShowValueIndicator.onlyForDiscrete,
),
child: Column(
children: [
RangeSlider(
key: Key('discreteSlider'),
labels: RangeLabels(
_discreteValues.start.round().toString(),
_discreteValues.end.round().toString(),
),
min: 0,
max: 100,
values: _discreteValues,
divisions: 5,
onChanged: (RangeValues values) {
setState(() {
_discreteValues = values;
});
},
),
Text('Discrete Enabled Value Indicator'),
],
),
),
Column(
children: [
RangeSlider(
values: _continuousValues,
min: 0,
max: 100,
onChanged: null,
),
Text('Continuous Disabled'),
],
),
Column(
children: [
RangeSlider(
divisions: 5,
min: 0,
max: 100,
values: _discreteValues,
onChanged: null,
),
Text('Discrete Disabled'),
],
),
],
),
),
);
}
} This issue is on the middle one with two values showing. This image does not reflect my cursor tapping on it, which briefly reveals the indicators on both sides. |
Rebasing to get a fresh run from Google testing. |
e5761b5
to
10a4509
Compare
10a4509
to
b84134e
Compare
Thanks again for your patience with this @yiiim. I have been working at this for a while trying to figure out what this change breaks. class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
),
home: RangeSlidersDemo(),
);
}
}
class RangeSlidersDemo extends StatefulWidget {
static const slug = 'range-slider';
@override
State<StatefulWidget> createState() => _RangeSlidersDemoState();
}
class _RangeSlidersDemoState extends State<RangeSlidersDemo> {
RangeValues _continuousValues = const RangeValues(42, 49);
RangeValues _discreteValues = const RangeValues(20, 40);
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Column(
children: [
RangeSlider(
labels: RangeLabels(
_continuousValues.start.round().toString(),
_continuousValues.end.round().toString(),
),
values: _continuousValues,
min: 0,
max: 100,
onChanged: (RangeValues values) {
setState(() {
_continuousValues = values;
});
},
),
Text('Continuous Enabled'),
],
),
SliderTheme(
data: SliderTheme.of(context).copyWith(
showValueIndicator: ShowValueIndicator.onlyForContinuous,
),
child: Column(
children: [
RangeSlider(
// Key is for scuba testing only.
key: Key('continuousRangeSlider'),
labels: RangeLabels(
_continuousValues.start.round().toString(),
_continuousValues.end.round().toString(),
),
values: _continuousValues,
min: 0,
max: 100,
onChanged: (RangeValues values) {
setState(() {
_continuousValues = values;
});
},
),
Text('Continuous Enabled Value Indicator'),
],
),
),
SliderTheme(
data: SliderTheme.of(context).copyWith(
showValueIndicator: ShowValueIndicator.onlyForDiscrete,
),
child: Column(
children: [
RangeSlider(
key: Key('discreteSlider'),
labels: RangeLabels(
_discreteValues.start.round().toString(),
_discreteValues.end.round().toString(),
),
min: 0,
max: 100,
values: _discreteValues,
divisions: 5,
onChanged: (RangeValues values) {
setState(() {
_discreteValues = values;
});
},
),
Text('Discrete Enabled Value Indicator'),
],
),
),
Column(
children: [
RangeSlider(
values: _continuousValues,
min: 0,
max: 100,
onChanged: null,
),
Text('Continuous Disabled'),
],
),
Column(
children: [
RangeSlider(
divisions: 5,
min: 0,
max: 100,
values: _discreteValues,
onChanged: null,
),
Text('Discrete Disabled'),
],
),
],
),
),
);
}
}
void main() {
testWidgets('Repro', (WidgetTester tester) async {
final binding = TestWidgetsFlutterBinding.ensureInitialized();
Size oldSize = binding.window.physicalSize;
binding.window.physicalSizeTestValue = Size(1400, 1200);
await tester.pumpWidget(MyApp());
await tester.tap(find.byKey(Key('discreteSlider')));
await tester.pumpAndSettle();
await expectLater(find.byType(MaterialApp), matchesGoldenFile('goldenFile.png'));
binding.window.physicalSizeTestValue = oldSize;
}); |
b84134e
to
2cec0fe
Compare
920d195
to
55662b8
Compare
The Google testing issue has been resolved because the problem only occurred within the same frame during press and release gestures. Therefore, it was not discovered during the run. Many thanks to @Piinks for taking the time to investigate this matter. |
Thanks very much for your patience while we figured it out! Can you add the test I provided so we have it captured for the future now? :) |
55662b8
to
23a4e81
Compare
… sider_value_indicator
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.
LGTM 🎊
Roll Flutter from 824868f5d1e6 to f79452e3f4ea (94 revisions) flutter/flutter@824868f...f79452e 2025-06-12 [email protected] Roll Skia from 38b9f9b0e496 to b41e7017658e (12 revisions) (flutter/flutter#170514) 2025-06-12 [email protected] Fix `Semantics.identifier` on TextField not working on web (flutter/flutter#170395) 2025-06-12 [email protected] Revert "[a11y] Semantics flag refactor step 2: embedder part" (flutter/flutter#170498) 2025-06-12 [email protected] Copy `packages_autoroller` to `dev/packages_autoroller/run`. (flutter/flutter#170495) 2025-06-11 [email protected] Allow the Slider to always show the value indicator. (flutter/flutter#162223) 2025-06-11 [email protected] Update master branch `CHANGELOG.md` for 3.32.3. (flutter/flutter#170492) 2025-06-11 [email protected] Add time to first frame for `Mac_arm64_ios imitation_game_swiftui` (flutter/flutter#167602) 2025-06-11 [email protected] Make `DropdownMenu` TextField reactive to label changes (flutter/flutter#162062) 2025-06-11 [email protected] Roll Dart SDK from b569246d64bc to 9f741ef8a689 (1 revision) (flutter/flutter#170473) 2025-06-11 [email protected] [impellerc] add GLES shader define. (flutter/flutter#170375) 2025-06-11 98614782+auto-submit[bot]@users.noreply.github.com Reverts "Pause UIScene migration (#170457)" (flutter/flutter#170487) 2025-06-11 98614782+auto-submit[bot]@users.noreply.github.com Reverts "Fix DropdownButtonFormField focusing when replacing FocusNode (#166645)" (flutter/flutter#170477) 2025-06-11 [email protected] Pause UIScene migration (flutter/flutter#170457) 2025-06-11 [email protected] iOS tool dylibs do not need entitlements (flutter/flutter#170448) 2025-06-11 [email protected] Adds getters for different formats of build mode name (flutter/flutter#170251) 2025-06-11 [email protected] Remove all code in `conductor/core` that is now unused (flutter/flutter#170454) 2025-06-11 [email protected] Roll Packages from 974f152 to 0b322a2 (9 revisions) (flutter/flutter#170462) 2025-06-11 [email protected] Roll Skia from b78fdc3ba26b to 38b9f9b0e496 (7 revisions) (flutter/flutter#170453) 2025-06-11 [email protected] Fix remaining iconbuttontheme overrides in listtile (flutter/flutter#169029) 2025-06-11 [email protected] Fix DropdownButtonFormField focusing when replacing FocusNode (flutter/flutter#166645) 2025-06-11 [email protected] Add CupertinoRadio widget of the week video (flutter/flutter#170027) 2025-06-11 [email protected] Docs: Update docs for suffix icon interaction behaviour (flutter/flutter#169828) 2025-06-11 [email protected] [ Widget Preview ] Don't try to load previews with compile-time errors (flutter/flutter#170262) 2025-06-11 [email protected] [canvaskit] Manually trigger `input` event in text editing tests for Safari (flutter/flutter#170022) 2025-06-11 [email protected] Tiny clean-up in triage docs (flutter/flutter#170429) 2025-06-11 [email protected] Roll pub packages (flutter/flutter#170444) 2025-06-11 [email protected] [Impeller] Avoid creating paths when rendering arcs (flutter/flutter#170398) 2025-06-11 [email protected] Fix date picker calendar tap targets (portrait mode) (flutter/flutter#169163) 2025-06-11 [email protected] Add SK_SUPPORT_UNSPANNED_APIS staging flag (flutter/flutter#170139) 2025-06-11 [email protected] Roll Dart SDK from 6290dfd1d88a to b569246d64bc (4 revisions) (flutter/flutter#170430) 2025-06-11 [email protected] Roll Skia from 910070084066 to b78fdc3ba26b (33 revisions) (flutter/flutter#170412) 2025-06-11 [email protected] Use pathops module groups (flutter/flutter#169857) 2025-06-10 [email protected] Roll pub packages (flutter/flutter#170399) 2025-06-10 [email protected] Verify old version of Python has the `lib2to3` import available (flutter/flutter#170187) 2025-06-10 [email protected] Use "flutter pub get" to resolve packages when building the docs snippets tool (flutter/flutter#170381) 2025-06-10 [email protected] [engine] Reland: ensure engines spawned from an engine using dynamic rendering selection still use the dynamic surface. (flutter/flutter#170389) 2025-06-10 [email protected] Revert "Add call to Dart_NotifyDestroyed when the flutter view is des… (flutter/flutter#170309) 2025-06-10 [email protected] fix: set versionCodeOverride when split-per-abi is specified (flutter/flutter#169816) 2025-06-10 [email protected] fix: Skip native assets build test (flaky, takes 15m+) (flutter/flutter#170383) 2025-06-10 [email protected] Marks Linux web_benchmarks_ddc to be unflaky (flutter/flutter#167631) 2025-06-10 [email protected] Marks Linux web_benchmarks_ddc_hot_reload to be unflaky (flutter/flutter#168807) 2025-06-10 98614782+auto-submit[bot]@users.noreply.github.com Reverts "[engine] ensure engines spawned from an engine using dynamic rendering selection still use the dynamic surface. (#170313)" (flutter/flutter#170377) 2025-06-10 [email protected] [a11y] Semantics flag refactor step 2: embedder part (flutter/flutter#167738) 2025-06-10 [email protected] Roll Dart SDK from c26e7ca44805 to 6290dfd1d88a (5 revisions) (flutter/flutter#170363) 2025-06-10 [email protected] Remove `pubspec.lock` files for `flutter_tools` and `widget_preview_scaffold`. (flutter/flutter#170364) 2025-06-10 [email protected] [engine] ensure engines spawned from an engine using dynamic rendering selection still use the dynamic surface. (flutter/flutter#170313) ...
Roll Flutter from 824868f5d1e6 to f79452e3f4ea (94 revisions) flutter/flutter@824868f...f79452e 2025-06-12 [email protected] Roll Skia from 38b9f9b0e496 to b41e7017658e (12 revisions) (flutter/flutter#170514) 2025-06-12 [email protected] Fix `Semantics.identifier` on TextField not working on web (flutter/flutter#170395) 2025-06-12 [email protected] Revert "[a11y] Semantics flag refactor step 2: embedder part" (flutter/flutter#170498) 2025-06-12 [email protected] Copy `packages_autoroller` to `dev/packages_autoroller/run`. (flutter/flutter#170495) 2025-06-11 [email protected] Allow the Slider to always show the value indicator. (flutter/flutter#162223) 2025-06-11 [email protected] Update master branch `CHANGELOG.md` for 3.32.3. (flutter/flutter#170492) 2025-06-11 [email protected] Add time to first frame for `Mac_arm64_ios imitation_game_swiftui` (flutter/flutter#167602) 2025-06-11 [email protected] Make `DropdownMenu` TextField reactive to label changes (flutter/flutter#162062) 2025-06-11 [email protected] Roll Dart SDK from b569246d64bc to 9f741ef8a689 (1 revision) (flutter/flutter#170473) 2025-06-11 [email protected] [impellerc] add GLES shader define. (flutter/flutter#170375) 2025-06-11 98614782+auto-submit[bot]@users.noreply.github.com Reverts "Pause UIScene migration (#170457)" (flutter/flutter#170487) 2025-06-11 98614782+auto-submit[bot]@users.noreply.github.com Reverts "Fix DropdownButtonFormField focusing when replacing FocusNode (#166645)" (flutter/flutter#170477) 2025-06-11 [email protected] Pause UIScene migration (flutter/flutter#170457) 2025-06-11 [email protected] iOS tool dylibs do not need entitlements (flutter/flutter#170448) 2025-06-11 [email protected] Adds getters for different formats of build mode name (flutter/flutter#170251) 2025-06-11 [email protected] Remove all code in `conductor/core` that is now unused (flutter/flutter#170454) 2025-06-11 [email protected] Roll Packages from 974f1522ee03 to 17c02a5 (9 revisions) (flutter/flutter#170462) 2025-06-11 [email protected] Roll Skia from b78fdc3ba26b to 38b9f9b0e496 (7 revisions) (flutter/flutter#170453) 2025-06-11 [email protected] Fix remaining iconbuttontheme overrides in listtile (flutter/flutter#169029) 2025-06-11 [email protected] Fix DropdownButtonFormField focusing when replacing FocusNode (flutter/flutter#166645) 2025-06-11 [email protected] Add CupertinoRadio widget of the week video (flutter/flutter#170027) 2025-06-11 [email protected] Docs: Update docs for suffix icon interaction behaviour (flutter/flutter#169828) 2025-06-11 [email protected] [ Widget Preview ] Don't try to load previews with compile-time errors (flutter/flutter#170262) 2025-06-11 [email protected] [canvaskit] Manually trigger `input` event in text editing tests for Safari (flutter/flutter#170022) 2025-06-11 [email protected] Tiny clean-up in triage docs (flutter/flutter#170429) 2025-06-11 [email protected] Roll pub packages (flutter/flutter#170444) 2025-06-11 [email protected] [Impeller] Avoid creating paths when rendering arcs (flutter/flutter#170398) 2025-06-11 [email protected] Fix date picker calendar tap targets (portrait mode) (flutter/flutter#169163) 2025-06-11 [email protected] Add SK_SUPPORT_UNSPANNED_APIS staging flag (flutter/flutter#170139) 2025-06-11 [email protected] Roll Dart SDK from 6290dfd1d88a to b569246d64bc (4 revisions) (flutter/flutter#170430) 2025-06-11 [email protected] Roll Skia from 910070084066 to b78fdc3ba26b (33 revisions) (flutter/flutter#170412) 2025-06-11 [email protected] Use pathops module groups (flutter/flutter#169857) 2025-06-10 [email protected] Roll pub packages (flutter/flutter#170399) 2025-06-10 [email protected] Verify old version of Python has the `lib2to3` import available (flutter/flutter#170187) 2025-06-10 [email protected] Use "flutter pub get" to resolve packages when building the docs snippets tool (flutter/flutter#170381) 2025-06-10 [email protected] [engine] Reland: ensure engines spawned from an engine using dynamic rendering selection still use the dynamic surface. (flutter/flutter#170389) 2025-06-10 [email protected] Revert "Add call to Dart_NotifyDestroyed when the flutter view is des… (flutter/flutter#170309) 2025-06-10 [email protected] fix: set versionCodeOverride when split-per-abi is specified (flutter/flutter#169816) 2025-06-10 [email protected] fix: Skip native assets build test (flaky, takes 15m+) (flutter/flutter#170383) 2025-06-10 [email protected] Marks Linux web_benchmarks_ddc to be unflaky (flutter/flutter#167631) 2025-06-10 [email protected] Marks Linux web_benchmarks_ddc_hot_reload to be unflaky (flutter/flutter#168807) 2025-06-10 98614782+auto-submit[bot]@users.noreply.github.com Reverts "[engine] ensure engines spawned from an engine using dynamic rendering selection still use the dynamic surface. (#170313)" (flutter/flutter#170377) 2025-06-10 [email protected] [a11y] Semantics flag refactor step 2: embedder part (flutter/flutter#167738) 2025-06-10 [email protected] Roll Dart SDK from c26e7ca44805 to 6290dfd1d88a (5 revisions) (flutter/flutter#170363) 2025-06-10 [email protected] Remove `pubspec.lock` files for `flutter_tools` and `widget_preview_scaffold`. (flutter/flutter#170364) 2025-06-10 [email protected] [engine] ensure engines spawned from an engine using dynamic rendering selection still use the dynamic surface. (flutter/flutter#170313) ...
Fixes: #34704
Modified enum
ShowValueIndicator
before:
after:
To maintain previous behavior,
ShowValueIndicator.onlyForDiscrete
andShowValueIndicator.onlyForContinuous
are still retained.The behavior of
ShowValueIndicator.always
remains consistent with the previous implementation, but it is marked as deprecated and should be replaced withShowValueIndicator.onDrag
. A newShowValueIndicator.alwaysVisible
has been added to show the value indicator even when not dragging.Additionally, the value indicator is now rendered by
OverlayPortal
.If you had to change anything in the flutter/tests repo, include a link to the migration guide as per the breaking change policy.
Pre-launch Checklist
///
).If you need help, consider asking for advice on the #hackers-new channel on Discord.