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
11fa80bb
Commit
11fa80bb
authored
Apr 27, 2017
by
Ian Hickson
Committed by
GitHub
Apr 27, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
MediaQuery.of shouldn't give a default return value (#9596)
parent
b432af51
Changes
20
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
1144 additions
and
914 deletions
+1144
-914
smoke_test.dart
examples/flutter_gallery/test/calculator/smoke_test.dart
+1
-1
app_bar.dart
packages/flutter/lib/src/material/app_bar.dart
+2
-0
drawer_header.dart
packages/flutter/lib/src/material/drawer_header.dart
+1
-0
scaffold.dart
packages/flutter/lib/src/material/scaffold.dart
+1
-0
text_selection.dart
packages/flutter/lib/src/material/text_selection.dart
+1
-0
debug.dart
packages/flutter/lib/src/widgets/debug.dart
+35
-0
editable_text.dart
packages/flutter/lib/src/widgets/editable_text.dart
+1
-1
image.dart
packages/flutter/lib/src/widgets/image.dart
+2
-2
media_query.dart
packages/flutter/lib/src/widgets/media_query.dart
+41
-3
text.dart
packages/flutter/lib/src/widgets/text.dart
+1
-1
about_test.dart
packages/flutter/test/material/about_test.dart
+7
-3
app_bar_test.dart
packages/flutter/test/material/app_bar_test.dart
+41
-34
bottom_navigation_bar_test.dart
...ges/flutter/test/material/bottom_navigation_bar_test.dart
+159
-147
drawer_test.dart
packages/flutter/test/material/drawer_test.dart
+20
-18
icon_button_test.dart
packages/flutter/test/material/icon_button_test.dart
+11
-9
mergeable_material_test.dart
packages/flutter/test/material/mergeable_material_test.dart
+680
-624
scaffold_test.dart
packages/flutter/test/material/scaffold_test.dart
+52
-12
text_field_test.dart
packages/flutter/test/material/text_field_test.dart
+25
-19
user_accounts_drawer_header_test.dart
...utter/test/material/user_accounts_drawer_header_test.dart
+37
-33
media_query_test.dart
packages/flutter/test/widgets/media_query_test.dart
+26
-7
No files found.
examples/flutter_gallery/test/calculator/smoke_test.dart
View file @
11fa80bb
...
...
@@ -14,7 +14,7 @@ void main() {
// We press the "1" and the "2" buttons and check that the display
// reads "12".
testWidgets
(
'Flutter calculator app smoke test'
,
(
WidgetTester
tester
)
async
{
await
tester
.
pumpWidget
(
const
CalculatorDemo
(
));
await
tester
.
pumpWidget
(
new
MaterialApp
(
home:
const
CalculatorDemo
()
));
final
Finder
oneButton
=
find
.
widgetWithText
(
InkResponse
,
'1'
);
expect
(
oneButton
,
findsOneWidget
);
...
...
packages/flutter/lib/src/material/app_bar.dart
View file @
11fa80bb
...
...
@@ -341,6 +341,7 @@ class _AppBarState extends State<AppBar> {
@override
Widget
build
(
BuildContext
context
)
{
assert
(!
widget
.
primary
||
debugCheckHasMediaQuery
(
context
));
final
ThemeData
themeData
=
Theme
.
of
(
context
);
IconThemeData
appBarIconTheme
=
widget
.
iconTheme
??
themeData
.
primaryIconTheme
;
...
...
@@ -906,6 +907,7 @@ class _SliverAppBarState extends State<SliverAppBar> with TickerProviderStateMix
@override
Widget
build
(
BuildContext
context
)
{
assert
(!
widget
.
primary
||
debugCheckHasMediaQuery
(
context
));
final
double
topPadding
=
widget
.
primary
?
MediaQuery
.
of
(
context
).
padding
.
top
:
0.0
;
final
double
collapsedHeight
=
(
widget
.
pinned
&&
widget
.
floating
&&
widget
.
bottom
!=
null
)
?
widget
.
bottom
.
preferredSize
.
height
+
topPadding
:
null
;
...
...
packages/flutter/lib/src/material/drawer_header.dart
View file @
11fa80bb
...
...
@@ -72,6 +72,7 @@ class DrawerHeader extends StatelessWidget {
@override
Widget
build
(
BuildContext
context
)
{
assert
(
debugCheckHasMaterial
(
context
));
assert
(
debugCheckHasMediaQuery
(
context
));
final
ThemeData
theme
=
Theme
.
of
(
context
);
final
double
statusBarHeight
=
MediaQuery
.
of
(
context
).
padding
.
top
;
return
new
Container
(
...
...
packages/flutter/lib/src/material/scaffold.dart
View file @
11fa80bb
...
...
@@ -769,6 +769,7 @@ class ScaffoldState extends State<Scaffold> with TickerProviderStateMixin {
@override
Widget
build
(
BuildContext
context
)
{
assert
(
debugCheckHasMediaQuery
(
context
));
EdgeInsets
padding
=
MediaQuery
.
of
(
context
).
padding
;
final
ThemeData
themeData
=
Theme
.
of
(
context
);
if
(!
widget
.
resizeToAvoidBottomPadding
)
...
...
packages/flutter/lib/src/material/text_selection.dart
View file @
11fa80bb
...
...
@@ -151,6 +151,7 @@ class _MaterialTextSelectionControls extends TextSelectionControls {
@override
Widget
buildToolbar
(
BuildContext
context
,
Offset
position
,
TextSelectionDelegate
delegate
)
{
assert
(
debugCheckHasMediaQuery
(
context
));
final
Size
screenSize
=
MediaQuery
.
of
(
context
).
size
;
return
new
ConstrainedBox
(
constraints:
new
BoxConstraints
.
loose
(
screenSize
),
...
...
packages/flutter/lib/src/widgets/debug.dart
View file @
11fa80bb
...
...
@@ -5,7 +5,9 @@
import
'dart:collection'
;
import
'package:flutter/foundation.dart'
;
import
'framework.dart'
;
import
'media_query.dart'
;
import
'table.dart'
;
// Any changes to this file should be reflected in the debugAssertAllWidgetVarsUnset()
...
...
@@ -153,6 +155,39 @@ bool debugCheckHasTable(BuildContext context) {
return
true
;
}
/// Asserts that the given context has a [MediaQuery] ancestor.
///
/// Used by various widgets to make sure that they are only used in an
/// appropriate context.
///
/// To invoke this function, use the following pattern, typically in the
/// relevant Widget's [build] method:
///
/// ```dart
/// assert(debugCheckHasMediaQuery(context));
/// ```
///
/// Does nothing if asserts are disabled. Always returns true.
bool
debugCheckHasMediaQuery
(
BuildContext
context
)
{
assert
(()
{
if
(
context
.
widget
is
!
MediaQuery
&&
context
.
ancestorWidgetOfExactType
(
MediaQuery
)
==
null
)
{
final
Element
element
=
context
;
throw
new
FlutterError
(
'No MediaQuery widget found.
\n
'
'
${context.widget.runtimeType}
widgets require a MediaQuery widget ancestor.
\n
'
'The specific widget that could not find a MediaQuery ancestor was:
\n
'
'
${context.widget}
\n
'
'The ownership chain for the affected widget is:
\n
'
'
${element.debugGetCreatorChain(10)}
\n
'
'Typically, the MediaQuery widget is introduced by the MaterialApp or '
'WidgetsApp widget at the top of your application widget tree.'
);
}
return
true
;
});
return
true
;
}
/// Asserts that the `built` widget is not null.
///
/// Used when the given `widget` calls a builder function to check that the
...
...
packages/flutter/lib/src/widgets/editable_text.dart
View file @
11fa80bb
...
...
@@ -463,7 +463,7 @@ class EditableTextState extends State<EditableText> implements TextInputClient {
showCursor:
_showCursor
,
maxLines:
widget
.
maxLines
,
selectionColor:
widget
.
selectionColor
,
textScaleFactor:
widget
.
textScaleFactor
??
MediaQuery
.
of
(
context
).
textScaleFactor
,
textScaleFactor:
widget
.
textScaleFactor
??
MediaQuery
.
of
(
context
,
nullOk:
true
)?.
textScaleFactor
??
1.0
,
textAlign:
widget
.
textAlign
,
obscureText:
widget
.
obscureText
,
offset:
offset
,
...
...
packages/flutter/lib/src/widgets/image.dart
View file @
11fa80bb
...
...
@@ -27,10 +27,10 @@ export 'package:flutter/services.dart' show
ImageConfiguration
createLocalImageConfiguration
(
BuildContext
context
,
{
Size
size
})
{
return
new
ImageConfiguration
(
bundle:
DefaultAssetBundle
.
of
(
context
),
devicePixelRatio:
MediaQuery
.
of
(
context
).
devicePixelRatio
,
devicePixelRatio:
MediaQuery
.
of
(
context
,
nullOk:
true
)?.
devicePixelRatio
??
1.0
,
// TODO(ianh): provide the locale
size:
size
,
platform:
Platform
.
operatingSystem
platform:
Platform
.
operatingSystem
,
);
}
...
...
packages/flutter/lib/src/widgets/media_query.dart
View file @
11fa80bb
...
...
@@ -26,6 +26,10 @@ enum Orientation {
/// To obtain the current [MediaQueryData] for a given [BuildContext], use the
/// [MediaQuery.of] function. For example, to obtain the size of the current
/// window, use `MediaQuery.of(context).size`.
///
/// If no [MediaQuery] is in scope then the [MediaQuery.of] method will throw an
/// exception, unless the `nullOk` argument is set to true, in which case it
/// returns null.
@immutable
class
MediaQueryData
{
/// Creates data for a media query with explicit values.
...
...
@@ -40,6 +44,11 @@ class MediaQueryData {
});
/// Creates data for a media query based on the given window.
///
/// If you use this, you should ensure that you also register for
/// notifications so that you can update your [MediaQueryData] when the
/// window's metrics change. For example, see
/// [WidgetsBindingObserver.didChangeMetrics] or [ui.window.onMetricsChanged].
MediaQueryData
.
fromWindow
(
ui
.
Window
window
)
:
size
=
window
.
physicalSize
/
window
.
devicePixelRatio
,
devicePixelRatio
=
window
.
devicePixelRatio
,
...
...
@@ -117,6 +126,16 @@ class MediaQueryData {
/// Querying the current media using [MediaQuery.of] will cause your widget to
/// rebuild automatically whenever the [MediaQueryData] changes (e.g., if the
/// user rotates their device).
///
/// If no [MediaQuery] is in scope then the [MediaQuery.of] method will throw an
/// exception, unless the `nullOk` argument is set to true, in which case it
/// returns null.
///
/// See also:
///
/// * [WidgetsApp] and [MaterialApp], which introduce a [MediaQuery] and keep
/// it up to date with the current screen metrics as they change.
/// * [MediaQueryData], the data structure that represents the metrics.
class
MediaQuery
extends
InheritedWidget
{
/// Creates a widget that provides [MediaQueryData] to its descendants.
///
...
...
@@ -135,7 +154,8 @@ class MediaQuery extends InheritedWidget {
/// height of the current window.
final
MediaQueryData
data
;
/// The data from the closest instance of this class that encloses the given context.
/// The data from the closest instance of this class that encloses the given
/// context.
///
/// You can use this function to query the size an orientation of the screen.
/// When that information changes, your widget will be scheduled to be rebuilt,
...
...
@@ -146,9 +166,27 @@ class MediaQuery extends InheritedWidget {
/// ```dart
/// MediaQueryData media = MediaQuery.of(context);
/// ```
static
MediaQueryData
of
(
BuildContext
context
)
{
///
/// If there is no [MediaQuery] in scope, then this will throw an exception.
/// To return null if there is no [MediaQuery], then pass `nullOk: true`.
///
/// If you use this from a widget (e.g. in its build function), consider
/// calling [debugCheckHasMediaQuery].
static
MediaQueryData
of
(
BuildContext
context
,
{
bool
nullOk:
false
})
{
final
MediaQuery
query
=
context
.
inheritFromWidgetOfExactType
(
MediaQuery
);
return
query
?.
data
??
new
MediaQueryData
.
fromWindow
(
ui
.
window
);
if
(
query
!=
null
)
return
query
.
data
;
if
(
nullOk
)
return
null
;
throw
new
FlutterError
(
'MediaQuery.of() called with a context that does not contain a MediaQuery.
\n
'
'No MediaQuery ancestor could be found starting from the context that was passed '
'to MediaQuery.of(). This can happen because you do not have a WidgetsApp or '
'MaterialApp widget (those widgets introduce a MediaQuery), or it can happen '
'if the context you use comes from a widget above those widgets.
\n
'
'The context used was:
\n
'
'
$context
'
);
}
@override
...
...
packages/flutter/lib/src/widgets/text.dart
View file @
11fa80bb
...
...
@@ -203,7 +203,7 @@ class Text extends StatelessWidget {
textAlign:
textAlign
??
defaultTextStyle
.
textAlign
,
softWrap:
softWrap
??
defaultTextStyle
.
softWrap
,
overflow:
overflow
??
defaultTextStyle
.
overflow
,
textScaleFactor:
textScaleFactor
??
MediaQuery
.
of
(
context
).
textScaleFactor
,
textScaleFactor:
textScaleFactor
??
MediaQuery
.
of
(
context
,
nullOk:
true
)?.
textScaleFactor
??
1.0
,
maxLines:
maxLines
??
defaultTextStyle
.
maxLines
,
text:
new
TextSpan
(
style:
effectiveTextStyle
,
...
...
packages/flutter/test/material/about_test.dart
View file @
11fa80bb
...
...
@@ -89,9 +89,13 @@ void main() {
]);
});
await
tester
.
pumpWidget
(
const
Center
(
child:
const
LicensePage
()
));
await
tester
.
pumpWidget
(
new
MaterialApp
(
home:
const
Center
(
child:
const
LicensePage
()
),
),
);
expect
(
licenseFuture
,
isNotNull
);
await
licenseFuture
;
...
...
packages/flutter/test/material/app_bar_test.dart
View file @
11fa80bb
...
...
@@ -8,29 +8,32 @@ import 'package:flutter/rendering.dart';
import
'package:flutter_test/flutter_test.dart'
;
Widget
buildSliverAppBarApp
(
{
bool
floating
,
bool
pinned
,
double
expandedHeight
,
bool
snap:
false
})
{
return
new
Scaffold
(
body:
new
DefaultTabController
(
length:
3
,
child:
new
CustomScrollView
(
primary:
true
,
slivers:
<
Widget
>[
new
SliverAppBar
(
title:
const
Text
(
'AppBar Title'
),
floating:
floating
,
pinned:
pinned
,
expandedHeight:
expandedHeight
,
snap:
snap
,
bottom:
new
TabBar
(
tabs:
<
String
>[
'A'
,
'B'
,
'C'
].
map
((
String
t
)
=>
new
Tab
(
text:
'TAB
$t
'
)).
toList
(),
return
new
MediaQuery
(
data:
const
MediaQueryData
(),
child:
new
Scaffold
(
body:
new
DefaultTabController
(
length:
3
,
child:
new
CustomScrollView
(
primary:
true
,
slivers:
<
Widget
>[
new
SliverAppBar
(
title:
const
Text
(
'AppBar Title'
),
floating:
floating
,
pinned:
pinned
,
expandedHeight:
expandedHeight
,
snap:
snap
,
bottom:
new
TabBar
(
tabs:
<
String
>[
'A'
,
'B'
,
'C'
].
map
((
String
t
)
=>
new
Tab
(
text:
'TAB
$t
'
)).
toList
(),
),
),
),
new
SliverToBoxAdapt
er
(
child:
new
Container
(
height:
1200.0
,
color:
Colors
.
orange
[
400
]
,
new
SliverToBoxAdapter
(
child:
new
Contain
er
(
height:
1200.0
,
color:
Colors
.
orange
[
400
]
,
)
,
),
)
,
]
,
]
,
)
,
),
),
);
...
...
@@ -246,12 +249,14 @@ void main() {
testWidgets
(
'AppBar with no Scaffold'
,
(
WidgetTester
tester
)
async
{
await
tester
.
pumpWidget
(
new
SizedBox
(
height:
kToolbarHeight
,
child:
new
AppBar
(
leading:
const
Text
(
'L'
),
title:
const
Text
(
'No Scaffold'
),
actions:
<
Widget
>[
const
Text
(
'A1'
),
const
Text
(
'A2'
)],
new
MaterialApp
(
home:
new
SizedBox
(
height:
kToolbarHeight
,
child:
new
AppBar
(
leading:
const
Text
(
'L'
),
title:
const
Text
(
'No Scaffold'
),
actions:
<
Widget
>[
const
Text
(
'A1'
),
const
Text
(
'A2'
)],
),
),
),
);
...
...
@@ -265,13 +270,15 @@ void main() {
testWidgets
(
'AppBar render at zero size'
,
(
WidgetTester
tester
)
async
{
await
tester
.
pumpWidget
(
new
Center
(
child:
new
Container
(
height:
0.0
,
width:
0.0
,
child:
new
Scaffold
(
appBar:
new
AppBar
(
title:
const
Text
(
'X'
),
new
MaterialApp
(
home:
new
Center
(
child:
new
Container
(
height:
0.0
,
width:
0.0
,
child:
new
Scaffold
(
appBar:
new
AppBar
(
title:
const
Text
(
'X'
),
),
),
),
),
...
...
packages/flutter/test/material/bottom_navigation_bar_test.dart
View file @
11fa80bb
This diff is collapsed.
Click to expand it.
packages/flutter/test/material/drawer_test.dart
View file @
11fa80bb
...
...
@@ -10,24 +10,26 @@ void main() {
final
Key
containerKey
=
const
Key
(
'container'
);
await
tester
.
pumpWidget
(
new
Scaffold
(
drawer:
new
Drawer
(
child:
new
ListView
(
children:
<
Widget
>[
new
DrawerHeader
(
child:
new
Container
(
key:
containerKey
,
child:
const
Text
(
'header'
)
)
),
const
ListTile
(
leading:
const
Icon
(
Icons
.
archive
),
title:
const
Text
(
'Archive'
)
)
]
)
)
)
new
MaterialApp
(
home:
new
Scaffold
(
drawer:
new
Drawer
(
child:
new
ListView
(
children:
<
Widget
>[
new
DrawerHeader
(
child:
new
Container
(
key:
containerKey
,
child:
const
Text
(
'header'
),
),
),
const
ListTile
(
leading:
const
Icon
(
Icons
.
archive
),
title:
const
Text
(
'Archive'
),
),
],
),
),
),
),
);
expect
(
find
.
text
(
'Archive'
),
findsNothing
);
...
...
packages/flutter/test/material/icon_button_test.dart
View file @
11fa80bb
...
...
@@ -172,15 +172,17 @@ void main() {
testWidgets
(
'IconButton AppBar size'
,
(
WidgetTester
tester
)
async
{
await
tester
.
pumpWidget
(
new
Scaffold
(
appBar:
new
AppBar
(
actions:
<
Widget
>[
new
IconButton
(
padding:
EdgeInsets
.
zero
,
onPressed:
mockOnPressedFunction
,
icon:
const
Icon
(
Icons
.
ac_unit
),
),
],
new
MaterialApp
(
home:
new
Scaffold
(
appBar:
new
AppBar
(
actions:
<
Widget
>[
new
IconButton
(
padding:
EdgeInsets
.
zero
,
onPressed:
mockOnPressedFunction
,
icon:
const
Icon
(
Icons
.
ac_unit
),
),
],
),
),
),
);
...
...
packages/flutter/test/material/mergeable_material_test.dart
View file @
11fa80bb
This diff is collapsed.
Click to expand it.
packages/flutter/test/material/scaffold_test.dart
View file @
11fa80bb
...
...
@@ -11,9 +11,16 @@ void main() {
final
Key
bodyKey
=
new
UniqueKey
();
await
tester
.
pumpWidget
(
new
Scaffold
(
appBar:
new
AppBar
(
title:
const
Text
(
'Title'
)),
body:
new
Container
(
key:
bodyKey
)
body:
new
Container
(
key:
bodyKey
)
,
));
expect
(
tester
.
takeException
(),
isFlutterError
);
await
tester
.
pumpWidget
(
new
MaterialApp
(
home:
new
Scaffold
(
appBar:
new
AppBar
(
title:
const
Text
(
'Title'
)),
body:
new
Container
(
key:
bodyKey
),
),
));
RenderBox
bodyBox
=
tester
.
renderObject
(
find
.
byKey
(
bodyKey
));
expect
(
bodyBox
.
size
,
equals
(
const
Size
(
800.0
,
544.0
)));
...
...
@@ -82,37 +89,37 @@ void main() {
});
testWidgets
(
'Floating action animation'
,
(
WidgetTester
tester
)
async
{
await
tester
.
pumpWidget
(
const
Scaffold
(
await
tester
.
pumpWidget
(
new
MaterialApp
(
home:
const
Scaffold
(
floatingActionButton:
const
FloatingActionButton
(
key:
const
Key
(
'one'
),
onPressed:
null
,
child:
const
Text
(
"1"
)
)
));
))
)
;
expect
(
tester
.
binding
.
transientCallbackCount
,
0
);
await
tester
.
pumpWidget
(
const
Scaffold
(
await
tester
.
pumpWidget
(
new
MaterialApp
(
home:
const
Scaffold
(
floatingActionButton:
const
FloatingActionButton
(
key:
const
Key
(
'two'
),
onPressed:
null
,
child:
const
Text
(
"2"
)
)
));
))
)
;
expect
(
tester
.
binding
.
transientCallbackCount
,
greaterThan
(
0
));
await
tester
.
pumpWidget
(
new
Container
());
expect
(
tester
.
binding
.
transientCallbackCount
,
0
);
await
tester
.
pumpWidget
(
const
Scaffold
(
));
await
tester
.
pumpWidget
(
new
MaterialApp
(
home:
const
Scaffold
()
));
expect
(
tester
.
binding
.
transientCallbackCount
,
0
);
await
tester
.
pumpWidget
(
const
Scaffold
(
await
tester
.
pumpWidget
(
new
MaterialApp
(
home:
const
Scaffold
(
floatingActionButton:
const
FloatingActionButton
(
key:
const
Key
(
'one'
),
onPressed:
null
,
child:
const
Text
(
"1"
)
)
));
))
)
;
expect
(
tester
.
binding
.
transientCallbackCount
,
greaterThan
(
0
));
});
...
...
@@ -367,7 +374,14 @@ void main() {
testWidgets
(
'body size with container'
,
(
WidgetTester
tester
)
async
{
final
Key
testKey
=
new
UniqueKey
();
await
tester
.
pumpWidget
(
new
Scaffold
(
body:
new
Container
(
key:
testKey
))
new
MediaQuery
(
data:
const
MediaQueryData
(),
child:
new
Scaffold
(
body:
new
Container
(
key:
testKey
,
),
),
),
);
expect
(
tester
.
element
(
find
.
byKey
(
testKey
)).
size
,
const
Size
(
800.0
,
600.0
));
expect
(
tester
.
renderObject
<
RenderBox
>(
find
.
byKey
(
testKey
)).
localToGlobal
(
Offset
.
zero
),
const
Offset
(
0.0
,
0.0
));
...
...
@@ -376,7 +390,15 @@ void main() {
testWidgets
(
'body size with sized container'
,
(
WidgetTester
tester
)
async
{
final
Key
testKey
=
new
UniqueKey
();
await
tester
.
pumpWidget
(
new
Scaffold
(
body:
new
Container
(
key:
testKey
,
height:
100.0
))
new
MediaQuery
(
data:
const
MediaQueryData
(),
child:
new
Scaffold
(
body:
new
Container
(
key:
testKey
,
height:
100.0
,
),
),
),
);
expect
(
tester
.
element
(
find
.
byKey
(
testKey
)).
size
,
const
Size
(
800.0
,
100.0
));
expect
(
tester
.
renderObject
<
RenderBox
>(
find
.
byKey
(
testKey
)).
localToGlobal
(
Offset
.
zero
),
const
Offset
(
0.0
,
0.0
));
...
...
@@ -385,7 +407,16 @@ void main() {
testWidgets
(
'body size with centered container'
,
(
WidgetTester
tester
)
async
{
final
Key
testKey
=
new
UniqueKey
();
await
tester
.
pumpWidget
(
new
Scaffold
(
body:
new
Center
(
child:
new
Container
(
key:
testKey
)))
new
MediaQuery
(
data:
const
MediaQueryData
(),
child:
new
Scaffold
(
body:
new
Center
(
child:
new
Container
(
key:
testKey
,
),
),
),
),
);
expect
(
tester
.
element
(
find
.
byKey
(
testKey
)).
size
,
const
Size
(
800.0
,
600.0
));
expect
(
tester
.
renderObject
<
RenderBox
>(
find
.
byKey
(
testKey
)).
localToGlobal
(
Offset
.
zero
),
const
Offset
(
0.0
,
0.0
));
...
...
@@ -394,7 +425,16 @@ void main() {
testWidgets
(
'body size with button'
,
(
WidgetTester
tester
)
async
{
final
Key
testKey
=
new
UniqueKey
();
await
tester
.
pumpWidget
(
new
Scaffold
(
body:
new
FlatButton
(
key:
testKey
,
onPressed:
()
{
},
child:
const
Text
(
''
)))
new
MediaQuery
(
data:
const
MediaQueryData
(),
child:
new
Scaffold
(
body:
new
FlatButton
(
key:
testKey
,
onPressed:
()
{
},
child:
const
Text
(
''
),
),
),
),
);
expect
(
tester
.
element
(
find
.
byKey
(
testKey
)).
size
,
const
Size
(
88.0
,
36.0
));
expect
(
tester
.
renderObject
<
RenderBox
>(
find
.
byKey
(
testKey
)).
localToGlobal
(
Offset
.
zero
),
const
Offset
(
0.0
,
0.0
));
...
...
packages/flutter/test/material/text_field_test.dart
View file @
11fa80bb
...
...
@@ -26,12 +26,15 @@ class MockClipboard {
}
Widget
overlay
(
Widget
child
)
{
return
new
Overlay
(
initialEntries:
<
OverlayEntry
>[
new
OverlayEntry
(
builder:
(
BuildContext
context
)
=>
child
,
),
],
return
new
MediaQuery
(
data:
const
MediaQueryData
(),
child:
new
Overlay
(
initialEntries:
<
OverlayEntry
>[
new
OverlayEntry
(
builder:
(
BuildContext
context
)
=>
child
,
),
],
),
);
}
...
...
@@ -229,20 +232,23 @@ void main() {
final
TextEditingController
controller
=
new
TextEditingController
();
Widget
builder
()
{
return
new
Overlay
(
initialEntries:
<
OverlayEntry
>[
new
OverlayEntry
(
builder:
(
BuildContext
context
)
{
return
new
Center
(
child:
new
Material
(
child:
new
TextField
(
controller:
controller
,
return
new
MediaQuery
(
data:
const
MediaQueryData
(),
child:
new
Overlay
(
initialEntries:
<
OverlayEntry
>[
new
OverlayEntry
(
builder:
(
BuildContext
context
)
{
return
new
Center
(
child:
new
Material
(
child:
new
TextField
(
controller:
controller
,
),
),
)
,
);
}
,
)
,
]
,
)
;
},
)
,
]
,
)
,
);
}
...
...
packages/flutter/test/material/user_accounts_drawer_header_test.dart
View file @
11fa80bb
...
...
@@ -13,31 +13,33 @@ void main() {
final
Key
avatarD
=
const
Key
(
'D'
);
await
tester
.
pumpWidget
(
new
Material
(
child:
new
Center
(
child:
new
UserAccountsDrawerHeader
(
currentAccountPicture:
new
CircleAvatar
(
key:
avatarA
,
child:
const
Text
(
'A'
),
),
otherAccountsPictures:
<
Widget
>[
const
CircleAvatar
(
child:
const
Text
(
'B'
),
),
new
CircleAvatar
(
key:
avatarC
,
child:
const
Text
(
'C'
),
),
new
CircleAvatar
(
key:
avatarD
,
child:
const
Text
(
'D'
),
new
MaterialApp
(
home:
new
Material
(
child:
new
Center
(
child:
new
UserAccountsDrawerHeader
(
currentAccountPicture:
new
CircleAvatar
(
key:
avatarA
,
child:
const
Text
(
'A'
),
),
const
CircleAvatar
(
child:
const
Text
(
'E'
),
)
],
accountName:
const
Text
(
"name"
),
accountEmail:
const
Text
(
"email"
),
otherAccountsPictures:
<
Widget
>[
const
CircleAvatar
(
child:
const
Text
(
'B'
),
),
new
CircleAvatar
(
key:
avatarC
,
child:
const
Text
(
'C'
),
),
new
CircleAvatar
(
key:
avatarD
,
child:
const
Text
(
'D'
),
),
const
CircleAvatar
(
child:
const
Text
(
'E'
),
)
],
accountName:
const
Text
(
"name"
),
accountEmail:
const
Text
(
"email"
),
),
),
),
),
...
...
@@ -87,15 +89,17 @@ void main() {
VoidCallback
onDetailsPressed
,
EdgeInsets
margin
,
})
{
return
new
Material
(
child:
new
Center
(
child:
new
UserAccountsDrawerHeader
(
currentAccountPicture:
currentAccountPicture
,
otherAccountsPictures:
otherAccountsPictures
,
accountName:
accountName
,
accountEmail:
accountEmail
,
onDetailsPressed:
onDetailsPressed
,
margin:
margin
,
return
new
MaterialApp
(
home:
new
Material
(
child:
new
Center
(
child:
new
UserAccountsDrawerHeader
(
currentAccountPicture:
currentAccountPicture
,
otherAccountsPictures:
otherAccountsPictures
,
accountName:
accountName
,
accountEmail:
accountEmail
,
onDetailsPressed:
onDetailsPressed
,
margin:
margin
,
),
),
),
);
...
...
packages/flutter/test/widgets/media_query_test.dart
View file @
11fa80bb
...
...
@@ -8,21 +8,40 @@ import 'package:flutter_test/flutter_test.dart';
import
'package:flutter/widgets.dart'
;
void
main
(
)
{
testWidgets
(
'MediaQuery has a default'
,
(
WidgetTester
tester
)
async
{
Size
size
;
testWidgets
(
'MediaQuery does not have a default'
,
(
WidgetTester
tester
)
async
{
bool
tested
=
false
;
await
tester
.
pumpWidget
(
new
Builder
(
builder:
(
BuildContext
context
)
{
tested
=
true
;
MediaQuery
.
of
(
context
);
// should throw
return
new
Container
();
}
)
);
expect
(
tested
,
isTrue
);
expect
(
tester
.
takeException
(),
isFlutterError
);
});
testWidgets
(
'MediaQuery defaults to null'
,
(
WidgetTester
tester
)
async
{
bool
tested
=
false
;
await
tester
.
pumpWidget
(
new
Builder
(
builder:
(
BuildContext
context
)
{
final
MediaQueryData
data
=
MediaQuery
.
of
(
context
);
expect
(
data
,
hasOneLineDescription
);
expect
(
data
.
hashCode
,
equals
(
data
.
copyWith
().
hashCode
));
size
=
data
.
size
;
final
MediaQueryData
data
=
MediaQuery
.
of
(
context
,
nullOk:
true
);
expect
(
data
,
isNull
);
tested
=
true
;
return
new
Container
();
}
)
);
expect
(
tested
,
isTrue
);
});
expect
(
size
,
equals
(
ui
.
window
.
physicalSize
/
ui
.
window
.
devicePixelRatio
));
testWidgets
(
'MediaQueryData is sane'
,
(
WidgetTester
tester
)
async
{
final
MediaQueryData
data
=
new
MediaQueryData
.
fromWindow
(
ui
.
window
);
expect
(
data
,
hasOneLineDescription
);
expect
(
data
.
hashCode
,
equals
(
data
.
copyWith
().
hashCode
));
expect
(
data
.
size
,
equals
(
ui
.
window
.
physicalSize
/
ui
.
window
.
devicePixelRatio
));
});
}
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