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
727cee6d
Unverified
Commit
727cee6d
authored
Oct 07, 2020
by
Michael Goderbauer
Committed by
GitHub
Oct 07, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Migrate More Material Tests (#67482)
parent
bd2ec40c
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
197 additions
and
276 deletions
+197
-276
radio.dart
packages/flutter/lib/src/material/radio.dart
+1
-1
radio_list_tile.dart
packages/flutter/lib/src/material/radio_list_tile.dart
+1
-1
refresh_indicator.dart
packages/flutter/lib/src/material/refresh_indicator.dart
+2
-2
progress_indicator_test.dart
packages/flutter/test/material/progress_indicator_test.dart
+2
-4
radio_list_tile_test.dart
packages/flutter/test/material/radio_list_tile_test.dart
+22
-24
radio_test.dart
packages/flutter/test/material/radio_test.dart
+26
-28
raised_button_test.dart
packages/flutter/test/material/raised_button_test.dart
+21
-23
range_slider_test.dart
packages/flutter/test/material/range_slider_test.dart
+23
-25
raw_material_button_test.dart
packages/flutter/test/material/raw_material_button_test.dart
+4
-6
refresh_indicator_test.dart
packages/flutter/test/material/refresh_indicator_test.dart
+0
-56
reorderable_list_test.dart
packages/flutter/test/material/reorderable_list_test.dart
+50
-52
scaffold_test.dart
packages/flutter/test/material/scaffold_test.dart
+34
-36
scrollbar_paint_test.dart
packages/flutter/test/material/scrollbar_paint_test.dart
+1
-3
scrollbar_test.dart
packages/flutter/test/material/scrollbar_test.dart
+10
-15
No files found.
packages/flutter/lib/src/material/radio.dart
View file @
727cee6d
...
...
@@ -129,7 +129,7 @@ class Radio<T> extends StatefulWidget {
///
/// This radio button is considered selected if its [value] matches the
/// [groupValue].
final
T
groupValue
;
final
T
?
groupValue
;
/// Called when the user selects this radio button.
///
...
...
packages/flutter/lib/src/material/radio_list_tile.dart
View file @
727cee6d
...
...
@@ -335,7 +335,7 @@ class RadioListTile<T> extends StatelessWidget {
///
/// This radio button is considered selected if its [value] matches the
/// [groupValue].
final
T
groupValue
;
final
T
?
groupValue
;
/// Called when the user selects this radio button.
///
...
...
packages/flutter/lib/src/material/refresh_indicator.dart
View file @
727cee6d
...
...
@@ -175,7 +175,7 @@ class RefreshIndicatorState extends State<RefreshIndicator> with TickerProviderS
late
Animation
<
Color
?>
_valueColor
;
_RefreshIndicatorMode
?
_mode
;
Future
<
void
>?
_pendingRefreshFuture
;
late
Future
<
void
>
_pendingRefreshFuture
;
bool
?
_isIndicatorAtTop
;
double
?
_dragOffset
;
...
...
@@ -406,7 +406,7 @@ class RefreshIndicatorState extends State<RefreshIndicator> with TickerProviderS
/// When initiated in this manner, the refresh indicator is independent of any
/// actual scroll view. It defaults to showing the indicator at the top. To
/// show it at the bottom, set `atTop` to false.
Future
<
void
>
?
show
({
bool
atTop
=
true
})
{
Future
<
void
>
show
({
bool
atTop
=
true
})
{
if
(
_mode
!=
_RefreshIndicatorMode
.
refresh
&&
_mode
!=
_RefreshIndicatorMode
.
snap
)
{
if
(
_mode
==
null
)
...
...
packages/flutter/test/material/progress_indicator_test.dart
View file @
727cee6d
...
...
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// @dart = 2.8
import
'package:flutter_test/flutter_test.dart'
;
import
'package:flutter/rendering.dart'
;
import
'package:flutter/material.dart'
;
...
...
@@ -298,8 +296,8 @@ void main() {
});
testWidgets
(
'Determinate CircularProgressIndicator stops the animator'
,
(
WidgetTester
tester
)
async
{
double
progressValue
;
StateSetter
setState
;
double
?
progressValue
;
late
StateSetter
setState
;
await
tester
.
pumpWidget
(
Directionality
(
textDirection:
TextDirection
.
ltr
,
...
...
packages/flutter/test/material/radio_list_tile_test.dart
View file @
727cee6d
...
...
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// @dart = 2.8
import
'dart:ui'
;
import
'package:flutter/foundation.dart'
;
...
...
@@ -14,7 +12,7 @@ import 'package:flutter/material.dart';
import
'../widgets/semantics_tester.dart'
;
Widget
wrap
(
{
Widget
child
})
{
Widget
wrap
(
{
Widget
?
child
})
{
return
MediaQuery
(
data:
const
MediaQueryData
(),
child:
Directionality
(
...
...
@@ -28,7 +26,7 @@ void main() {
testWidgets
(
'RadioListTile should initialize according to groupValue'
,
(
WidgetTester
tester
)
async
{
final
List
<
int
>
values
=
<
int
>[
0
,
1
,
2
];
int
selectedValue
;
int
?
selectedValue
;
// Constructor parameters are required for [RadioListTile], but they are
// irrelevant when searching with [find.byType].
final
Type
radioListTileType
=
const
RadioListTile
<
int
>(
...
...
@@ -53,7 +51,7 @@ void main() {
body:
ListView
.
builder
(
itemCount:
values
.
length
,
itemBuilder:
(
BuildContext
context
,
int
index
)
=>
RadioListTile
<
int
>(
onChanged:
(
int
value
)
{
onChanged:
(
int
?
value
)
{
setState
(()
{
selectedValue
=
value
;
});
...
...
@@ -89,7 +87,7 @@ void main() {
testWidgets
(
'RadioListTile simple control test'
,
(
WidgetTester
tester
)
async
{
final
Key
key
=
UniqueKey
();
final
Key
titleKey
=
UniqueKey
();
final
List
<
int
>
log
=
<
int
>[];
final
List
<
int
?>
log
=
<
int
?
>[];
await
tester
.
pumpWidget
(
wrap
(
...
...
@@ -160,7 +158,7 @@ void main() {
testWidgets
(
'RadioListTile control tests'
,
(
WidgetTester
tester
)
async
{
final
List
<
int
>
values
=
<
int
>[
0
,
1
,
2
];
int
selectedValue
;
int
?
selectedValue
;
// Constructor parameters are required for [Radio], but they are irrelevant
// when searching with [find.byType].
final
Type
radioType
=
const
Radio
<
int
>(
...
...
@@ -178,7 +176,7 @@ void main() {
body:
ListView
.
builder
(
itemCount:
values
.
length
,
itemBuilder:
(
BuildContext
context
,
int
index
)
=>
RadioListTile
<
int
>(
onChanged:
(
int
value
)
{
onChanged:
(
int
?
value
)
{
log
.
add
(
value
);
setState
(()
{
selectedValue
=
value
;
...
...
@@ -228,7 +226,7 @@ void main() {
testWidgets
(
'Selected RadioListTile should not trigger onChanged'
,
(
WidgetTester
tester
)
async
{
// Regression test for https://github.com/flutter/flutter/issues/30311
final
List
<
int
>
values
=
<
int
>[
0
,
1
,
2
];
int
selectedValue
;
int
?
selectedValue
;
// Constructor parameters are required for [Radio], but they are irrelevant
// when searching with [find.byType].
final
Type
radioType
=
const
Radio
<
int
>(
...
...
@@ -246,7 +244,7 @@ void main() {
body:
ListView
.
builder
(
itemCount:
values
.
length
,
itemBuilder:
(
BuildContext
context
,
int
index
)
=>
RadioListTile
<
int
>(
onChanged:
(
int
value
)
{
onChanged:
(
int
?
value
)
{
log
.
add
(
value
);
setState
(()
{
selectedValue
=
value
;
...
...
@@ -280,7 +278,7 @@ void main() {
testWidgets
(
'Selected RadioListTile should trigger onChanged when toggleable'
,
(
WidgetTester
tester
)
async
{
final
List
<
int
>
values
=
<
int
>[
0
,
1
,
2
];
int
selectedValue
;
int
?
selectedValue
;
// Constructor parameters are required for [Radio], but they are irrelevant
// when searching with [find.byType].
final
Type
radioType
=
const
Radio
<
int
>(
...
...
@@ -299,7 +297,7 @@ void main() {
itemCount:
values
.
length
,
itemBuilder:
(
BuildContext
context
,
int
index
)
{
return
RadioListTile
<
int
>(
onChanged:
(
int
value
)
{
onChanged:
(
int
?
value
)
{
log
.
add
(
value
);
setState
(()
{
selectedValue
=
value
;
...
...
@@ -325,16 +323,16 @@ void main() {
await
tester
.
tap
(
find
.
text
(
'0'
));
await
tester
.
pump
();
expect
(
log
,
equals
(<
int
>[
0
,
null
]));
expect
(
log
,
equals
(<
int
?
>[
0
,
null
]));
await
tester
.
tap
(
find
.
byType
(
radioType
).
at
(
0
));
await
tester
.
pump
();
expect
(
log
,
equals
(<
int
>[
0
,
null
,
0
]));
expect
(
log
,
equals
(<
int
?
>[
0
,
null
,
0
]));
});
testWidgets
(
'RadioListTile can be toggled when toggleable is set'
,
(
WidgetTester
tester
)
async
{
final
Key
key
=
UniqueKey
();
final
List
<
int
>
log
=
<
int
>[];
final
List
<
int
?>
log
=
<
int
?
>[];
await
tester
.
pumpWidget
(
Material
(
child:
Center
(
...
...
@@ -367,7 +365,7 @@ void main() {
await
tester
.
tap
(
find
.
byKey
(
key
));
expect
(
log
,
equals
(<
int
>[
null
]));
expect
(
log
,
equals
(<
int
?
>[
null
]));
log
.
clear
();
await
tester
.
pumpWidget
(
Material
(
...
...
@@ -395,7 +393,7 @@ void main() {
child:
RadioListTile
<
int
>(
value:
1
,
groupValue:
2
,
onChanged:
(
int
i
)
{},
onChanged:
(
int
?
i
)
{},
title:
const
Text
(
'Title'
),
),
),
...
...
@@ -431,7 +429,7 @@ void main() {
child:
RadioListTile
<
int
>(
value:
2
,
groupValue:
2
,
onChanged:
(
int
i
)
{},
onChanged:
(
int
?
i
)
{},
title:
const
Text
(
'Title'
),
),
),
...
...
@@ -540,7 +538,7 @@ void main() {
final
SemanticsTester
semantics
=
SemanticsTester
(
tester
);
final
Key
key
=
UniqueKey
();
dynamic
semanticEvent
;
int
radioValue
=
2
;
int
?
radioValue
=
2
;
SystemChannels
.
accessibility
.
setMockMessageHandler
((
dynamic
message
)
async
{
semanticEvent
=
message
;
});
...
...
@@ -551,7 +549,7 @@ void main() {
key:
key
,
value:
1
,
groupValue:
radioValue
,
onChanged:
(
int
i
)
{
onChanged:
(
int
?
i
)
{
radioValue
=
i
;
},
title:
const
Text
(
'Title'
),
...
...
@@ -566,10 +564,10 @@ void main() {
expect
(
radioValue
,
1
);
expect
(
semanticEvent
,
<
String
,
dynamic
>{
'type'
:
'tap'
,
'nodeId'
:
object
.
debugSemantics
.
id
,
'nodeId'
:
object
.
debugSemantics
!
.
id
,
'data'
:
<
String
,
dynamic
>{},
});
expect
(
object
.
debugSemantics
.
getSemanticsData
().
hasAction
(
SemanticsAction
.
tap
),
true
);
expect
(
object
.
debugSemantics
!
.
getSemanticsData
().
hasAction
(
SemanticsAction
.
tap
),
true
);
semantics
.
dispose
();
SystemChannels
.
accessibility
.
setMockMessageHandler
(
null
);
...
...
@@ -591,7 +589,7 @@ void main() {
);
await
tester
.
pump
();
expect
(
Focus
.
of
(
childKey
.
currentContext
,
nullOk:
true
)
.
hasPrimaryFocus
,
isTrue
);
expect
(
Focus
.
of
(
childKey
.
currentContext
!)!
.
hasPrimaryFocus
,
isTrue
);
await
tester
.
pumpWidget
(
wrap
(
...
...
@@ -606,6 +604,6 @@ void main() {
);
await
tester
.
pump
();
expect
(
Focus
.
of
(
childKey
.
currentContext
,
nullOk:
true
)
.
hasPrimaryFocus
,
isFalse
);
expect
(
Focus
.
of
(
childKey
.
currentContext
!)!
.
hasPrimaryFocus
,
isFalse
);
});
}
packages/flutter/test/material/radio_test.dart
View file @
727cee6d
...
...
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// @dart = 2.8
import
'dart:ui'
;
import
'package:flutter/foundation.dart'
;
...
...
@@ -18,7 +16,7 @@ import '../widgets/semantics_tester.dart';
void
main
(
)
{
testWidgets
(
'Radio control test'
,
(
WidgetTester
tester
)
async
{
final
Key
key
=
UniqueKey
();
final
List
<
int
>
log
=
<
int
>[];
final
List
<
int
?>
log
=
<
int
?
>[];
await
tester
.
pumpWidget
(
Material
(
child:
Center
(
...
...
@@ -70,7 +68,7 @@ void main() {
testWidgets
(
'Radio can be toggled when toggleable is set'
,
(
WidgetTester
tester
)
async
{
final
Key
key
=
UniqueKey
();
final
List
<
int
>
log
=
<
int
>[];
final
List
<
int
?>
log
=
<
int
?
>[];
await
tester
.
pumpWidget
(
Material
(
child:
Center
(
...
...
@@ -103,7 +101,7 @@ void main() {
await
tester
.
tap
(
find
.
byKey
(
key
));
expect
(
log
,
equals
(<
int
>[
null
]));
expect
(
log
,
equals
(<
int
?
>[
null
]));
log
.
clear
();
await
tester
.
pumpWidget
(
Material
(
...
...
@@ -136,7 +134,7 @@ void main() {
key:
key1
,
groupValue:
true
,
value:
true
,
onChanged:
(
bool
newValue
)
{
},
onChanged:
(
bool
?
newValue
)
{
},
),
),
),
...
...
@@ -158,7 +156,7 @@ void main() {
key:
key2
,
groupValue:
true
,
value:
true
,
onChanged:
(
bool
newValue
)
{
},
onChanged:
(
bool
?
newValue
)
{
},
),
),
),
...
...
@@ -177,7 +175,7 @@ void main() {
child:
Radio
<
int
>(
value:
1
,
groupValue:
2
,
onChanged:
(
int
i
)
{
},
onChanged:
(
int
?
i
)
{
},
),
));
...
...
@@ -203,7 +201,7 @@ void main() {
child:
Radio
<
int
>(
value:
2
,
groupValue:
2
,
onChanged:
(
int
i
)
{
},
onChanged:
(
int
?
i
)
{
},
),
));
...
...
@@ -293,7 +291,7 @@ void main() {
final
SemanticsTester
semantics
=
SemanticsTester
(
tester
);
final
Key
key
=
UniqueKey
();
dynamic
semanticEvent
;
int
radioValue
=
2
;
int
?
radioValue
=
2
;
SystemChannels
.
accessibility
.
setMockMessageHandler
((
dynamic
message
)
async
{
semanticEvent
=
message
;
});
...
...
@@ -303,7 +301,7 @@ void main() {
key:
key
,
value:
1
,
groupValue:
radioValue
,
onChanged:
(
int
i
)
{
onChanged:
(
int
?
i
)
{
radioValue
=
i
;
},
),
...
...
@@ -315,10 +313,10 @@ void main() {
expect
(
radioValue
,
1
);
expect
(
semanticEvent
,
<
String
,
dynamic
>{
'type'
:
'tap'
,
'nodeId'
:
object
.
debugSemantics
.
id
,
'nodeId'
:
object
.
debugSemantics
!
.
id
,
'data'
:
<
String
,
dynamic
>{},
});
expect
(
object
.
debugSemantics
.
getSemanticsData
().
hasAction
(
SemanticsAction
.
tap
),
true
);
expect
(
object
.
debugSemantics
!
.
getSemanticsData
().
hasAction
(
SemanticsAction
.
tap
),
true
);
semantics
.
dispose
();
SystemChannels
.
accessibility
.
setMockMessageHandler
(
null
);
...
...
@@ -342,7 +340,7 @@ void main() {
key:
radioKey
,
value:
1
,
groupValue:
1
,
onChanged:
(
int
value
)
{
},
onChanged:
(
int
?
value
)
{
},
),
),
),
...
...
@@ -361,7 +359,7 @@ void main() {
testWidgets
(
'Radio is focusable and has correct focus color'
,
(
WidgetTester
tester
)
async
{
final
FocusNode
focusNode
=
FocusNode
(
debugLabel:
'Radio'
);
tester
.
binding
.
focusManager
.
highlightStrategy
=
FocusHighlightStrategy
.
alwaysTraditional
;
int
groupValue
=
0
;
int
?
groupValue
=
0
;
const
Key
radioKey
=
Key
(
'radio'
);
Widget
buildApp
({
bool
enabled
=
true
})
{
return
MaterialApp
(
...
...
@@ -375,7 +373,7 @@ void main() {
child:
Radio
<
int
>(
key:
radioKey
,
value:
0
,
onChanged:
enabled
?
(
int
newValue
)
{
onChanged:
enabled
?
(
int
?
newValue
)
{
setState
(()
{
groupValue
=
newValue
;
});
...
...
@@ -439,7 +437,7 @@ void main() {
testWidgets
(
'Radio can be hovered and has correct hover color'
,
(
WidgetTester
tester
)
async
{
tester
.
binding
.
focusManager
.
highlightStrategy
=
FocusHighlightStrategy
.
alwaysTraditional
;
int
groupValue
=
0
;
int
?
groupValue
=
0
;
const
Key
radioKey
=
Key
(
'radio'
);
Widget
buildApp
({
bool
enabled
=
true
})
{
return
MaterialApp
(
...
...
@@ -453,7 +451,7 @@ void main() {
child:
Radio
<
int
>(
key:
radioKey
,
value:
0
,
onChanged:
enabled
?
(
int
newValue
)
{
onChanged:
enabled
?
(
int
?
newValue
)
{
setState
(()
{
groupValue
=
newValue
;
});
...
...
@@ -519,7 +517,7 @@ void main() {
testWidgets
(
'Radio can be controlled by keyboard shortcuts'
,
(
WidgetTester
tester
)
async
{
tester
.
binding
.
focusManager
.
highlightStrategy
=
FocusHighlightStrategy
.
alwaysTraditional
;
int
groupValue
=
1
;
int
?
groupValue
=
1
;
const
Key
radioKey0
=
Key
(
'radio0'
);
const
Key
radioKey1
=
Key
(
'radio1'
);
const
Key
radioKey2
=
Key
(
'radio2'
);
...
...
@@ -538,7 +536,7 @@ void main() {
Radio
<
int
>(
key:
radioKey0
,
value:
0
,
onChanged:
enabled
?
(
int
newValue
)
{
onChanged:
enabled
?
(
int
?
newValue
)
{
setState
(()
{
groupValue
=
newValue
;
});
...
...
@@ -550,7 +548,7 @@ void main() {
Radio
<
int
>(
key:
radioKey1
,
value:
1
,
onChanged:
enabled
?
(
int
newValue
)
{
onChanged:
enabled
?
(
int
?
newValue
)
{
setState
(()
{
groupValue
=
newValue
;
});
...
...
@@ -561,7 +559,7 @@ void main() {
Radio
<
int
>(
key:
radioKey2
,
value:
2
,
onChanged:
enabled
?
(
int
newValue
)
{
onChanged:
enabled
?
(
int
?
newValue
)
{
setState
(()
{
groupValue
=
newValue
;
});
...
...
@@ -605,7 +603,7 @@ void main() {
child:
Radio
<
int
>(
visualDensity:
visualDensity
,
key:
key
,
onChanged:
(
int
value
)
{},
onChanged:
(
int
?
value
)
{},
value:
0
,
groupValue:
0
,
),
...
...
@@ -648,7 +646,7 @@ void main() {
key:
key
,
mouseCursor:
SystemMouseCursors
.
text
,
value:
1
,
onChanged:
(
int
v
)
{},
onChanged:
(
int
?
v
)
{},
groupValue:
2
,
),
),
...
...
@@ -664,7 +662,7 @@ void main() {
await
tester
.
pump
();
expect
(
RendererBinding
.
instance
.
mouseTracker
.
debugDeviceActiveCursor
(
1
),
SystemMouseCursors
.
text
);
expect
(
RendererBinding
.
instance
!
.
mouseTracker
.
debugDeviceActiveCursor
(
1
),
SystemMouseCursors
.
text
);
// Test default cursor
...
...
@@ -678,7 +676,7 @@ void main() {
cursor:
SystemMouseCursors
.
forbidden
,
child:
Radio
<
int
>(
value:
1
,
onChanged:
(
int
v
)
{},
onChanged:
(
int
?
v
)
{},
groupValue:
2
,
),
),
...
...
@@ -688,7 +686,7 @@ void main() {
),
);
expect
(
RendererBinding
.
instance
.
mouseTracker
.
debugDeviceActiveCursor
(
1
),
SystemMouseCursors
.
click
);
expect
(
RendererBinding
.
instance
!
.
mouseTracker
.
debugDeviceActiveCursor
(
1
),
SystemMouseCursors
.
click
);
// Test default cursor when disabled
await
tester
.
pumpWidget
(
...
...
@@ -711,6 +709,6 @@ void main() {
),
);
expect
(
RendererBinding
.
instance
.
mouseTracker
.
debugDeviceActiveCursor
(
1
),
SystemMouseCursors
.
basic
);
expect
(
RendererBinding
.
instance
!
.
mouseTracker
.
debugDeviceActiveCursor
(
1
),
SystemMouseCursors
.
basic
);
});
}
packages/flutter/test/material/raised_button_test.dart
View file @
727cee6d
...
...
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// @dart = 2.8
import
'package:flutter/gestures.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter_test/flutter_test.dart'
;
...
...
@@ -38,10 +36,10 @@ void main() {
expect
(
material
.
elevation
,
2.0
);
expect
(
material
.
shadowColor
,
null
);
expect
(
material
.
shape
,
RoundedRectangleBorder
(
borderRadius:
BorderRadius
.
circular
(
2.0
)));
expect
(
material
.
textStyle
.
color
,
const
Color
(
0xdd000000
));
expect
(
material
.
textStyle
.
fontFamily
,
'Roboto'
);
expect
(
material
.
textStyle
.
fontSize
,
14
);
expect
(
material
.
textStyle
.
fontWeight
,
FontWeight
.
w500
);
expect
(
material
.
textStyle
!
.
color
,
const
Color
(
0xdd000000
));
expect
(
material
.
textStyle
!
.
fontFamily
,
'Roboto'
);
expect
(
material
.
textStyle
!
.
fontSize
,
14
);
expect
(
material
.
textStyle
!
.
fontWeight
,
FontWeight
.
w500
);
expect
(
material
.
type
,
MaterialType
.
button
);
final
Offset
center
=
tester
.
getCenter
(
find
.
byType
(
RaisedButton
));
...
...
@@ -58,10 +56,10 @@ void main() {
expect
(
material
.
elevation
,
8.0
);
expect
(
material
.
shadowColor
,
null
);
expect
(
material
.
shape
,
RoundedRectangleBorder
(
borderRadius:
BorderRadius
.
circular
(
2.0
)));
expect
(
material
.
textStyle
.
color
,
const
Color
(
0xdd000000
));
expect
(
material
.
textStyle
.
fontFamily
,
'Roboto'
);
expect
(
material
.
textStyle
.
fontSize
,
14
);
expect
(
material
.
textStyle
.
fontWeight
,
FontWeight
.
w500
);
expect
(
material
.
textStyle
!
.
color
,
const
Color
(
0xdd000000
));
expect
(
material
.
textStyle
!
.
fontFamily
,
'Roboto'
);
expect
(
material
.
textStyle
!
.
fontSize
,
14
);
expect
(
material
.
textStyle
!
.
fontWeight
,
FontWeight
.
w500
);
expect
(
material
.
type
,
MaterialType
.
button
);
// Disabled RaisedButton
...
...
@@ -83,10 +81,10 @@ void main() {
expect
(
material
.
elevation
,
0.0
);
expect
(
material
.
shadowColor
,
null
);
expect
(
material
.
shape
,
RoundedRectangleBorder
(
borderRadius:
BorderRadius
.
circular
(
2.0
)));
expect
(
material
.
textStyle
.
color
,
const
Color
(
0x61000000
));
expect
(
material
.
textStyle
.
fontFamily
,
'Roboto'
);
expect
(
material
.
textStyle
.
fontSize
,
14
);
expect
(
material
.
textStyle
.
fontWeight
,
FontWeight
.
w500
);
expect
(
material
.
textStyle
!
.
color
,
const
Color
(
0x61000000
));
expect
(
material
.
textStyle
!
.
fontFamily
,
'Roboto'
);
expect
(
material
.
textStyle
!
.
fontSize
,
14
);
expect
(
material
.
textStyle
!
.
fontWeight
,
FontWeight
.
w500
);
expect
(
material
.
type
,
MaterialType
.
button
);
});
...
...
@@ -198,7 +196,7 @@ void main() {
);
Color
textColor
()
{
return
tester
.
renderObject
<
RenderParagraph
>(
find
.
text
(
'RaisedButton'
)).
text
.
style
.
color
;
return
tester
.
renderObject
<
RenderParagraph
>(
find
.
text
(
'RaisedButton'
)).
text
.
style
!.
color
!
;
}
// Default, not disabled.
...
...
@@ -267,7 +265,7 @@ void main() {
),
);
Color
iconColor
()
=>
_iconStyle
(
tester
,
Icons
.
add
).
color
;
Color
iconColor
()
=>
_iconStyle
(
tester
,
Icons
.
add
).
color
!
;
// Default, not disabled.
expect
(
iconColor
(),
equals
(
defaultColor
));
...
...
@@ -325,7 +323,7 @@ void main() {
);
Color
textColor
()
{
return
tester
.
renderObject
<
RenderParagraph
>(
find
.
text
(
'RaisedButton'
)).
text
.
style
.
color
;
return
tester
.
renderObject
<
RenderParagraph
>(
find
.
text
(
'RaisedButton'
)).
text
.
style
!.
color
!
;
}
// Disabled.
...
...
@@ -338,7 +336,7 @@ void main() {
bool
wasPressed
;
Finder
raisedButton
;
Widget
buildFrame
({
VoidCallback
onPressed
,
VoidCallback
onLongPress
})
{
Widget
buildFrame
({
VoidCallback
?
onPressed
,
VoidCallback
?
onLongPress
})
{
return
Directionality
(
textDirection:
TextDirection
.
ltr
,
child:
RaisedButton
(
...
...
@@ -454,7 +452,7 @@ void main() {
addTearDown
(
gesture
.
removePointer
);
await
tester
.
pump
();
expect
(
RendererBinding
.
instance
.
mouseTracker
.
debugDeviceActiveCursor
(
1
),
SystemMouseCursors
.
text
);
expect
(
RendererBinding
.
instance
!
.
mouseTracker
.
debugDeviceActiveCursor
(
1
),
SystemMouseCursors
.
text
);
await
tester
.
pumpWidget
(
Directionality
(
...
...
@@ -469,7 +467,7 @@ void main() {
),
);
expect
(
RendererBinding
.
instance
.
mouseTracker
.
debugDeviceActiveCursor
(
1
),
SystemMouseCursors
.
text
);
expect
(
RendererBinding
.
instance
!
.
mouseTracker
.
debugDeviceActiveCursor
(
1
),
SystemMouseCursors
.
text
);
// Test default cursor
await
tester
.
pumpWidget
(
...
...
@@ -484,7 +482,7 @@ void main() {
),
);
expect
(
RendererBinding
.
instance
.
mouseTracker
.
debugDeviceActiveCursor
(
1
),
SystemMouseCursors
.
click
);
expect
(
RendererBinding
.
instance
!
.
mouseTracker
.
debugDeviceActiveCursor
(
1
),
SystemMouseCursors
.
click
);
// Test default cursor when disabled
await
tester
.
pumpWidget
(
...
...
@@ -499,7 +497,7 @@ void main() {
),
);
expect
(
RendererBinding
.
instance
.
mouseTracker
.
debugDeviceActiveCursor
(
1
),
SystemMouseCursors
.
basic
);
expect
(
RendererBinding
.
instance
!
.
mouseTracker
.
debugDeviceActiveCursor
(
1
),
SystemMouseCursors
.
basic
);
});
...
...
@@ -735,5 +733,5 @@ TextStyle _iconStyle(WidgetTester tester, IconData icon) {
final
RichText
iconRichText
=
tester
.
widget
<
RichText
>(
find
.
descendant
(
of:
find
.
byIcon
(
icon
),
matching:
find
.
byType
(
RichText
)),
);
return
iconRichText
.
text
.
style
;
return
iconRichText
.
text
.
style
!
;
}
packages/flutter/test/material/range_slider_test.dart
View file @
727cee6d
...
...
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// @dart = 2.8
import
'dart:ui'
;
import
'package:flutter/cupertino.dart'
;
...
...
@@ -886,8 +884,8 @@ void main() {
testWidgets
(
'Range Slider onChangeEnd and onChangeStart are called on an interaction initiated by tap'
,
(
WidgetTester
tester
)
async
{
RangeValues
values
=
const
RangeValues
(
30
,
70
);
RangeValues
startValues
;
RangeValues
endValues
;
RangeValues
?
startValues
;
RangeValues
?
endValues
;
await
tester
.
pumpWidget
(
MaterialApp
(
...
...
@@ -934,18 +932,18 @@ void main() {
expect
(
startValues
,
null
);
expect
(
endValues
,
null
);
await
tester
.
dragFrom
(
leftTarget
,
(
bottomRight
-
topLeft
)
*
0.2
);
expect
(
startValues
.
start
,
moreOrLessEquals
(
30
,
epsilon:
1
));
expect
(
startValues
.
end
,
moreOrLessEquals
(
70
,
epsilon:
1
));
expect
(
startValues
!
.
start
,
moreOrLessEquals
(
30
,
epsilon:
1
));
expect
(
startValues
!
.
end
,
moreOrLessEquals
(
70
,
epsilon:
1
));
expect
(
values
.
start
,
moreOrLessEquals
(
50
,
epsilon:
1
));
expect
(
values
.
end
,
moreOrLessEquals
(
70
,
epsilon:
1
));
expect
(
endValues
.
start
,
moreOrLessEquals
(
50
,
epsilon:
1
));
expect
(
endValues
.
end
,
moreOrLessEquals
(
70
,
epsilon:
1
));
expect
(
endValues
!
.
start
,
moreOrLessEquals
(
50
,
epsilon:
1
));
expect
(
endValues
!
.
end
,
moreOrLessEquals
(
70
,
epsilon:
1
));
});
testWidgets
(
'Range Slider onChangeEnd and onChangeStart are called on an interaction initiated by drag'
,
(
WidgetTester
tester
)
async
{
RangeValues
values
=
const
RangeValues
(
30
,
70
);
RangeValues
startValues
;
RangeValues
endValues
;
late
RangeValues
startValues
;
late
RangeValues
endValues
;
await
tester
.
pumpWidget
(
MaterialApp
(
...
...
@@ -1029,14 +1027,14 @@ void main() {
}
Widget
_buildThemedApp
({
ThemeData
theme
,
Color
activeColor
,
Color
inactiveColor
,
int
divisions
,
required
ThemeData
theme
,
Color
?
activeColor
,
Color
?
inactiveColor
,
int
?
divisions
,
bool
enabled
=
true
,
})
{
RangeValues
values
=
const
RangeValues
(
0.5
,
0.75
);
final
ValueChanged
<
RangeValues
>
onChanged
=
!
enabled
?
null
:
(
RangeValues
newValues
)
{
final
ValueChanged
<
RangeValues
>
?
onChanged
=
!
enabled
?
null
:
(
RangeValues
newValues
)
{
values
=
newValues
;
};
return
MaterialApp
(
...
...
@@ -1287,12 +1285,12 @@ void main() {
RangeValues
values
=
const
RangeValues
(
0.5
,
0.75
);
Widget
buildApp
({
Color
activeColor
,
Color
inactiveColor
,
int
divisions
,
Color
?
activeColor
,
Color
?
inactiveColor
,
int
?
divisions
,
bool
enabled
=
true
,
})
{
final
ValueChanged
<
RangeValues
>
onChanged
=
!
enabled
?
null
:
(
RangeValues
newValues
)
{
final
ValueChanged
<
RangeValues
>
?
onChanged
=
!
enabled
?
null
:
(
RangeValues
newValues
)
{
values
=
newValues
;
};
return
MaterialApp
(
...
...
@@ -1345,9 +1343,9 @@ void main() {
const
Color
fillColor
=
Color
(
0xf55f5f5f
);
Widget
buildApp
({
Color
activeColor
,
Color
inactiveColor
,
int
divisions
,
Color
?
activeColor
,
Color
?
inactiveColor
,
int
?
divisions
,
bool
enabled
=
true
,
})
{
final
ValueChanged
<
RangeValues
>
onChanged
=
(
RangeValues
newValues
)
{
...
...
@@ -1374,12 +1372,12 @@ void main() {
ElevatedButton
(
child:
const
Text
(
'Next'
),
onPressed:
()
{
Navigator
.
of
(
context
).
pushReplacement
(
Navigator
.
of
(
context
)
!
.
pushReplacement
(
MaterialPageRoute
<
void
>(
builder:
(
BuildContext
context
)
{
return
ElevatedButton
(
child:
const
Text
(
'Inner page'
),
onPressed:
()
{
Navigator
.
of
(
context
).
pop
();
},
onPressed:
()
{
Navigator
.
of
(
context
)
!
.
pop
();
},
);
},
),
...
...
@@ -1943,7 +1941,7 @@ void main() {
await
tester
.
pumpWidget
(
buildFrame
(
15
));
await
tester
.
pumpAndSettle
();
// Finish the animation.
Rect
activeTrackRect
;
late
Rect
activeTrackRect
;
expect
(
renderObject
,
paints
..
something
((
Symbol
method
,
List
<
dynamic
>
arguments
)
{
if
(
method
!=
#drawRect
)
return
false
;
...
...
packages/flutter/test/material/raw_material_button_test.dart
View file @
727cee6d
...
...
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// @dart = 2.8
import
'package:flutter/foundation.dart'
;
import
'package:flutter/gestures.dart'
;
import
'package:flutter/material.dart'
;
...
...
@@ -443,7 +441,7 @@ void main() {
bool
wasPressed
;
Finder
rawMaterialButton
;
Widget
buildFrame
({
VoidCallback
onPressed
,
VoidCallback
onLongPress
})
{
Widget
buildFrame
({
VoidCallback
?
onPressed
,
VoidCallback
?
onLongPress
})
{
return
Directionality
(
textDirection:
TextDirection
.
ltr
,
child:
RawMaterialButton
(
...
...
@@ -593,7 +591,7 @@ void main() {
await
tester
.
pump
();
expect
(
RendererBinding
.
instance
.
mouseTracker
.
debugDeviceActiveCursor
(
1
),
SystemMouseCursors
.
text
);
expect
(
RendererBinding
.
instance
!
.
mouseTracker
.
debugDeviceActiveCursor
(
1
),
SystemMouseCursors
.
text
);
// Test default cursor
await
tester
.
pumpWidget
(
...
...
@@ -608,7 +606,7 @@ void main() {
),
);
expect
(
RendererBinding
.
instance
.
mouseTracker
.
debugDeviceActiveCursor
(
1
),
SystemMouseCursors
.
click
);
expect
(
RendererBinding
.
instance
!
.
mouseTracker
.
debugDeviceActiveCursor
(
1
),
SystemMouseCursors
.
click
);
// Test default cursor when disabled
await
tester
.
pumpWidget
(
...
...
@@ -623,6 +621,6 @@ void main() {
),
);
expect
(
RendererBinding
.
instance
.
mouseTracker
.
debugDeviceActiveCursor
(
1
),
SystemMouseCursors
.
basic
);
expect
(
RendererBinding
.
instance
!
.
mouseTracker
.
debugDeviceActiveCursor
(
1
),
SystemMouseCursors
.
basic
);
});
}
packages/flutter/test/material/refresh_indicator_test.dart
View file @
727cee6d
...
...
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// @dart = 2.8
import
'dart:async'
;
import
'package:flutter/foundation.dart'
;
...
...
@@ -360,35 +358,6 @@ void main() {
expect
(
completed2
,
true
);
});
testWidgets
(
'RefreshIndicator - onRefresh asserts'
,
(
WidgetTester
tester
)
async
{
refreshCalled
=
false
;
await
tester
.
pumpWidget
(
MaterialApp
(
home:
RefreshIndicator
(
onRefresh:
()
{
refreshCalled
=
true
;
return
null
;
// Missing a returned Future value here, should cause framework to throw.
},
child:
ListView
(
physics:
const
AlwaysScrollableScrollPhysics
(),
children:
<
String
>[
'A'
,
'B'
,
'C'
,
'D'
,
'E'
,
'F'
].
map
<
Widget
>((
String
item
)
{
return
SizedBox
(
height:
200.0
,
child:
Text
(
item
),
);
}).
toList
(),
),
),
),
);
await
tester
.
fling
(
find
.
text
(
'A'
),
const
Offset
(
0.0
,
300.0
),
1000.0
);
await
tester
.
pump
();
await
tester
.
pump
(
const
Duration
(
seconds:
1
));
// finish the scroll animation
expect
(
refreshCalled
,
true
);
expect
(
tester
.
takeException
(),
isFlutterError
);
});
testWidgets
(
'Refresh starts while scroll view moves back to 0.0 after overscroll'
,
(
WidgetTester
tester
)
async
{
refreshCalled
=
false
;
double
lastScrollOffset
;
...
...
@@ -458,31 +427,6 @@ void main() {
expect
(
layoutCount
,
1
);
});
testWidgets
(
'strokeWidth cannot be null in RefreshIndicator'
,
(
WidgetTester
tester
)
async
{
try
{
await
tester
.
pumpWidget
(
MaterialApp
(
home:
RefreshIndicator
(
onRefresh:
()
async
{},
strokeWidth:
null
,
child:
ListView
(
physics:
const
AlwaysScrollableScrollPhysics
(),
children:
<
String
>[
'A'
,
'B'
,
'C'
,
'D'
,
'E'
,
'F'
].
map
<
Widget
>((
String
item
)
{
return
SizedBox
(
height:
200.0
,
child:
Text
(
item
),
);
}).
toList
(),
),
),
)
);
}
on
AssertionError
catch
(
_
)
{
return
;
}
fail
(
'The assertion was not thrown when strokeWidth was null'
);
});
testWidgets
(
'RefreshIndicator responds to strokeWidth'
,
(
WidgetTester
tester
)
async
{
await
tester
.
pumpWidget
(
MaterialApp
(
...
...
packages/flutter/test/material/reorderable_list_test.dart
View file @
727cee6d
...
...
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// @dart = 2.8
import
'package:flutter/gestures.dart'
;
import
'package:flutter/semantics.dart'
;
import
'package:flutter_test/flutter_test.dart'
;
...
...
@@ -13,7 +11,7 @@ void main() {
group
(
'
$ReorderableListView
'
,
()
{
const
double
itemHeight
=
48.0
;
const
List
<
String
>
originalListItems
=
<
String
>[
'Item 1'
,
'Item 2'
,
'Item 3'
,
'Item 4'
];
List
<
String
>
listItems
;
late
List
<
String
>
listItems
;
void
onReorder
(
int
oldIndex
,
int
newIndex
)
{
if
(
oldIndex
<
newIndex
)
{
...
...
@@ -32,7 +30,7 @@ void main() {
);
}
Widget
build
({
Widget
header
,
Axis
scrollDirection
=
Axis
.
vertical
,
TextDirection
textDirection
=
TextDirection
.
ltr
})
{
Widget
build
({
Widget
?
header
,
Axis
scrollDirection
=
Axis
.
vertical
,
TextDirection
textDirection
=
TextDirection
.
ltr
})
{
return
MaterialApp
(
home:
Directionality
(
textDirection:
textDirection
,
...
...
@@ -172,43 +170,43 @@ void main() {
Element
getContentElement
()
{
final
SingleChildScrollView
listScrollView
=
tester
.
widget
(
find
.
byType
(
SingleChildScrollView
));
final
Widget
scrollContents
=
listScrollView
.
child
;
final
Widget
scrollContents
=
listScrollView
.
child
!
;
final
Element
contentElement
=
tester
.
element
(
find
.
byElementPredicate
((
Element
element
)
=>
element
.
widget
==
scrollContents
));
return
contentElement
;
}
const
double
kDraggingListHeight
=
292.0
;
// Drag a normal text item
expect
(
getContentElement
().
size
.
height
,
kDraggingListHeight
);
expect
(
getContentElement
().
size
!
.
height
,
kDraggingListHeight
);
TestGesture
drag
=
await
tester
.
startGesture
(
tester
.
getCenter
(
find
.
text
(
'Normal item'
)));
await
tester
.
pump
(
kLongPressTimeout
+
kPressTimeout
);
await
tester
.
pumpAndSettle
();
expect
(
getContentElement
().
size
.
height
,
kDraggingListHeight
);
expect
(
getContentElement
().
size
!
.
height
,
kDraggingListHeight
);
// Move it
await
drag
.
moveTo
(
tester
.
getCenter
(
find
.
text
(
'Last item'
)));
await
tester
.
pumpAndSettle
();
expect
(
getContentElement
().
size
.
height
,
kDraggingListHeight
);
expect
(
getContentElement
().
size
!
.
height
,
kDraggingListHeight
);
// Drop it
await
drag
.
up
();
await
tester
.
pumpAndSettle
();
expect
(
getContentElement
().
size
.
height
,
kDraggingListHeight
);
expect
(
getContentElement
().
size
!
.
height
,
kDraggingListHeight
);
// Drag a tall item
drag
=
await
tester
.
startGesture
(
tester
.
getCenter
(
find
.
text
(
'Tall item'
)));
await
tester
.
pump
(
kLongPressTimeout
+
kPressTimeout
);
await
tester
.
pumpAndSettle
();
expect
(
getContentElement
().
size
.
height
,
kDraggingListHeight
);
expect
(
getContentElement
().
size
!
.
height
,
kDraggingListHeight
);
// Move it
await
drag
.
moveTo
(
tester
.
getCenter
(
find
.
text
(
'Last item'
)));
await
tester
.
pumpAndSettle
();
expect
(
getContentElement
().
size
.
height
,
kDraggingListHeight
);
expect
(
getContentElement
().
size
!
.
height
,
kDraggingListHeight
);
// Drop it
await
drag
.
up
();
await
tester
.
pumpAndSettle
();
expect
(
getContentElement
().
size
.
height
,
kDraggingListHeight
);
expect
(
getContentElement
().
size
!
.
height
,
kDraggingListHeight
);
});
testWidgets
(
'Vertical drop area golden'
,
(
WidgetTester
tester
)
async
{
...
...
@@ -257,7 +255,7 @@ void main() {
return
find
.
byElementPredicate
((
Element
element
)
=>
element
.
findAncestorWidgetOfExactType
<
_Stateful
>()?.
key
==
key
)
.
evaluate
()
.
first
.
findAncestorStateOfType
<
_StatefulState
>();
.
findAncestorStateOfType
<
_StatefulState
>()
!
;
}
await
tester
.
pumpWidget
(
MaterialApp
(
home:
ReorderableListView
(
...
...
@@ -461,7 +459,7 @@ void main() {
of:
find
.
byKey
(
Key
(
listItems
[
index
])),
matching:
find
.
byType
(
Semantics
),
).
evaluate
().
first
.
widget
as
Semantics
;
return
semantics
.
properties
.
customSemanticsActions
;
return
semantics
.
properties
.
customSemanticsActions
!
;
}
const
CustomSemanticsAction
moveToStart
=
CustomSemanticsAction
(
label:
'Move to the start'
);
...
...
@@ -511,14 +509,14 @@ void main() {
// Test out move to end: move Item 1 to the end of the list.
await
tester
.
pumpWidget
(
build
());
Map
<
CustomSemanticsAction
,
VoidCallback
>
firstSemanticsActions
=
getSemanticsActions
(
0
);
firstSemanticsActions
[
moveToEnd
]();
firstSemanticsActions
[
moveToEnd
]
!
();
await
tester
.
pumpAndSettle
();
expect
(
listItems
,
orderedEquals
(<
String
>[
'Item 2'
,
'Item 3'
,
'Item 4'
,
'Item 1'
]));
// Test out move after: move Item 2 (the current first item) one space down.
await
tester
.
pumpWidget
(
build
());
firstSemanticsActions
=
getSemanticsActions
(
0
);
firstSemanticsActions
[
moveDown
]();
firstSemanticsActions
[
moveDown
]
!
();
await
tester
.
pumpAndSettle
();
expect
(
listItems
,
orderedEquals
(<
String
>[
'Item 3'
,
'Item 2'
,
'Item 4'
,
'Item 1'
]));
...
...
@@ -532,28 +530,28 @@ void main() {
// Test out move to end: move Item 2 to the end of the list.
await
tester
.
pumpWidget
(
build
());
Map
<
CustomSemanticsAction
,
VoidCallback
>
middleSemanticsActions
=
getSemanticsActions
(
1
);
middleSemanticsActions
[
moveToEnd
]();
middleSemanticsActions
[
moveToEnd
]
!
();
await
tester
.
pumpAndSettle
();
expect
(
listItems
,
orderedEquals
(<
String
>[
'Item 1'
,
'Item 3'
,
'Item 4'
,
'Item 2'
]));
// Test out move after: move Item 3 (the current second item) one space down.
await
tester
.
pumpWidget
(
build
());
middleSemanticsActions
=
getSemanticsActions
(
1
);
middleSemanticsActions
[
moveDown
]();
middleSemanticsActions
[
moveDown
]
!
();
await
tester
.
pumpAndSettle
();
expect
(
listItems
,
orderedEquals
(<
String
>[
'Item 1'
,
'Item 4'
,
'Item 3'
,
'Item 2'
]));
// Test out move after: move Item 3 (the current third item) one space up.
await
tester
.
pumpWidget
(
build
());
middleSemanticsActions
=
getSemanticsActions
(
2
);
middleSemanticsActions
[
moveUp
]();
middleSemanticsActions
[
moveUp
]
!
();
await
tester
.
pumpAndSettle
();
expect
(
listItems
,
orderedEquals
(<
String
>[
'Item 1'
,
'Item 3'
,
'Item 4'
,
'Item 2'
]));
// Test out move to start: move Item 4 (the current third item) to the start of the list.
await
tester
.
pumpWidget
(
build
());
middleSemanticsActions
=
getSemanticsActions
(
2
);
middleSemanticsActions
[
moveToStart
]();
middleSemanticsActions
[
moveToStart
]
!
();
await
tester
.
pumpAndSettle
();
expect
(
listItems
,
orderedEquals
(<
String
>[
'Item 4'
,
'Item 1'
,
'Item 3'
,
'Item 2'
]));
...
...
@@ -567,14 +565,14 @@ void main() {
// Test out move to start: move Item 4 to the start of the list.
await
tester
.
pumpWidget
(
build
());
Map
<
CustomSemanticsAction
,
VoidCallback
>
lastSemanticsActions
=
getSemanticsActions
(
listItems
.
length
-
1
);
lastSemanticsActions
[
moveToStart
]();
lastSemanticsActions
[
moveToStart
]
!
();
await
tester
.
pumpAndSettle
();
expect
(
listItems
,
orderedEquals
(<
String
>[
'Item 4'
,
'Item 1'
,
'Item 2'
,
'Item 3'
]));
// Test out move up: move Item 3 (the current last item) one space up.
await
tester
.
pumpWidget
(
build
());
lastSemanticsActions
=
getSemanticsActions
(
listItems
.
length
-
1
);
lastSemanticsActions
[
moveUp
]();
lastSemanticsActions
[
moveUp
]
!
();
await
tester
.
pumpAndSettle
();
expect
(
listItems
,
orderedEquals
(<
String
>[
'Item 4'
,
'Item 1'
,
'Item 3'
,
'Item 2'
]));
...
...
@@ -597,7 +595,7 @@ void main() {
child:
SwitchListTile
(
title:
const
Text
(
'Switch tile'
),
value:
true
,
onChanged:
(
bool
newValue
)
{
},
onChanged:
(
bool
?
newValue
)
{
},
),
),
),
...
...
@@ -755,43 +753,43 @@ void main() {
Element
getContentElement
()
{
final
SingleChildScrollView
listScrollView
=
tester
.
widget
(
find
.
byType
(
SingleChildScrollView
));
final
Widget
scrollContents
=
listScrollView
.
child
;
final
Widget
scrollContents
=
listScrollView
.
child
!
;
final
Element
contentElement
=
tester
.
element
(
find
.
byElementPredicate
((
Element
element
)
=>
element
.
widget
==
scrollContents
));
return
contentElement
;
}
const
double
kDraggingListWidth
=
292.0
;
// Drag a normal text item
expect
(
getContentElement
().
size
.
width
,
kDraggingListWidth
);
expect
(
getContentElement
().
size
!
.
width
,
kDraggingListWidth
);
TestGesture
drag
=
await
tester
.
startGesture
(
tester
.
getCenter
(
find
.
text
(
'Normal item'
)));
await
tester
.
pump
(
kLongPressTimeout
+
kPressTimeout
);
await
tester
.
pumpAndSettle
();
expect
(
getContentElement
().
size
.
width
,
kDraggingListWidth
);
expect
(
getContentElement
().
size
!
.
width
,
kDraggingListWidth
);
// Move it
await
drag
.
moveTo
(
tester
.
getCenter
(
find
.
text
(
'Last item'
)));
await
tester
.
pumpAndSettle
();
expect
(
getContentElement
().
size
.
width
,
kDraggingListWidth
);
expect
(
getContentElement
().
size
!
.
width
,
kDraggingListWidth
);
// Drop it
await
drag
.
up
();
await
tester
.
pumpAndSettle
();
expect
(
getContentElement
().
size
.
width
,
kDraggingListWidth
);
expect
(
getContentElement
().
size
!
.
width
,
kDraggingListWidth
);
// Drag a tall item
drag
=
await
tester
.
startGesture
(
tester
.
getCenter
(
find
.
text
(
'Tall item'
)));
await
tester
.
pump
(
kLongPressTimeout
+
kPressTimeout
);
await
tester
.
pumpAndSettle
();
expect
(
getContentElement
().
size
.
width
,
kDraggingListWidth
);
expect
(
getContentElement
().
size
!
.
width
,
kDraggingListWidth
);
// Move it
await
drag
.
moveTo
(
tester
.
getCenter
(
find
.
text
(
'Last item'
)));
await
tester
.
pumpAndSettle
();
expect
(
getContentElement
().
size
.
width
,
kDraggingListWidth
);
expect
(
getContentElement
().
size
!
.
width
,
kDraggingListWidth
);
// Drop it
await
drag
.
up
();
await
tester
.
pumpAndSettle
();
expect
(
getContentElement
().
size
.
width
,
kDraggingListWidth
);
expect
(
getContentElement
().
size
!
.
width
,
kDraggingListWidth
);
});
testWidgets
(
'Horizontal drop area golden'
,
(
WidgetTester
tester
)
async
{
...
...
@@ -840,7 +838,7 @@ void main() {
return
find
.
byElementPredicate
((
Element
element
)
=>
element
.
findAncestorWidgetOfExactType
<
_Stateful
>()?.
key
==
key
)
.
evaluate
()
.
first
.
findAncestorStateOfType
<
_StatefulState
>();
.
findAncestorStateOfType
<
_StatefulState
>()
!
;
}
await
tester
.
pumpWidget
(
MaterialApp
(
home:
ReorderableListView
(
...
...
@@ -912,7 +910,7 @@ void main() {
of:
find
.
byKey
(
Key
(
listItems
[
index
])),
matching:
find
.
byType
(
Semantics
),
).
evaluate
().
first
.
widget
as
Semantics
;
return
semantics
.
properties
.
customSemanticsActions
;
return
semantics
.
properties
.
customSemanticsActions
!
;
}
const
CustomSemanticsAction
moveToStart
=
CustomSemanticsAction
(
label:
'Move to the start'
);
...
...
@@ -995,14 +993,14 @@ void main() {
// Test out move to end: move Item 1 to the end of the list.
await
tester
.
pumpWidget
(
build
(
scrollDirection:
Axis
.
horizontal
));
Map
<
CustomSemanticsAction
,
VoidCallback
>
firstSemanticsActions
=
getSemanticsActions
(
0
);
firstSemanticsActions
[
moveToEnd
]();
firstSemanticsActions
[
moveToEnd
]
!
();
await
tester
.
pumpAndSettle
();
expect
(
listItems
,
orderedEquals
(<
String
>[
'Item 2'
,
'Item 3'
,
'Item 4'
,
'Item 1'
]));
// Test out move after: move Item 2 (the current first item) one space to the right.
await
tester
.
pumpWidget
(
build
(
scrollDirection:
Axis
.
horizontal
));
firstSemanticsActions
=
getSemanticsActions
(
0
);
firstSemanticsActions
[
moveRight
]();
firstSemanticsActions
[
moveRight
]
!
();
await
tester
.
pumpAndSettle
();
expect
(
listItems
,
orderedEquals
(<
String
>[
'Item 3'
,
'Item 2'
,
'Item 4'
,
'Item 1'
]));
...
...
@@ -1018,14 +1016,14 @@ void main() {
// Test out move to end: move Item 1 to the end of the list.
await
tester
.
pumpWidget
(
build
(
scrollDirection:
Axis
.
horizontal
,
textDirection:
TextDirection
.
rtl
));
Map
<
CustomSemanticsAction
,
VoidCallback
>
firstSemanticsActions
=
getSemanticsActions
(
0
);
firstSemanticsActions
[
moveToEnd
]();
firstSemanticsActions
[
moveToEnd
]
!
();
await
tester
.
pumpAndSettle
();
expect
(
listItems
,
orderedEquals
(<
String
>[
'Item 2'
,
'Item 3'
,
'Item 4'
,
'Item 1'
]));
// Test out move after: move Item 2 (the current first item) one space to the left.
await
tester
.
pumpWidget
(
build
(
scrollDirection:
Axis
.
horizontal
,
textDirection:
TextDirection
.
rtl
));
firstSemanticsActions
=
getSemanticsActions
(
0
);
firstSemanticsActions
[
moveLeft
]();
firstSemanticsActions
[
moveLeft
]
!
();
await
tester
.
pumpAndSettle
();
expect
(
listItems
,
orderedEquals
(<
String
>[
'Item 3'
,
'Item 2'
,
'Item 4'
,
'Item 1'
]));
...
...
@@ -1039,28 +1037,28 @@ void main() {
// Test out move to end: move Item 2 to the end of the list.
await
tester
.
pumpWidget
(
build
(
scrollDirection:
Axis
.
horizontal
));
Map
<
CustomSemanticsAction
,
VoidCallback
>
middleSemanticsActions
=
getSemanticsActions
(
1
);
middleSemanticsActions
[
moveToEnd
]();
middleSemanticsActions
[
moveToEnd
]
!
();
await
tester
.
pumpAndSettle
();
expect
(
listItems
,
orderedEquals
(<
String
>[
'Item 1'
,
'Item 3'
,
'Item 4'
,
'Item 2'
]));
// Test out move after: move Item 3 (the current second item) one space to the right.
await
tester
.
pumpWidget
(
build
(
scrollDirection:
Axis
.
horizontal
));
middleSemanticsActions
=
getSemanticsActions
(
1
);
middleSemanticsActions
[
moveRight
]();
middleSemanticsActions
[
moveRight
]
!
();
await
tester
.
pumpAndSettle
();
expect
(
listItems
,
orderedEquals
(<
String
>[
'Item 1'
,
'Item 4'
,
'Item 3'
,
'Item 2'
]));
// Test out move after: move Item 3 (the current third item) one space to the left.
await
tester
.
pumpWidget
(
build
(
scrollDirection:
Axis
.
horizontal
));
middleSemanticsActions
=
getSemanticsActions
(
2
);
middleSemanticsActions
[
moveLeft
]();
middleSemanticsActions
[
moveLeft
]
!
();
await
tester
.
pumpAndSettle
();
expect
(
listItems
,
orderedEquals
(<
String
>[
'Item 1'
,
'Item 3'
,
'Item 4'
,
'Item 2'
]));
// Test out move to start: move Item 4 (the current third item) to the start of the list.
await
tester
.
pumpWidget
(
build
(
scrollDirection:
Axis
.
horizontal
));
middleSemanticsActions
=
getSemanticsActions
(
2
);
middleSemanticsActions
[
moveToStart
]();
middleSemanticsActions
[
moveToStart
]
!
();
await
tester
.
pumpAndSettle
();
expect
(
listItems
,
orderedEquals
(<
String
>[
'Item 4'
,
'Item 1'
,
'Item 3'
,
'Item 2'
]));
...
...
@@ -1076,28 +1074,28 @@ void main() {
// Test out move to end: move Item 2 to the end of the list.
await
tester
.
pumpWidget
(
build
(
scrollDirection:
Axis
.
horizontal
,
textDirection:
TextDirection
.
rtl
));
Map
<
CustomSemanticsAction
,
VoidCallback
>
middleSemanticsActions
=
getSemanticsActions
(
1
);
middleSemanticsActions
[
moveToEnd
]();
middleSemanticsActions
[
moveToEnd
]
!
();
await
tester
.
pumpAndSettle
();
expect
(
listItems
,
orderedEquals
(<
String
>[
'Item 1'
,
'Item 3'
,
'Item 4'
,
'Item 2'
]));
// Test out move after: move Item 3 (the current second item) one space to the left.
await
tester
.
pumpWidget
(
build
(
scrollDirection:
Axis
.
horizontal
,
textDirection:
TextDirection
.
rtl
));
middleSemanticsActions
=
getSemanticsActions
(
1
);
middleSemanticsActions
[
moveLeft
]();
middleSemanticsActions
[
moveLeft
]
!
();
await
tester
.
pumpAndSettle
();
expect
(
listItems
,
orderedEquals
(<
String
>[
'Item 1'
,
'Item 4'
,
'Item 3'
,
'Item 2'
]));
// Test out move after: move Item 3 (the current third item) one space to the right.
await
tester
.
pumpWidget
(
build
(
scrollDirection:
Axis
.
horizontal
,
textDirection:
TextDirection
.
rtl
));
middleSemanticsActions
=
getSemanticsActions
(
2
);
middleSemanticsActions
[
moveRight
]();
middleSemanticsActions
[
moveRight
]
!
();
await
tester
.
pumpAndSettle
();
expect
(
listItems
,
orderedEquals
(<
String
>[
'Item 1'
,
'Item 3'
,
'Item 4'
,
'Item 2'
]));
// Test out move to start: move Item 4 (the current third item) to the start of the list.
await
tester
.
pumpWidget
(
build
(
scrollDirection:
Axis
.
horizontal
,
textDirection:
TextDirection
.
rtl
));
middleSemanticsActions
=
getSemanticsActions
(
2
);
middleSemanticsActions
[
moveToStart
]();
middleSemanticsActions
[
moveToStart
]
!
();
await
tester
.
pumpAndSettle
();
expect
(
listItems
,
orderedEquals
(<
String
>[
'Item 4'
,
'Item 1'
,
'Item 3'
,
'Item 2'
]));
...
...
@@ -1111,14 +1109,14 @@ void main() {
// Test out move to start: move Item 4 to the start of the list.
await
tester
.
pumpWidget
(
build
(
scrollDirection:
Axis
.
horizontal
));
Map
<
CustomSemanticsAction
,
VoidCallback
>
lastSemanticsActions
=
getSemanticsActions
(
listItems
.
length
-
1
);
lastSemanticsActions
[
moveToStart
]();
lastSemanticsActions
[
moveToStart
]
!
();
await
tester
.
pumpAndSettle
();
expect
(
listItems
,
orderedEquals
(<
String
>[
'Item 4'
,
'Item 1'
,
'Item 2'
,
'Item 3'
]));
// Test out move before: move Item 3 (the current last item) one space to the left.
await
tester
.
pumpWidget
(
build
(
scrollDirection:
Axis
.
horizontal
));
lastSemanticsActions
=
getSemanticsActions
(
listItems
.
length
-
1
);
lastSemanticsActions
[
moveLeft
]();
lastSemanticsActions
[
moveLeft
]
!
();
await
tester
.
pumpAndSettle
();
expect
(
listItems
,
orderedEquals
(<
String
>[
'Item 4'
,
'Item 1'
,
'Item 3'
,
'Item 2'
]));
...
...
@@ -1134,14 +1132,14 @@ void main() {
// Test out move to start: move Item 4 to the start of the list.
await
tester
.
pumpWidget
(
build
(
scrollDirection:
Axis
.
horizontal
,
textDirection:
TextDirection
.
rtl
));
Map
<
CustomSemanticsAction
,
VoidCallback
>
lastSemanticsActions
=
getSemanticsActions
(
listItems
.
length
-
1
);
lastSemanticsActions
[
moveToStart
]();
lastSemanticsActions
[
moveToStart
]
!
();
await
tester
.
pumpAndSettle
();
expect
(
listItems
,
orderedEquals
(<
String
>[
'Item 4'
,
'Item 1'
,
'Item 2'
,
'Item 3'
]));
// Test out move before: move Item 3 (the current last item) one space to the right.
await
tester
.
pumpWidget
(
build
(
scrollDirection:
Axis
.
horizontal
,
textDirection:
TextDirection
.
rtl
));
lastSemanticsActions
=
getSemanticsActions
(
listItems
.
length
-
1
);
lastSemanticsActions
[
moveRight
]();
lastSemanticsActions
[
moveRight
]
!
();
await
tester
.
pumpAndSettle
();
expect
(
listItems
,
orderedEquals
(<
String
>[
'Item 4'
,
'Item 1'
,
'Item 3'
,
'Item 2'
]));
...
...
@@ -1190,14 +1188,14 @@ Future<void> longPressDrag(WidgetTester tester, Offset start, Offset end) async
class
_Stateful
extends
StatefulWidget
{
// Ignoring the preference for const constructors because we want to test with regular non-const instances.
// ignore:prefer_const_constructors_in_immutables
_Stateful
({
Key
key
})
:
super
(
key:
key
);
_Stateful
({
Key
?
key
})
:
super
(
key:
key
);
@override
State
<
StatefulWidget
>
createState
()
=>
_StatefulState
();
}
class
_StatefulState
extends
State
<
_Stateful
>
{
bool
checked
=
false
;
bool
?
checked
=
false
;
@override
Widget
build
(
BuildContext
context
)
{
...
...
@@ -1207,7 +1205,7 @@ class _StatefulState extends State<_Stateful> {
child:
Material
(
child:
Checkbox
(
value:
checked
,
onChanged:
(
bool
newValue
)
=>
checked
=
newValue
,
onChanged:
(
bool
?
newValue
)
=>
checked
=
newValue
,
),
),
);
...
...
packages/flutter/test/material/scaffold_test.dart
View file @
727cee6d
...
...
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// @dart = 2.8
import
'package:flutter/foundation.dart'
;
import
'package:flutter/gestures.dart'
show
DragStartBehavior
;
import
'package:flutter/material.dart'
;
...
...
@@ -298,7 +296,7 @@ void main() {
expect
(
renderBox
.
size
.
height
,
equals
(
appBarHeight
));
});
Widget
_buildStatusBarTestApp
(
TargetPlatform
platform
)
{
Widget
_buildStatusBarTestApp
(
TargetPlatform
?
platform
)
{
return
MaterialApp
(
theme:
ThemeData
(
platform:
platform
),
home:
MediaQuery
(
...
...
@@ -357,7 +355,7 @@ void main() {
builder:
(
BuildContext
context
)
{
return
GestureDetector
(
onTap:
()
{
Scaffold
.
of
(
context
).
showBottomSheet
<
void
>((
BuildContext
context
)
{
Scaffold
.
of
(
context
)
!
.
showBottomSheet
<
void
>((
BuildContext
context
)
{
return
Container
(
key:
sheetKey
,
color:
Colors
.
blue
[
500
],
...
...
@@ -519,7 +517,7 @@ void main() {
};
await
tester
.
pumpWidget
(
MaterialApp
(
routes:
routes
));
Navigator
.
pushNamed
(
rootKey
.
currentContext
,
'/scaffold'
);
Navigator
.
pushNamed
(
rootKey
.
currentContext
!
,
'/scaffold'
);
await
tester
.
pump
();
await
tester
.
pump
(
const
Duration
(
seconds:
1
));
...
...
@@ -671,9 +669,9 @@ void main() {
testWidgets
(
'body size with extendBody'
,
(
WidgetTester
tester
)
async
{
final
Key
bodyKey
=
UniqueKey
();
double
mediaQueryBottom
;
late
double
mediaQueryBottom
;
Widget
buildFrame
({
bool
extendBody
,
bool
resizeToAvoidBottomInset
,
double
viewInsetBottom
=
0.0
})
{
Widget
buildFrame
({
required
bool
extendBody
,
bool
?
resizeToAvoidBottomInset
,
double
viewInsetBottom
=
0.0
})
{
return
Directionality
(
textDirection:
TextDirection
.
ltr
,
child:
MediaQuery
(
...
...
@@ -685,7 +683,7 @@ void main() {
extendBody:
extendBody
,
body:
Builder
(
builder:
(
BuildContext
context
)
{
mediaQueryBottom
=
MediaQuery
.
of
(
context
).
padding
.
bottom
;
mediaQueryBottom
=
MediaQuery
.
of
(
context
)
!
.
padding
.
bottom
;
return
Container
(
key:
bodyKey
);
},
),
...
...
@@ -732,10 +730,10 @@ void main() {
const
double
appBarHeight
=
100
;
const
double
windowPaddingTop
=
24
;
bool
fixedHeightAppBar
;
double
mediaQueryTop
;
late
bool
fixedHeightAppBar
;
late
double
mediaQueryTop
;
Widget
buildFrame
({
bool
extendBodyBehindAppBar
,
bool
hasAppBar
})
{
Widget
buildFrame
({
required
bool
extendBodyBehindAppBar
,
required
bool
hasAppBar
})
{
return
Directionality
(
textDirection:
TextDirection
.
ltr
,
child:
MediaQuery
(
...
...
@@ -758,7 +756,7 @@ void main() {
),
body:
Builder
(
builder:
(
BuildContext
context
)
{
mediaQueryTop
=
MediaQuery
.
of
(
context
).
padding
.
top
;
mediaQueryTop
=
MediaQuery
.
of
(
context
)
!
.
padding
.
top
;
return
Container
(
key:
bodyKey
);
}
),
...
...
@@ -1224,7 +1222,7 @@ void main() {
await
tester
.
pump
(
const
Duration
(
milliseconds:
50
));
ScaffoldGeometry
geometry
=
listenerState
.
cache
.
value
;
final
Rect
transitioningFabRect
=
geometry
.
floatingActionButtonArea
;
final
Rect
transitioningFabRect
=
geometry
.
floatingActionButtonArea
!
;
final
double
transitioningRotation
=
tester
.
widget
<
RotationTransition
>(
find
.
byType
(
RotationTransition
),
...
...
@@ -1249,17 +1247,17 @@ void main() {
);
expect
(
geometry
.
floatingActionButtonArea
.
center
,
geometry
.
floatingActionButtonArea
!
.
center
,
transitioningFabRect
.
center
,
);
expect
(
geometry
.
floatingActionButtonArea
.
width
,
geometry
.
floatingActionButtonArea
!
.
width
,
greaterThan
(
transitioningFabRect
.
width
),
);
expect
(
geometry
.
floatingActionButtonArea
.
height
,
geometry
.
floatingActionButtonArea
!
.
height
,
greaterThan
(
transitioningFabRect
.
height
),
);
});
...
...
@@ -1672,12 +1670,12 @@ void main() {
});
testWidgets
(
'End drawer does not open with a drag gesture when it is disabled'
,
(
WidgetTester
tester
)
async
{
double
screenWidth
;
late
double
screenWidth
;
await
tester
.
pumpWidget
(
MaterialApp
(
home:
Builder
(
builder:
(
BuildContext
context
)
{
screenWidth
=
MediaQuery
.
of
(
context
).
size
.
width
;
screenWidth
=
MediaQuery
.
of
(
context
)
!
.
size
.
width
;
return
Scaffold
(
endDrawer:
const
Drawer
(
child:
Text
(
'Drawer'
),
...
...
@@ -1746,7 +1744,7 @@ void main() {
// Regression test for https://github.com/flutter/flutter/issues/20295
final
Key
bodyKey
=
UniqueKey
();
Widget
buildFrame
(
bool
innerResizeToAvoidBottomInset
,
bool
outerResizeToAvoidBottomInset
)
{
Widget
buildFrame
(
bool
?
innerResizeToAvoidBottomInset
,
bool
?
outerResizeToAvoidBottomInset
)
{
return
Directionality
(
textDirection:
TextDirection
.
ltr
,
child:
MediaQuery
(
...
...
@@ -1810,10 +1808,10 @@ void main() {
),
),
);
FlutterError
error
;
late
FlutterError
error
;
try
{
key
.
currentState
.
showBottomSheet
<
void
>((
BuildContext
context
)
{
final
ThemeData
themeData
=
Theme
.
of
(
context
);
key
.
currentState
!
.
showBottomSheet
<
void
>((
BuildContext
context
)
{
final
ThemeData
themeData
=
Theme
.
of
(
context
)
!
;
return
Container
(
decoration:
BoxDecoration
(
border:
Border
(
top:
BorderSide
(
color:
themeData
.
disabledColor
))
...
...
@@ -1872,7 +1870,7 @@ void main() {
),
),
);
key
.
currentState
.
showBottomSheet
<
void
>((
_
)
=>
Container
());
key
.
currentState
!
.
showBottomSheet
<
void
>((
_
)
=>
Container
());
await
tester
.
tap
(
find
.
byKey
(
buttonKey
));
await
tester
.
pump
();
expect
(
errors
,
isNotEmpty
);
...
...
@@ -1902,7 +1900,7 @@ void main() {
MaterialApp
(
home:
Builder
(
builder:
(
BuildContext
context
)
{
Scaffold
.
of
(
context
).
showBottomSheet
<
void
>((
BuildContext
context
)
{
Scaffold
.
of
(
context
)
!
.
showBottomSheet
<
void
>((
BuildContext
context
)
{
return
Container
();
});
return
Container
();
...
...
@@ -1970,7 +1968,7 @@ void main() {
});
testWidgets
(
'Call to Scaffold.geometryOf() without context'
,
(
WidgetTester
tester
)
async
{
ValueListenable
<
ScaffoldGeometry
>
geometry
;
ValueListenable
<
ScaffoldGeometry
>
?
geometry
;
await
tester
.
pumpWidget
(
MaterialApp
(
home:
Builder
(
...
...
@@ -2036,7 +2034,7 @@ void main() {
});
testWidgets
(
'ScaffoldMessenger.of can return null'
,
(
WidgetTester
tester
)
async
{
ScaffoldMessengerState
scaffoldMessenger
;
ScaffoldMessengerState
?
scaffoldMessenger
;
const
Key
tapTarget
=
Key
(
'tap-target'
);
await
tester
.
pumpWidget
(
Directionality
(
textDirection:
TextDirection
.
ltr
,
...
...
@@ -2070,7 +2068,7 @@ void main() {
const
Key
tapTarget
=
Key
(
'tap-target'
);
final
List
<
dynamic
>
exceptions
=
<
dynamic
>[];
final
FlutterExceptionHandler
oldHandler
=
FlutterError
.
onError
;
final
FlutterExceptionHandler
?
oldHandler
=
FlutterError
.
onError
;
FlutterError
.
onError
=
(
FlutterErrorDetails
details
)
{
exceptions
.
add
(
details
.
exception
);
};
...
...
@@ -2161,8 +2159,8 @@ class _GeometryListenerState extends State<_GeometryListener> {
}
int
numNotifications
=
0
;
ValueListenable
<
ScaffoldGeometry
>
geometryListenable
;
_GeometryCachePainter
cache
;
ValueListenable
<
ScaffoldGeometry
>
?
geometryListenable
;
late
_GeometryCachePainter
cache
;
@override
void
didChangeDependencies
()
{
...
...
@@ -2172,11 +2170,11 @@ class _GeometryListenerState extends State<_GeometryListener> {
return
;
if
(
geometryListenable
!=
null
)
geometryListenable
.
removeListener
(
onGeometryChanged
);
geometryListenable
!
.
removeListener
(
onGeometryChanged
);
geometryListenable
=
newListenable
;
geometryListenable
.
addListener
(
onGeometryChanged
);
cache
=
_GeometryCachePainter
(
geometryListenable
);
geometryListenable
!
.
addListener
(
onGeometryChanged
);
cache
=
_GeometryCachePainter
(
geometryListenable
!
);
}
void
onGeometryChanged
()
{
...
...
@@ -2192,7 +2190,7 @@ class _GeometryCachePainter extends CustomPainter {
final
ValueListenable
<
ScaffoldGeometry
>
geometryListenable
;
ScaffoldGeometry
value
;
late
ScaffoldGeometry
value
;
@override
void
paint
(
Canvas
canvas
,
Size
size
)
{
value
=
geometryListenable
.
value
;
...
...
@@ -2206,7 +2204,7 @@ class _GeometryCachePainter extends CustomPainter {
class
_CustomPageRoute
<
T
>
extends
PageRoute
<
T
>
{
_CustomPageRoute
({
@
required
this
.
builder
,
required
this
.
builder
,
RouteSettings
settings
=
const
RouteSettings
(),
this
.
maintainState
=
true
,
bool
fullscreenDialog
=
false
,
...
...
@@ -2219,10 +2217,10 @@ class _CustomPageRoute<T> extends PageRoute<T> {
Duration
get
transitionDuration
=>
const
Duration
(
milliseconds:
300
);
@override
Color
get
barrierColor
=>
null
;
Color
?
get
barrierColor
=>
null
;
@override
String
get
barrierLabel
=>
null
;
String
?
get
barrierLabel
=>
null
;
@override
final
bool
maintainState
;
...
...
packages/flutter/test/material/scrollbar_paint_test.dart
View file @
727cee6d
...
...
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// @dart = 2.8
import
'package:flutter_test/flutter_test.dart'
;
import
'package:flutter/material.dart'
;
...
...
@@ -12,7 +10,7 @@ import '../rendering/mock_canvas.dart';
Widget
_buildSingleChildScrollViewWithScrollbar
(
{
TextDirection
textDirection
=
TextDirection
.
ltr
,
EdgeInsets
padding
=
EdgeInsets
.
zero
,
Widget
child
,
Widget
?
child
,
})
{
return
Directionality
(
textDirection:
textDirection
,
...
...
packages/flutter/test/material/scrollbar_test.dart
View file @
727cee6d
...
...
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// @dart = 2.8
import
'package:flutter/cupertino.dart'
;
import
'package:flutter/foundation.dart'
;
import
'package:flutter/material.dart'
;
...
...
@@ -13,20 +11,18 @@ import 'package:flutter_test/flutter_test.dart';
import
'../rendering/mock_canvas.dart'
;
class
TestCanvas
implements
Canvas
{
TestCanvas
([
this
.
invocations
]);
final
List
<
Invocation
>
invocations
;
final
List
<
Invocation
>
invocations
=
<
Invocation
>[];
@override
void
noSuchMethod
(
Invocation
invocation
)
{
invocations
?
.
add
(
invocation
);
invocations
.
add
(
invocation
);
}
}
Widget
_buildBoilerplate
(
{
TextDirection
textDirection
=
TextDirection
.
ltr
,
EdgeInsets
padding
=
EdgeInsets
.
zero
,
Widget
child
,
required
Widget
child
,
})
{
return
Directionality
(
textDirection:
textDirection
,
...
...
@@ -67,15 +63,15 @@ void main() {
),
);
SchedulerBinding
.
instance
.
debugAssertNoTransientCallbacks
(
'Building a list with a scrollbar triggered an animation.'
);
SchedulerBinding
.
instance
!
.
debugAssertNoTransientCallbacks
(
'Building a list with a scrollbar triggered an animation.'
);
await
tester
.
tap
(
find
.
byType
(
ListView
));
SchedulerBinding
.
instance
.
debugAssertNoTransientCallbacks
(
'Tapping a block with a scrollbar triggered an animation.'
);
SchedulerBinding
.
instance
!
.
debugAssertNoTransientCallbacks
(
'Tapping a block with a scrollbar triggered an animation.'
);
await
tester
.
pump
(
const
Duration
(
milliseconds:
200
));
await
tester
.
pump
(
const
Duration
(
milliseconds:
200
));
await
tester
.
pump
(
const
Duration
(
milliseconds:
200
));
await
tester
.
pump
(
const
Duration
(
milliseconds:
200
));
await
tester
.
drag
(
find
.
byType
(
ListView
),
const
Offset
(
0.0
,
-
10.0
));
expect
(
SchedulerBinding
.
instance
.
transientCallbackCount
,
greaterThan
(
0
));
expect
(
SchedulerBinding
.
instance
!
.
transientCallbackCount
,
greaterThan
(
0
));
await
tester
.
pump
(
const
Duration
(
milliseconds:
200
));
await
tester
.
pump
(
const
Duration
(
milliseconds:
200
));
await
tester
.
pump
(
const
Duration
(
milliseconds:
200
));
...
...
@@ -116,12 +112,11 @@ void main() {
);
scrollPainter
.
update
(
metrics
,
AxisDirection
.
down
);
final
List
<
Invocation
>
invocations
=
<
Invocation
>[];
final
TestCanvas
canvas
=
TestCanvas
(
invocations
);
final
TestCanvas
canvas
=
TestCanvas
();
scrollPainter
.
paint
(
canvas
,
const
Size
(
10.0
,
100.0
));
// Scrollbar is not supposed to draw anything if there isn't enough content.
expect
(
invocations
.
isEmpty
,
isTrue
);
expect
(
canvas
.
invocations
.
isEmpty
,
isTrue
);
});
testWidgets
(
'Adaptive scrollbar'
,
(
WidgetTester
tester
)
async
{
...
...
@@ -174,7 +169,7 @@ void main() {
testWidgets
(
'Scrollbar passes controller to CupertinoScrollbar'
,
(
WidgetTester
tester
)
async
{
final
ScrollController
controller
=
ScrollController
();
Widget
viewWithScroll
(
TargetPlatform
platform
)
{
Widget
viewWithScroll
(
TargetPlatform
?
platform
)
{
return
_buildBoilerplate
(
child:
Theme
(
data:
ThemeData
(
...
...
@@ -517,7 +512,7 @@ void main() {
testWidgets
(
'Scrollbar respects thickness and radius'
,
(
WidgetTester
tester
)
async
{
final
ScrollController
controller
=
ScrollController
();
Widget
viewWithScroll
({
Radius
radius
})
{
Widget
viewWithScroll
({
Radius
?
radius
})
{
return
_buildBoilerplate
(
child:
Theme
(
data:
ThemeData
(),
...
...
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