Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
F
Front-End
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
abdullh.alsoleman
Front-End
Commits
5a919673
Unverified
Commit
5a919673
authored
May 25, 2022
by
xubaolin
Committed by
GitHub
May 25, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[Slider]The initial value of discrete slider should respect the discrete values (#103966)
Fixes #103965
parent
3fa355c9
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
58 additions
and
2 deletions
+58
-2
slider.dart
packages/flutter/lib/src/material/slider.dart
+18
-2
slider_test.dart
packages/flutter/test/material/slider_test.dart
+40
-0
No files found.
packages/flutter/lib/src/material/slider.dart
View file @
5a919673
...
...
@@ -523,7 +523,7 @@ class _SliderState extends State<Slider> with TickerProviderStateMixin {
vsync:
this
,
);
enableController
.
value
=
widget
.
onChanged
!=
null
?
1.0
:
0.0
;
positionController
.
value
=
_
unlerp
(
widget
.
value
);
positionController
.
value
=
_
convert
(
widget
.
value
);
_actionMap
=
<
Type
,
Action
<
Intent
>>{
_AdjustSliderIntent:
CallbackAction
<
_AdjustSliderIntent
>(
onInvoke:
_actionHandler
,
...
...
@@ -623,6 +623,22 @@ class _SliderState extends State<Slider> with TickerProviderStateMixin {
return
value
*
(
widget
.
max
-
widget
.
min
)
+
widget
.
min
;
}
double
_discretize
(
double
value
)
{
assert
(
widget
.
divisions
!=
null
);
assert
(
value
>=
0.0
&&
value
<=
1.0
);
final
int
divisions
=
widget
.
divisions
!;
return
(
value
*
divisions
).
round
()
/
divisions
;
}
double
_convert
(
double
value
)
{
double
ret
=
_unlerp
(
value
);
if
(
widget
.
divisions
!=
null
)
{
ret
=
_discretize
(
ret
);
}
return
ret
;
}
// Returns a number between 0.0 and 1.0, given a value between min and max.
double
_unlerp
(
double
value
)
{
assert
(
value
<=
widget
.
max
);
...
...
@@ -771,7 +787,7 @@ class _SliderState extends State<Slider> with TickerProviderStateMixin {
link:
_layerLink
,
child:
_SliderRenderObjectWidget
(
key:
_renderObjectKey
,
value:
_
unlerp
(
widget
.
value
),
value:
_
convert
(
widget
.
value
),
divisions:
widget
.
divisions
,
label:
widget
.
label
,
sliderTheme:
sliderTheme
,
...
...
packages/flutter/test/material/slider_test.dart
View file @
5a919673
...
...
@@ -101,6 +101,46 @@ class _StateDependentMouseCursor extends MaterialStateMouseCursor {
}
void
main
(
)
{
testWidgets
(
'The initial value should respect the discrete value'
,
(
WidgetTester
tester
)
async
{
final
Key
sliderKey
=
UniqueKey
();
double
value
=
0.20
;
final
List
<
Offset
>
log
=
<
Offset
>[];
final
LoggingThumbShape
loggingThumb
=
LoggingThumbShape
(
log
);
await
tester
.
pumpWidget
(
MaterialApp
(
home:
Directionality
(
textDirection:
TextDirection
.
ltr
,
child:
StatefulBuilder
(
builder:
(
BuildContext
context
,
StateSetter
setState
)
{
final
SliderThemeData
sliderTheme
=
SliderTheme
.
of
(
context
).
copyWith
(
thumbShape:
loggingThumb
);
return
Material
(
child:
Center
(
child:
SliderTheme
(
data:
sliderTheme
,
child:
Slider
(
key:
sliderKey
,
value:
value
,
divisions:
4
,
onChanged:
(
double
newValue
)
{
setState
(()
{
value
=
newValue
;
});
},
),
),
),
);
},
),
),
),
);
expect
(
value
,
equals
(
0.20
));
expect
(
log
.
length
,
1
);
expect
(
log
[
0
],
const
Offset
(
212.0
,
300.0
));
});
testWidgets
(
'Slider can move when tapped (LTR)'
,
(
WidgetTester
tester
)
async
{
final
Key
sliderKey
=
UniqueKey
();
double
value
=
0.0
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment