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
52bf9dbb
Unverified
Commit
52bf9dbb
authored
Aug 03, 2021
by
xubaolin
Committed by
GitHub
Aug 03, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update ScrollMetricsNotification (#87421)
parent
5bdc698b
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
33 additions
and
22 deletions
+33
-22
scroll_position.dart
packages/flutter/lib/src/widgets/scroll_position.dart
+1
-1
scrollbar.dart
packages/flutter/lib/src/widgets/scrollbar.dart
+8
-16
scrollbar_test.dart
packages/flutter/test/cupertino/scrollbar_test.dart
+10
-2
scroll_notification_test.dart
packages/flutter/test/widgets/scroll_notification_test.dart
+2
-1
scrollbar_test.dart
packages/flutter/test/widgets/scrollbar_test.dart
+12
-2
No files found.
packages/flutter/lib/src/widgets/scroll_position.dart
View file @
52bf9dbb
...
@@ -558,7 +558,7 @@ abstract class ScrollPosition extends ViewportOffset with ScrollMetrics {
...
@@ -558,7 +558,7 @@ abstract class ScrollPosition extends ViewportOffset with ScrollMetrics {
// It isn't safe to trigger the ScrollMetricsNotification if we are in
// It isn't safe to trigger the ScrollMetricsNotification if we are in
// the middle of rendering the frame, the developer is likely to schedule
// the middle of rendering the frame, the developer is likely to schedule
// a new frame(build scheduled during frame is illegal).
// a new frame(build scheduled during frame is illegal).
if
(
_lastMetrics
!=
null
&&
!
_haveScheduledUpdateNotification
)
{
if
(!
_haveScheduledUpdateNotification
)
{
scheduleMicrotask
(
didUpdateScrollMetrics
);
scheduleMicrotask
(
didUpdateScrollMetrics
);
_haveScheduledUpdateNotification
=
true
;
_haveScheduledUpdateNotification
=
true
;
}
}
...
...
packages/flutter/lib/src/widgets/scrollbar.dart
View file @
52bf9dbb
...
@@ -1224,25 +1224,16 @@ class RawScrollbarState<T extends RawScrollbar> extends State<T> with TickerProv
...
@@ -1224,25 +1224,16 @@ class RawScrollbarState<T extends RawScrollbar> extends State<T> with TickerProv
@override
@override
void
didChangeDependencies
()
{
void
didChangeDependencies
()
{
super
.
didChangeDependencies
();
super
.
didChangeDependencies
();
_maybeTriggerScrollbar
(
);
assert
(
_debugScheduleCheckHasValidScrollPosition
()
);
}
}
// Waits one frame and cause an empty scroll event (zero delta pixels).
bool
_debugScheduleCheckHasValidScrollPosition
()
{
//
if
(!
showScrollbar
)
// This allows the thumb to show immediately when isAlwaysShown is true.
return
true
;
// A scroll event is required in order to paint the thumb.
void
_maybeTriggerScrollbar
()
{
WidgetsBinding
.
instance
!.
addPostFrameCallback
((
Duration
duration
)
{
WidgetsBinding
.
instance
!.
addPostFrameCallback
((
Duration
duration
)
{
final
ScrollController
?
scrollController
=
widget
.
controller
??
PrimaryScrollController
.
of
(
context
);
if
(
showScrollbar
)
{
_fadeoutTimer
?.
cancel
();
// Wait one frame and cause an empty scroll event. This allows the
// thumb to show immediately when isAlwaysShown is true. A scroll
// event is required in order to paint the thumb.
assert
(
_debugCheckHasValidScrollPosition
());
assert
(
_debugCheckHasValidScrollPosition
());
scrollController
!.
position
.
didUpdateScrollPositionBy
(
0
);
}
});
});
return
true
;
}
}
void
_validateInteractions
(
AnimationStatus
status
)
{
void
_validateInteractions
(
AnimationStatus
status
)
{
...
@@ -1365,7 +1356,8 @@ class RawScrollbarState<T extends RawScrollbar> extends State<T> with TickerProv
...
@@ -1365,7 +1356,8 @@ class RawScrollbarState<T extends RawScrollbar> extends State<T> with TickerProv
super
.
didUpdateWidget
(
oldWidget
);
super
.
didUpdateWidget
(
oldWidget
);
if
(
widget
.
isAlwaysShown
!=
oldWidget
.
isAlwaysShown
)
{
if
(
widget
.
isAlwaysShown
!=
oldWidget
.
isAlwaysShown
)
{
if
(
widget
.
isAlwaysShown
==
true
)
{
if
(
widget
.
isAlwaysShown
==
true
)
{
_maybeTriggerScrollbar
();
assert
(
_debugScheduleCheckHasValidScrollPosition
());
_fadeoutTimer
?.
cancel
();
_fadeoutAnimationController
.
animateTo
(
1.0
);
_fadeoutAnimationController
.
animateTo
(
1.0
);
}
else
{
}
else
{
_fadeoutAnimationController
.
reverse
();
_fadeoutAnimationController
.
reverse
();
...
...
packages/flutter/test/cupertino/scrollbar_test.dart
View file @
52bf9dbb
...
@@ -5,6 +5,7 @@
...
@@ -5,6 +5,7 @@
import
'dart:ui'
as
ui
;
import
'dart:ui'
as
ui
;
import
'package:flutter/cupertino.dart'
;
import
'package:flutter/cupertino.dart'
;
import
'package:flutter/foundation.dart'
;
import
'package:flutter/services.dart'
;
import
'package:flutter/services.dart'
;
import
'package:flutter_test/flutter_test.dart'
;
import
'package:flutter_test/flutter_test.dart'
;
...
@@ -389,9 +390,16 @@ void main() {
...
@@ -389,9 +390,16 @@ void main() {
);
);
}
}
final
FlutterExceptionHandler
?
handler
=
FlutterError
.
onError
;
FlutterErrorDetails
?
error
;
FlutterError
.
onError
=
(
FlutterErrorDetails
details
)
{
error
=
details
;
};
await
tester
.
pumpWidget
(
viewWithScroll
());
await
tester
.
pumpWidget
(
viewWithScroll
());
final
AssertionError
exception
=
tester
.
takeException
()
as
AssertionError
;
expect
(
error
,
isNotNull
);
expect
(
exception
,
isAssertionError
);
FlutterError
.
onError
=
handler
;
},
},
);
);
...
...
packages/flutter/test/widgets/scroll_notification_test.dart
View file @
52bf9dbb
...
@@ -21,8 +21,9 @@ void main() {
...
@@ -21,8 +21,9 @@ void main() {
);
);
}
}
await
tester
.
pumpWidget
(
buildFrame
(
1200.0
));
await
tester
.
pumpWidget
(
buildFrame
(
1200.0
));
expect
(
events
.
length
,
0
);
expect
(
events
.
length
,
1
);
events
.
clear
();
await
tester
.
pumpWidget
(
buildFrame
(
1000.0
));
await
tester
.
pumpWidget
(
buildFrame
(
1000.0
));
// Change the content dimensions will trigger a new event.
// Change the content dimensions will trigger a new event.
expect
(
events
.
length
,
1
);
expect
(
events
.
length
,
1
);
...
...
packages/flutter/test/widgets/scrollbar_test.dart
View file @
52bf9dbb
...
@@ -4,6 +4,7 @@
...
@@ -4,6 +4,7 @@
import
'dart:ui'
as
ui
;
import
'dart:ui'
as
ui
;
import
'package:flutter/foundation.dart'
;
import
'package:flutter/src/physics/utils.dart'
show
nearEqual
;
import
'package:flutter/src/physics/utils.dart'
show
nearEqual
;
import
'package:flutter/widgets.dart'
;
import
'package:flutter/widgets.dart'
;
import
'package:flutter_test/flutter_test.dart'
;
import
'package:flutter_test/flutter_test.dart'
;
...
@@ -1143,6 +1144,12 @@ void main() {
...
@@ -1143,6 +1144,12 @@ void main() {
});
});
testWidgets
(
'RawScrollbar.isAlwaysShown asserts that a ScrollPosition is attached'
,
(
WidgetTester
tester
)
async
{
testWidgets
(
'RawScrollbar.isAlwaysShown asserts that a ScrollPosition is attached'
,
(
WidgetTester
tester
)
async
{
final
FlutterExceptionHandler
?
handler
=
FlutterError
.
onError
;
FlutterErrorDetails
?
error
;
FlutterError
.
onError
=
(
FlutterErrorDetails
details
)
{
error
=
details
;
};
await
tester
.
pumpWidget
(
await
tester
.
pumpWidget
(
Directionality
(
Directionality
(
textDirection:
TextDirection
.
ltr
,
textDirection:
TextDirection
.
ltr
,
...
@@ -1163,12 +1170,15 @@ void main() {
...
@@ -1163,12 +1170,15 @@ void main() {
),
),
);
);
await
tester
.
pumpAndSettle
();
await
tester
.
pumpAndSettle
();
final
AssertionError
exception
=
tester
.
takeException
()
as
AssertionError
;
expect
(
exception
,
isAssertionError
);
expect
(
error
,
isNotNull
);
final
AssertionError
exception
=
error
!.
exception
as
AssertionError
;
expect
(
expect
(
exception
.
message
,
exception
.
message
,
contains
(
"The Scrollbar's ScrollController has no ScrollPosition attached."
),
contains
(
"The Scrollbar's ScrollController has no ScrollPosition attached."
),
);
);
FlutterError
.
onError
=
handler
;
});
});
testWidgets
(
'Interactive scrollbars should have a valid scroll controller'
,
(
WidgetTester
tester
)
async
{
testWidgets
(
'Interactive scrollbars should have a valid scroll controller'
,
(
WidgetTester
tester
)
async
{
...
...
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