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
70d96ecb
Commit
70d96ecb
authored
Feb 09, 2016
by
Adam Barth
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Improve unit conversions in Scrollable
parent
c91ace82
Changes
5
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
111 additions
and
72 deletions
+111
-72
tabs.dart
packages/flutter/lib/src/material/tabs.dart
+3
-3
viewport.dart
packages/flutter/lib/src/rendering/viewport.dart
+5
-0
pageable_list.dart
packages/flutter/lib/src/widgets/pageable_list.dart
+21
-10
scrollable.dart
packages/flutter/lib/src/widgets/scrollable.dart
+75
-49
snap_scrolling_test.dart
packages/flutter/test/widget/snap_scrolling_test.dart
+7
-10
No files found.
packages/flutter/lib/src/material/tabs.dart
View file @
70d96ecb
...
...
@@ -922,12 +922,12 @@ class _TabBarViewState extends PageableListState<TabBarView> implements TabBarSe
controller
.
value
=
scrollOffset
/
2.0
;
}
Future
fling
(
Offset
scrollVelocity
)
{
Future
fling
(
double
scrollVelocity
)
{
if
(
_selection
==
null
||
_selection
.
valueIsChanging
)
return
new
Future
.
value
();
if
(
scrollVelocity
.
dx
.
abs
()
>
_kMinFlingVelocity
)
{
final
int
selectionDelta
=
scrollVelocity
.
dx
>
0
?
-
1
:
1
;
if
(
scrollVelocity
.
abs
()
>
_kMinFlingVelocity
)
{
final
int
selectionDelta
=
scrollVelocity
.
sign
.
truncate
()
;
final
int
targetIndex
=
(
_selection
.
index
+
selectionDelta
).
clamp
(
0
,
_tabCount
-
1
);
_selection
.
value
=
_selection
.
values
[
targetIndex
];
return
new
Future
.
value
();
...
...
packages/flutter/lib/src/rendering/viewport.dart
View file @
70d96ecb
...
...
@@ -9,6 +9,11 @@ import 'package:vector_math/vector_math_64.dart';
import
'box.dart'
;
import
'object.dart'
;
enum
ViewportAnchor
{
start
,
end
,
}
abstract
class
HasScrollDirection
{
Axis
get
scrollDirection
;
}
...
...
packages/flutter/lib/src/widgets/pageable_list.dart
View file @
70d96ecb
...
...
@@ -5,7 +5,6 @@
import
'dart:async'
;
import
'package:flutter/animation.dart'
;
import
'package:flutter/gestures.dart'
;
import
'package:flutter/rendering.dart'
;
import
'basic.dart'
;
...
...
@@ -65,12 +64,25 @@ class PageableListState<T extends PageableList> extends ScrollableState<T> {
int
get
itemCount
=>
config
.
children
?.
length
??
0
;
int
_previousItemCount
;
double
pixelToScrollOffset
(
double
value
)
{
double
get
_pixelsPerScrollUnit
{
final
RenderBox
box
=
context
.
findRenderObject
();
if
(
box
==
null
||
!
box
.
hasSize
)
return
0.0
;
final
double
pixelScrollExtent
=
config
.
scrollDirection
==
Axis
.
vertical
?
box
.
size
.
height
:
box
.
size
.
width
;
return
pixelScrollExtent
==
0.0
?
0.0
:
value
/
pixelScrollExtent
;
switch
(
config
.
scrollDirection
)
{
case
Axis
.
horizontal
:
return
box
.
size
.
width
;
case
Axis
.
vertical
:
return
box
.
size
.
height
;
}
}
double
pixelOffsetToScrollOffset
(
double
pixelOffset
)
{
final
double
pixelsPerScrollUnit
=
_pixelsPerScrollUnit
;
return
super
.
pixelOffsetToScrollOffset
(
pixelsPerScrollUnit
==
0.0
?
0.0
:
pixelOffset
/
pixelsPerScrollUnit
);
}
double
scrollOffsetToPixelOffset
(
double
scrollOffset
)
{
return
super
.
scrollOffsetToPixelOffset
(
scrollOffset
*
_pixelsPerScrollUnit
);
}
void
initState
()
{
...
...
@@ -143,7 +155,7 @@ class PageableListState<T extends PageableList> extends ScrollableState<T> {
ScrollBehavior
createScrollBehavior
()
=>
scrollBehavior
;
bool
get
s
napScrollOffsetChanges
=>
config
.
itemsSnapAlignment
==
ItemsSnapAlignment
.
item
;
bool
get
s
houldSnapScrollOffset
=>
config
.
itemsSnapAlignment
==
ItemsSnapAlignment
.
item
;
double
snapScrollOffset
(
double
newScrollOffset
)
{
final
double
previousItemOffset
=
newScrollOffset
.
floorToDouble
();
...
...
@@ -152,20 +164,19 @@ class PageableListState<T extends PageableList> extends ScrollableState<T> {
.
clamp
(
scrollBehavior
.
minScrollOffset
,
scrollBehavior
.
maxScrollOffset
);
}
Future
_flingToAdjacentItem
(
Offset
velocity
)
{
final
double
scrollVelocity
=
scrollDirectionVelocity
(
velocity
);
Future
_flingToAdjacentItem
(
double
scrollVelocity
)
{
final
double
newScrollOffset
=
snapScrollOffset
(
scrollOffset
+
scrollVelocity
.
sign
)
.
clamp
(
snapScrollOffset
(
scrollOffset
-
0.5
),
snapScrollOffset
(
scrollOffset
+
0.5
));
return
scrollTo
(
newScrollOffset
,
duration:
config
.
duration
,
curve:
config
.
curve
)
.
then
(
_notifyPageChanged
);
}
Future
fling
(
Offset
v
elocity
)
{
Future
fling
(
double
scrollV
elocity
)
{
switch
(
config
.
itemsSnapAlignment
)
{
case
ItemsSnapAlignment
.
adjacentItem
:
return
_flingToAdjacentItem
(
v
elocity
);
return
_flingToAdjacentItem
(
scrollV
elocity
);
default
:
return
super
.
fling
(
v
elocity
).
then
(
_notifyPageChanged
);
return
super
.
fling
(
scrollV
elocity
).
then
(
_notifyPageChanged
);
}
}
...
...
packages/flutter/lib/src/widgets/scrollable.dart
View file @
70d96ecb
This diff is collapsed.
Click to expand it.
packages/flutter/test/widget/snap_scrolling_test.dart
View file @
70d96ecb
...
...
@@ -48,14 +48,11 @@ void set scrollOffset(double value) {
}
Future
fling
(
double
velocity
)
{
Offset
velocityOffset
=
scrollDirection
==
Axis
.
vertical
?
new
Offset
(
0.0
,
velocity
)
:
new
Offset
(
velocity
,
0.0
);
return
scrollableState
.
fling
(
velocityOffset
);
return
scrollableState
.
fling
(
velocity
);
}
void
main
(
)
{
test
(
'ScrollableList snap scrolling, fling(
-
0.8)'
,
()
{
test
(
'ScrollableList snap scrolling, fling(0.8)'
,
()
{
testWidgets
((
WidgetTester
tester
)
{
tester
.
pumpWidget
(
buildFrame
());
...
...
@@ -65,7 +62,7 @@ void main() {
Duration
dt
=
const
Duration
(
seconds:
2
);
fling
(
-
0.8
);
fling
(
0.8
);
tester
.
pump
();
// Start the scheduler at 0.0
tester
.
pump
(
dt
);
expect
(
scrollOffset
,
closeTo
(
200.0
,
1.0
));
...
...
@@ -74,7 +71,7 @@ void main() {
tester
.
pump
();
expect
(
scrollOffset
,
0.0
);
fling
(
-
2.0
);
fling
(
2.0
);
tester
.
pump
();
tester
.
pump
(
dt
);
expect
(
scrollOffset
,
closeTo
(
400.0
,
1.0
));
...
...
@@ -83,7 +80,7 @@ void main() {
tester
.
pump
();
expect
(
scrollOffset
,
400.0
);
fling
(
0.8
);
fling
(
-
0.8
);
tester
.
pump
();
tester
.
pump
(
dt
);
expect
(
scrollOffset
,
closeTo
(
0.0
,
1.0
));
...
...
@@ -92,7 +89,7 @@ void main() {
tester
.
pump
();
expect
(
scrollOffset
,
800.0
);
fling
(
2.0
);
fling
(
-
2.0
);
tester
.
pump
();
tester
.
pump
(
dt
);
expect
(
scrollOffset
,
closeTo
(
200.0
,
1.0
));
...
...
@@ -102,7 +99,7 @@ void main() {
expect
(
scrollOffset
,
800.0
);
bool
completed
=
false
;
fling
(
2.0
).
then
((
_
)
{
fling
(
-
2.0
).
then
((
_
)
{
completed
=
true
;
expect
(
scrollOffset
,
closeTo
(
200.0
,
1.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