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
6f824bce
Commit
6f824bce
authored
Jun 06, 2017
by
Ian Hickson
Committed by
GitHub
Jun 06, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
More documentation (#10519)
parent
18d1be4a
Changes
29
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
29 changed files
with
1169 additions
and
169 deletions
+1169
-169
curves.dart
packages/flutter/lib/src/animation/curves.dart
+19
-0
bottom_tab_bar.dart
packages/flutter/lib/src/cupertino/bottom_tab_bar.dart
+3
-2
colors.dart
packages/flutter/lib/src/cupertino/colors.dart
+1
-0
nav_bar.dart
packages/flutter/lib/src/cupertino/nav_bar.dart
+3
-2
back_button.dart
packages/flutter/lib/src/material/back_button.dart
+5
-0
checkbox_list_tile.dart
packages/flutter/lib/src/material/checkbox_list_tile.dart
+3
-0
colors.dart
packages/flutter/lib/src/material/colors.dart
+718
-145
radio_list_tile.dart
packages/flutter/lib/src/material/radio_list_tile.dart
+3
-0
switch_list_tile.dart
packages/flutter/lib/src/material/switch_list_tile.dart
+3
-0
box_painter.dart
packages/flutter/lib/src/painting/box_painter.dart
+2
-2
editable.dart
packages/flutter/lib/src/rendering/editable.dart
+25
-0
object.dart
packages/flutter/lib/src/rendering/object.dart
+2
-2
proxy_box.dart
packages/flutter/lib/src/rendering/proxy_box.dart
+7
-5
sliver_persistent_header.dart
...s/flutter/lib/src/rendering/sliver_persistent_header.dart
+1
-0
image_provider.dart
packages/flutter/lib/src/services/image_provider.dart
+81
-0
image_stream.dart
packages/flutter/lib/src/services/image_stream.dart
+12
-3
animated_cross_fade.dart
packages/flutter/lib/src/widgets/animated_cross_fade.dart
+37
-0
basic.dart
packages/flutter/lib/src/widgets/basic.dart
+76
-1
binding.dart
packages/flutter/lib/src/widgets/binding.dart
+107
-0
container.dart
packages/flutter/lib/src/widgets/container.dart
+1
-1
framework.dart
packages/flutter/lib/src/widgets/framework.dart
+1
-1
image.dart
packages/flutter/lib/src/widgets/image.dart
+9
-0
navigation_toolbar.dart
packages/flutter/lib/src/widgets/navigation_toolbar.dart
+3
-1
nested_scroll_view.dart
packages/flutter/lib/src/widgets/nested_scroll_view.dart
+15
-0
transform_test.dart
packages/flutter/test/widgets/transform_test.dart
+24
-0
health.dart
packages/flutter_driver/lib/src/health.dart
+0
-3
all_elements.dart
packages/flutter_test/lib/src/all_elements.dart
+1
-1
binding.dart
packages/flutter_test/lib/src/binding.dart
+4
-0
finders.dart
packages/flutter_test/lib/src/finders.dart
+3
-0
No files found.
packages/flutter/lib/src/animation/curves.dart
View file @
6f824bce
...
...
@@ -448,6 +448,25 @@ class ElasticInOutCurve extends Curve {
// PREDEFINED CURVES
/// A collection of common animation curves.
///
/// 
/// 
/// 
/// 
/// 
/// 
/// 
/// 
/// 
/// 
/// 
/// 
/// 
///
/// See also:
///
/// * [Curve], the interface implemented by the constants available from the
/// [Curves] class.
class
Curves
{
Curves
.
_
();
...
...
packages/flutter/lib/src/cupertino/bottom_tab_bar.dart
View file @
6f824bce
...
...
@@ -15,7 +15,7 @@ const double _kTabBarHeight = 50.0;
const
Color
_kDefaultTabBarBackgroundColor
=
const
Color
(
0xCCF8F8F8
);
const
Color
_kDefaultTabBarBorderColor
=
const
Color
(
0x4C000000
);
/// An iOS
styled bottom navigation tab bar.
/// An iOS
-
styled bottom navigation tab bar.
///
/// Displays multiple tabs using [BottomNavigationBarItem] with one tab being
/// active, the first tab by default.
...
...
@@ -29,9 +29,10 @@ const Color _kDefaultTabBarBorderColor = const Color(0x4C000000);
///
/// If the given [backgroundColor]'s opacity is not 1.0 (which is the case by
/// default), it will produce a blurring effect to the content behind it.
//
/
//
// TODO(xster): document using with a CupertinoScaffold.
class
CupertinoTabBar
extends
StatelessWidget
{
/// Creates a tab bar in the iOS style.
CupertinoTabBar
({
Key
key
,
@required
this
.
items
,
...
...
packages/flutter/lib/src/cupertino/colors.dart
View file @
6f824bce
...
...
@@ -4,6 +4,7 @@
import
'dart:ui'
show
Color
;
/// [Color] constants that describe colors commonly used in iOS applications.
class
CupertinoColors
{
CupertinoColors
.
_
();
...
...
packages/flutter/lib/src/cupertino/nav_bar.dart
View file @
6f824bce
...
...
@@ -15,7 +15,7 @@ const double _kNavBarHeight = 44.0;
const
Color
_kDefaultNavBarBackgroundColor
=
const
Color
(
0xCCF8F8F8
);
const
Color
_kDefaultNavBarBorderColor
=
const
Color
(
0x4C000000
);
/// An iOS
styled navigation bar.
/// An iOS
-
styled navigation bar.
///
/// The navigation bar is a toolbar that minimally consists of a widget, normally
/// a page title, in the [middle] of the toolbar.
...
...
@@ -28,11 +28,12 @@ const Color _kDefaultNavBarBorderColor = const Color(0x4C000000);
///
/// If the given [backgroundColor]'s opacity is not 1.0 (which is the case by
/// default), it will produce a blurring effect to the content behind it.
//
/
//
// TODO(xster): document automatic addition of a CupertinoBackButton.
// TODO(xster): add sample code using icons.
// TODO(xster): document integration into a CupertinoScaffold.
class
CupertinoNavigationBar
extends
StatelessWidget
implements
PreferredSizeWidget
{
/// Creates a navigation bar in the iOS style.
const
CupertinoNavigationBar
({
Key
key
,
this
.
leading
,
...
...
packages/flutter/lib/src/material/back_button.dart
View file @
6f824bce
...
...
@@ -10,6 +10,8 @@ import 'theme.dart';
/// A "back" icon that's appropriate for the current [TargetPlatform].
///
/// The current platform is determined by querying for the ambient [Theme].
///
/// See also:
///
/// * [BackButton], an [IconButton] with a [BackButtonIcon] that calls
...
...
@@ -17,7 +19,10 @@ import 'theme.dart';
/// * [IconButton], which is a more general widget for creating buttons
/// with icons.
/// * [Icon], a material design icon.
/// * [ThemeData.platform], which specifies the current platform.
class
BackButtonIcon
extends
StatelessWidget
{
/// Creates an icon that shows the appropriate "back" image for
/// the current platform (as obtained from the [Theme]).
const
BackButtonIcon
({
Key
key
})
:
super
(
key:
key
);
/// Returns tha appropriate "back" icon for the given `platform`.
...
...
packages/flutter/lib/src/material/checkbox_list_tile.dart
View file @
6f824bce
...
...
@@ -31,6 +31,9 @@ import 'theme.dart';
/// [secondary] widget is placed on the opposite side. This maps to the
/// [ListTile.leading] and [ListTile.trailing] properties of [ListTile].
///
/// To show the [CheckboxListTile] as disabled, pass null as the [onChanged]
/// callback.
///
/// ## Sample code
///
/// This widget shows a checkbox that, when checked, slows down all animations
...
...
packages/flutter/lib/src/material/colors.dart
View file @
6f824bce
This diff is collapsed.
Click to expand it.
packages/flutter/lib/src/material/radio_list_tile.dart
View file @
6f824bce
...
...
@@ -34,6 +34,9 @@ import 'theme.dart';
/// [secondary] widget is placed on the opposite side. This maps to the
/// [ListTile.leading] and [ListTile.trailing] properties of [ListTile].
///
/// To show the [RadioListTile] as disabled, pass null as the [onChanged]
/// callback.
///
/// ## Sample code
///
/// This widget shows a pair of radio buttons that control the `_character`
...
...
packages/flutter/lib/src/material/switch_list_tile.dart
View file @
6f824bce
...
...
@@ -32,6 +32,9 @@ import 'theme.dart';
/// [ListTile.leading] slot. This cannot be changed; there is not sufficient
/// space in a [ListTile]'s [ListTile.leading] slot for a [Switch].
///
/// To show the [SwitchListTile] as disabled, pass null as the [onChanged]
/// callback.
///
/// ## Sample code
///
/// This widget shows a switch that, when toggled, changes the state of a [bool]
...
...
packages/flutter/lib/src/painting/box_painter.dart
View file @
6f824bce
...
...
@@ -1411,7 +1411,7 @@ class DecorationImage {
///
/// The [BoxDecoration] class provides a variety of ways to draw a box.
///
/// The box has a [border], a body, and may cast a [
s
hadow].
/// The box has a [border], a body, and may cast a [
boxS
hadow].
///
/// The [shape] of the box can be a circle or a rectangle. If it is a rectangle,
/// then the [borderRadius] property controls the roundness of the corners.
...
...
@@ -1421,7 +1421,7 @@ class DecorationImage {
/// the box. Finally there is the [image], the precise alignment of which is
/// controlled by the [DecorationImage] class.
///
/// The [border] paints over the body; the [
s
hadow], naturally, paints below it.
/// The [border] paints over the body; the [
boxS
hadow], naturally, paints below it.
///
/// ## Sample code
///
...
...
packages/flutter/lib/src/rendering/editable.dart
View file @
6f824bce
...
...
@@ -58,7 +58,32 @@ class TextSelectionPoint {
}
}
/// Displays some text in a scrollable container with a potentially blinking
/// cursor and with gesture recognizers.
///
/// This is the renderer for an editable text field. It does not directly
/// provide affordances for editing the text, but it does handle text selection
/// and manipulation of the text cursor.
///
/// The [text] is displayed, scrolled by the given [offset], aligned according
/// to [textAlign]. The [maxLines] property controls whether the text displays
/// on one line or many. The [selection], if it is not collapsed, is painted in
/// the [selectionColor]. If it _is_ collapsed, then it represents the cursor
/// position. The cursor is shown while [showCursor] is true. It is painted in
/// the [cursorColor].
///
/// If, when the render object paints, the caret is found to have changed
/// location, [onCaretChanged] is called.
///
/// The user may interact with the render object by tapping or long-pressing.
/// When the user does so, the selection is updated, and [onSelectionChanged] is
/// called.
///
/// Keyboard handling, IME handling, scrolling, toggling the [showCursor] value
/// to actually blink the cursor, and other features not mentioned above are the
/// responsibility of higher layers and not handled by this object.
class
RenderEditable
extends
RenderBox
{
/// Creates a render object that implements the visual aspects of a text field.
RenderEditable
({
TextSpan
text
,
TextAlign
textAlign
,
...
...
packages/flutter/lib/src/rendering/object.dart
View file @
6f824bce
...
...
@@ -1233,8 +1233,8 @@ class PipelineOwner {
/// Update the semantics for render objects marked as needing a semantics
/// update.
///
/// Initially, only the root node, as scheduled by
[scheduleInitialSemantics],
/// needs a semantics update.
/// Initially, only the root node, as scheduled by
///
[RenderObjectscheduleInitialSemantics],
needs a semantics update.
///
/// This function is one of the core stages of the rendering pipeline. The
/// semantics are compiled after painting and only after
...
...
packages/flutter/lib/src/rendering/proxy_box.dart
View file @
6f824bce
...
...
@@ -1509,7 +1509,7 @@ class RenderTransform extends RenderProxyBox {
/// child as it is painted. When set to false, hit tests are performed
/// ignoring the transformation.
///
///
applyPaintTransform(), and therefore localToGlobal() and globalToLocal()
,
///
[applyPaintTransform], and therefore [localToGlobal] and [globalToLocal]
,
/// always honor the transformation, regardless of the value of this property.
bool
transformHitTests
;
...
...
@@ -2890,12 +2890,14 @@ class RenderSemanticsAnnotations extends RenderProxyBox {
}
}
/// Causes the semantics of all
siblings and cousins painted before it in the
///
same semantic container
to be dropped.
/// Causes the semantics of all
earlier render objects below the same semantic
///
boundary
to be dropped.
///
/// This is useful in a stack where an o
verlay
should prevent interactions
/// with the
underlying layers
.
/// This is useful in a stack where an o
paque mask
should prevent interactions
/// with the
render objects painted below the mask
.
class
RenderBlockSemantics
extends
RenderProxyBox
{
/// Create a render object that blocks semantics for nodes below it in paint
/// order.
RenderBlockSemantics
({
RenderBox
child
})
:
super
(
child
);
@override
...
...
packages/flutter/lib/src/rendering/sliver_persistent_header.dart
View file @
6f824bce
...
...
@@ -35,6 +35,7 @@ abstract class RenderSliverPersistentHeader extends RenderSliver with RenderObje
/// child changes its intrinsic dimensions.
double
get
minExtent
;
/// The dimension of the child in the main axis.
@protected
double
get
childExtent
{
if
(
child
==
null
)
...
...
packages/flutter/lib/src/services/image_provider.dart
View file @
6f824bce
...
...
@@ -19,6 +19,13 @@ import 'image_stream.dart';
/// Configuration information passed to the [ImageProvider.resolve] method to
/// select a specific image.
///
/// See also:
///
/// * [createLocalImageConfiguration], which creates an [ImageConfiguration]
/// based on ambient configuration in a [Widget] environment.
/// * [ImageProvider], which uses [ImageConfiguration] objects to determine
/// which image to obtain.
@immutable
class
ImageConfiguration
{
/// Creates an object holding the configuration information for an [ImageProvider].
...
...
@@ -149,6 +156,80 @@ class ImageConfiguration {
///
/// The type argument does not have to be specified when using the type as an
/// argument (where any image provider is acceptable).
///
/// ## Sample code
///
/// The following shows the code required to write a widget that fully conforms
/// to the [ImageProvider] and [Widget] protocols.
///
/// ```dart
/// class Picture extends StatefulWidget {
/// const Picture({
/// Key key,
/// @required this.imageProvider,
/// }) : assert(imageProvider != null),
/// super(key: key);
///
/// final ImageProvider imageProvider;
///
/// @override
/// _PictureState createState() => new _PictureState();
/// }
///
/// class _PictureState extends State<Picture> {
/// ImageStream _imageStream;
/// ImageInfo _imageInfo;
///
/// @override
/// void didChangeDependencies() {
/// super.didChangeDependencies();
/// // We call _getImage here because createLocalImageConfiguration() needs to
/// // be called again if the dependencies changed, in case the changes relate
/// // to the DefaultAssetBundle, MediaQuery, etc, which that method uses.
/// _getImage();
/// }
///
/// @override
/// void didUpdateWidget(Picture oldWidget) {
/// super.didUpdateWidget(oldWidget);
/// if (widget.imageProvider != oldWidget.imageProvider)
/// _getImage();
/// }
///
/// void _getImage() {
/// final ImageStream oldImageStream = _imageStream;
/// _imageStream = widget.imageProvider.resolve(createLocalImageConfiguration(context));
/// if (_imageStream.key != oldImageStream?.key) {
/// // If the keys are the same, then we got the same image back, and so we don't
/// // need to update the listeners. If the key changed, though, we must make sure
/// // to switch our listeners to the new image stream.
/// oldImageStream?.removeListener(_updateImage);
/// _imageStream.addListener(_updateImage);
/// }
/// }
///
/// void _updateImage(ImageInfo imageInfo, bool synchronousCall) {
/// setState(() {
/// // Trigger a build whenever the image changes.
/// _imageInfo = imageInfo;
/// });
/// }
///
/// @override
/// void dispose() {
/// _imageStream.removeListener(_updateImage);
/// super.dispose();
/// }
///
/// @override
/// Widget build(BuildContext context) {
/// return new RawImage(
/// image: _imageInfo?.image, // this is a dart:ui Image object
/// scale: _imageInfo?.scale ?? 1.0,
/// );
/// }
/// }
/// ```
@optionalTypeArgs
abstract
class
ImageProvider
<
T
>
{
/// Abstract const constructor. This constructor enables subclasses to provide
...
...
packages/flutter/lib/src/services/image_stream.dart
View file @
6f824bce
...
...
@@ -44,10 +44,14 @@ class ImageInfo {
/// Signature for callbacks reporting that an image is available.
///
/// synchronousCall is true if the listener is being invoked during the call
/// to addListener.
///
/// Used by [ImageStream].
///
/// The `synchronousCall` argument is true if the listener is being invoked
/// during the call to addListener. This can be useful if, for example,
/// [ImageStream.addListener] is invoked during a frame, so that a new rendering
/// frame is requested if the call was asynchronous (after the current frame)
/// and no rendering frame is requested if the call was synchronous (within the
/// same stack frame as the call to [ImageStream.addListener]).
typedef
void
ImageListener
(
ImageInfo
image
,
bool
synchronousCall
);
/// A handle to an image resource.
...
...
@@ -61,6 +65,11 @@ typedef void ImageListener(ImageInfo image, bool synchronousCall);
/// loading.
///
/// ImageStream objects are backed by [ImageStreamCompleter] objects.
///
/// See also:
///
/// * [ImageProvider], which has an example that includes the use of an
/// [ImageStream] in a [Widget].
class
ImageStream
{
/// Create an initially unbound image stream.
///
...
...
packages/flutter/lib/src/widgets/animated_cross_fade.dart
View file @
6f824bce
...
...
@@ -38,6 +38,26 @@ enum CrossFadeState {
/// width. In the case where the two children have different heights, the
/// animation crops overflowing children during the animation by aligning their
/// top edge, which means that the bottom will be clipped.
///
/// ## Sample code
///
/// This code fades between two representations of the Flutter logo. It depends
/// on a global boolean `_on`; when `_on` is true, the first logo is shown,
/// otherwise the second logo is shown.
///
/// ```dart
/// new AnimatedCrossFade(
/// duration: const Duration(seconds: 3),
/// firstChild: const FlutterLogo(style: FlutterLogoStyle.horizontal, size: 100.0),
/// secondChild: const FlutterLogo(style: FlutterLogoStyle.stacked, size: 100.0),
/// crossFadeState: _on ? CrossFadeState.showFirst : CrossFadeState.showSecond,
/// )
/// ```
///
/// See also:
///
/// * [AnimatedSize], the lower-level widget which [AnimatedCrossFade] uses to
/// automatically change size.
class
AnimatedCrossFade
extends
StatefulWidget
{
/// Creates a cross-fade animation widget.
///
...
...
@@ -99,6 +119,14 @@ class AnimatedCrossFade extends StatefulWidget {
@override
_AnimatedCrossFadeState
createState
()
=>
new
_AnimatedCrossFadeState
();
@override
void
debugFillDescription
(
List
<
String
>
description
)
{
super
.
debugFillDescription
(
description
);
description
.
add
(
'
$crossFadeState
'
);
if
(
alignment
!=
FractionalOffset
.
topCenter
)
description
.
add
(
'alignment:
$alignment
'
);
}
}
class
_AnimatedCrossFadeState
extends
State
<
AnimatedCrossFade
>
with
TickerProviderStateMixin
{
...
...
@@ -212,4 +240,13 @@ class _AnimatedCrossFadeState extends State<AnimatedCrossFade> with TickerProvid
),
);
}
@override
void
debugFillDescription
(
List
<
String
>
description
)
{
super
.
debugFillDescription
(
description
);
description
.
add
(
'
${widget.crossFadeState}
'
);
description
.
add
(
'
$_controller
'
);
if
(
widget
.
alignment
!=
FractionalOffset
.
topCenter
)
description
.
add
(
'alignment:
${widget.alignment}
'
);
}
}
packages/flutter/lib/src/widgets/basic.dart
View file @
6f824bce
...
...
@@ -80,6 +80,8 @@ export 'package:flutter/rendering.dart' show
/// See also:
///
/// * [ShaderMask], which can apply more elaborate effects to its child.
/// * [Transform], which applies an arbitrary transform to its child widget at
/// paint time.
class
Opacity
extends
SingleChildRenderObjectWidget
{
/// Creates a widget that makes its child partially transparent.
///
...
...
@@ -147,6 +149,7 @@ class Opacity extends SingleChildRenderObjectWidget {
/// * [Opacity], which can apply a uniform alpha effect to its child.
/// * [CustomPaint], which lets you draw directly on the canvas.
/// * [DecoratedBox], for another approach at decorating child widgets.
/// * [BackdropFilter], which applies an image filter to the background.
class
ShaderMask
extends
SingleChildRenderObjectWidget
{
/// Creates a widget that applies a mask generated by a [Shader] to its child.
///
...
...
@@ -196,6 +199,11 @@ class ShaderMask extends SingleChildRenderObjectWidget {
///
/// This effect is relatively expensive, especially if the filter is non-local,
/// such as a blur.
///
/// See also:
///
/// * [DecoratedBox], which draws a background under (or over) a widget.
/// * [Opacity], which changes the opacity of the widget itself.
class
BackdropFilter
extends
SingleChildRenderObjectWidget
{
/// Creates a backdrop filter.
///
...
...
@@ -547,6 +555,11 @@ class ClipPath extends SingleChildRenderObjectWidget {
///
/// Physical layers cast shadows based on an [elevation] which is nominally in
/// logical pixels, coming vertically out of the rendering surface.
///
/// See also:
///
/// * [DecoratedBox], which can apply more arbitrary shadow effects.
/// * [ClipRect], which applies a clip to its child.
class
PhysicalModel
extends
SingleChildRenderObjectWidget
{
/// Creates a physical model with a rounded-rectangular clip.
///
...
...
@@ -607,6 +620,32 @@ class PhysicalModel extends SingleChildRenderObjectWidget {
// POSITIONING AND SIZING NODES
/// A widget that applies a transformation before painting its child.
///
/// ## Sample code
///
/// This example rotates and skews an orange box containing text, keeping the
/// top right corner pinned to its original position.
///
/// ```dart
/// new Container(
/// color: Colors.black,
/// child: new Transform(
/// alignment: FractionalOffset.topRight,
/// transform: new Matrix4.skewY(0.3)..rotateZ(-math.PI / 12.0),
/// child: new Container(
/// padding: const EdgeInsets.all(8.0),
/// color: const Color(0xFFE8581C),
/// child: const Text('Apartment for rent!'),
/// ),
/// ),
/// )
/// ```
///
/// See also:
/// * [RotatedBox], which rotates the child widget during layout, not just
/// during painting.
/// * [FittedBox], which sizes and positions its child widget to fit the parent
/// according to a given [BoxFit] discipline.
class
Transform
extends
SingleChildRenderObjectWidget
{
/// Creates a widget that transforms its child.
///
...
...
@@ -617,10 +656,41 @@ class Transform extends SingleChildRenderObjectWidget {
this
.
origin
,
this
.
alignment
,
this
.
transformHitTests
:
true
,
Widget
child
Widget
child
,
})
:
assert
(
transform
!=
null
),
super
(
key:
key
,
child:
child
);
/// Creates a widget that transforms its child using a rotation around the
/// center.
///
/// The `angle` argument must not be null. It gives the rotation in clockwise
/// radians.
///
/// ## Sample code
///
/// This example rotates an orange box containing text around its center by
/// fifteen degrees.
///
/// ```dart
/// new Transform.rotate(
/// angle: -math.PI / 12.0,
/// child: new Container(
/// padding: const EdgeInsets.all(8.0),
/// color: const Color(0xFFE8581C),
/// child: const Text('Apartment for rent!'),
/// ),
/// )
/// ```
Transform
.
rotate
({
Key
key
,
@required
double
angle
,
this
.
origin
,
this
.
alignment
:
FractionalOffset
.
center
,
this
.
transformHitTests
:
true
,
Widget
child
,
})
:
transform
=
new
Matrix4
.
rotationZ
(
angle
),
super
(
key:
key
,
child:
child
);
/// The matrix to transform the child by during painting.
final
Matrix4
transform
;
...
...
@@ -659,6 +729,11 @@ class Transform extends SingleChildRenderObjectWidget {
}
/// Scales and positions its child within itself according to [fit].
///
/// See also:
///
/// * [Transform], which applies an arbitrary transform to its child widget at
/// paint time.
class
FittedBox
extends
SingleChildRenderObjectWidget
{
/// Creates a widget that scales and positions its child within itself according to [fit].
///
...
...
packages/flutter/lib/src/widgets/binding.dart
View file @
6f824bce
...
...
@@ -27,6 +27,50 @@ export 'dart:ui' show AppLifecycleState, Locale;
/// handlers, or can used with the `implements` keyword, in which case all the
/// handlers must be implemented (and the analyzer will list those that have
/// been omitted).
///
/// ## Sample code
///
/// This [StatefulWidget] implements the parts of the [State] and
/// [WidgetsBindingObserver] protocols necessary to react to application
/// lifecycle messages. See [didChangeAppLifecycleState].
///
/// ```dart
/// class Reactor extends StatefulWidget {
/// const Reactor({ Key key }) : super(key: key);
///
/// @override
/// _ReactorState createState() => new _ReactorState();
/// }
///
/// class _ReactorState extends State<Reactor> with WidgetsBindingObserver {
/// @override
/// void initState() {
/// super.initState();
/// WidgetsBinding.instance.addObserver(this);
/// }
///
/// @override
/// void dispose() {
/// WidgetsBinding.instance.removeObserver(this);
/// super.dispose();
/// }
///
/// AppLifecycleState _notification;
///
/// @override
/// void didChangeAppLifecycleState(AppLifecycleState state) {
/// setState(() { _notification = state; });
/// }
///
/// @override
/// Widget build(BuildContext context) {
/// return new Text('Last notification: $_notification');
/// }
/// }
/// ```
///
/// To respond to other notifications, replace the [didChangeAppLifecycleState]
/// method above with other methods from this class.
abstract
class
WidgetsBindingObserver
{
/// Called when the system tells the app to pop the current route.
/// For example, on Android, this is called when the user presses
...
...
@@ -52,6 +96,56 @@ abstract class WidgetsBindingObserver {
/// Called when the application's dimensions change. For example,
/// when a phone is rotated.
///
/// ## Sample code
///
/// This [StatefulWidget] implements the parts of the [State] and
/// [WidgetsBindingObserver] protocols necessary to react when the device is
/// rotated (or otherwise changes dimensions).
///
/// ```dart
/// class Reactor extends StatefulWidget {
/// const Reactor({ Key key }) : super(key: key);
///
/// @override
/// _ReactorState createState() => new _ReactorState();
/// }
///
/// class _ReactorState extends State<Reactor> with WidgetsBindingObserver {
/// @override
/// void initState() {
/// super.initState();
/// WidgetsBinding.instance.addObserver(this);
/// }
///
/// @override
/// void dispose() {
/// WidgetsBinding.instance.removeObserver(this);
/// super.dispose();
/// }
///
/// Size _lastSize;
///
/// @override
/// void didChangeMetrics() {
/// setState(() { _lastSize = ui.window.physicalSize; });
/// }
///
/// @override
/// Widget build(BuildContext context) {
/// return new Text('Last size: $_lastSize');
/// }
/// }
/// ```
///
/// In general, this is unnecessary as the layout system takes care of
/// automatically recomputing the application geometry when the application
/// size changes.
///
/// See also:
///
/// * [MediaQuery.of], which provides a similar service with less
/// boilerplate.
void
didChangeMetrics
()
{
}
/// Called when the system tells the app that the user's locale has
...
...
@@ -61,6 +155,9 @@ abstract class WidgetsBindingObserver {
/// Called when the system puts the app in the background or returns
/// the app to the foreground.
///
/// An example of implementing this method is provided in the class-level
/// documentation for the [WidgetsBindingObserver] class.
void
didChangeAppLifecycleState
(
AppLifecycleState
state
)
{
}
/// Called when the system is running low on memory.
...
...
@@ -159,11 +256,21 @@ abstract class WidgetsBinding extends BindingBase with GestureBinding, RendererB
/// [MediaQuery.of] static method and (implicitly) the
/// [InheritedWidget] mechanism to be notified whenever the screen
/// size changes (e.g. whenever the screen rotates).
///
/// See also:
///
/// * [removeObserver], to release the resources reserved by this method.
/// * [WidgetsBindingObserver], which has an example of using this method.
void
addObserver
(
WidgetsBindingObserver
observer
)
=>
_observers
.
add
(
observer
);
/// Unregisters the given observer. This should be used sparingly as
/// it is relatively expensive (O(N) in the number of registered
/// observers).
///
/// See also:
///
/// * [addObserver], for the method that adds observers in the first place.
/// * [WidgetsBindingObserver], which has an example of using this method.
bool
removeObserver
(
WidgetsBindingObserver
observer
)
=>
_observers
.
remove
(
observer
);
/// Called when the system metrics change.
...
...
packages/flutter/lib/src/widgets/container.dart
View file @
6f824bce
...
...
@@ -146,7 +146,7 @@ class DecoratedBox extends SingleChildRenderObjectWidget {
/// The [constraints] are set to fit the font size plus ample headroom
/// vertically, while expanding horizontally to fit the parent. The [padding] is
/// used to make sure there is space between the contents and the text. The
///
[color]
makes the box teal. The [alignment] causes the [child] to be
///
`color`
makes the box teal. The [alignment] causes the [child] to be
/// centered in the box. The [foregroundDecoration] overlays a nine-patch image
/// onto the text. Finally, the [transform] applies a slight rotation to the
/// entire contraption to complete the effect.
...
...
packages/flutter/lib/src/widgets/framework.dart
View file @
6f824bce
...
...
@@ -1452,7 +1452,7 @@ abstract class ParentDataWidget<T extends RenderObjectWidget> extends ProxyWidge
///
/// Sometimes, the `of` method returns the data rather than the inherited
/// widget; for example, in this case it could have returned a [Color] instead
/// of the
[FrogColor]
widget.
/// of the
`FrogColor`
widget.
///
/// Occasionally, the inherited widget is an implementation detail of another
/// class, and is therefore private. The `of` method in that case is typically
...
...
packages/flutter/lib/src/widgets/image.dart
View file @
6f824bce
...
...
@@ -25,6 +25,15 @@ export 'package:flutter/services.dart' show
///
/// This is the object that must be passed to [BoxPainter.paint] and to
/// [ImageProvider.resolve].
///
/// If this is not called from a build method, then it should be reinvoked
/// whenever the dependencies change, e.g. by calling it from
/// [State.didChangeDependencies], so that any changes in the environement are
/// picked up (e.g. if the device pixel ratio changes).
///
/// See also:
///
/// * [ImageProvider], which has an example showing how this might be used.
ImageConfiguration
createLocalImageConfiguration
(
BuildContext
context
,
{
Size
size
})
{
return
new
ImageConfiguration
(
bundle:
DefaultAssetBundle
.
of
(
context
),
...
...
packages/flutter/lib/src/widgets/navigation_toolbar.dart
View file @
6f824bce
...
...
@@ -13,7 +13,7 @@ import 'framework.dart';
/// widgets along a horizontal axis that's sensible for an application's
/// navigation bar such as in Material Design and in iOS.
///
/// [leading] and [trailing] widgets occupy the edges of the widget with
///
The
[leading] and [trailing] widgets occupy the edges of the widget with
/// reasonable size constraints while the [middle] widget occupies the remaining
/// space in either a center aligned or start aligned fashion.
///
...
...
@@ -21,6 +21,8 @@ import 'framework.dart';
/// the iOS [CupertinoNavigationBar] or wrap this widget with more theming
/// specifications for your own custom app bar.
class
NavigationToolbar
extends
StatelessWidget
{
/// Creates a widget that lays out its children in a manner suitable for a
/// toolbar.
const
NavigationToolbar
({
Key
key
,
this
.
leading
,
...
...
packages/flutter/lib/src/widgets/nested_scroll_view.dart
View file @
6f824bce
...
...
@@ -25,6 +25,11 @@ import 'sliver.dart';
import
'ticker_provider.dart'
;
/// Signature used by [NestedScrollView] for building its header.
///
/// The `innerBoxIsScrolled` argument is typically used to control the
/// [SliverAppBar.forceElevated] property to ensure that the app bar shows a
/// shadow, since it would otherwise not necessarily be aware that it had
/// content ostensibly below it.
typedef
List
<
Widget
>
NestedScrollViewHeaderSliversBuilder
(
BuildContext
context
,
bool
innerBoxIsScrolled
);
// TODO(abarth): Make this configurable with a controller.
...
...
@@ -73,8 +78,18 @@ class NestedScrollView extends StatefulWidget {
/// Defaults to matching platform conventions.
final
ScrollPhysics
physics
;
/// A builder for any widgets that are to precede the inner scroll views (as
/// given by [body]).
///
/// Typically this is used to create a [SliverAppBar] with a [TabBar].
final
NestedScrollViewHeaderSliversBuilder
headerSliverBuilder
;
/// The widget to show inside the [NestedScrollView].
///
/// Typically this will be [TabBarView].
///
/// The [body] is built in a context that provides a [PrimaryScrollController]
/// that interacts with the [NestedScrollView]'s scroll controller.
final
Widget
body
;
List
<
Widget
>
_buildSlivers
(
BuildContext
context
,
ScrollController
innerController
,
bool
bodyIsScrolled
)
{
...
...
packages/flutter/test/widgets/transform_test.dart
View file @
6f824bce
...
...
@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import
'dart:math'
as
math
;
import
'package:flutter_test/flutter_test.dart'
;
import
'package:flutter/rendering.dart'
;
import
'package:flutter/widgets.dart'
;
...
...
@@ -171,4 +173,26 @@ void main() {
final
Matrix4
transform
=
layer
.
transform
;
expect
(
transform
.
getTranslation
(),
equals
(
new
Vector3
(
100.0
,
75.0
,
0.0
)));
});
testWidgets
(
'Transform.rotate'
,
(
WidgetTester
tester
)
async
{
await
tester
.
pumpWidget
(
new
Transform
.
rotate
(
angle:
math
.
PI
/
2.0
,
child:
new
Opacity
(
opacity:
0.5
,
child:
new
Container
()),
),
);
final
List
<
Layer
>
layers
=
tester
.
layers
..
retainWhere
((
Layer
layer
)
=>
layer
is
TransformLayer
);
expect
(
layers
.
length
,
2
);
// The first transform is from the render view.
final
TransformLayer
layer
=
layers
[
1
];
final
Matrix4
transform
=
layer
.
transform
;
expect
(
transform
.
storage
,
<
dynamic
>[
moreOrLessEquals
(
0.0
),
1.0
,
0.0
,
0.0
,
-
1.0
,
moreOrLessEquals
(
0.0
),
0.0
,
0.0
,
0.0
,
0.0
,
1.0
,
0.0
,
700.0
,
-
100.0
,
0.0
,
1.0
,
]);
});
}
packages/flutter_driver/lib/src/health.dart
View file @
6f824bce
...
...
@@ -16,7 +16,6 @@ class GetHealth extends Command {
GetHealth
.
deserialize
(
Map
<
String
,
String
>
json
)
:
super
.
deserialize
(
json
);
}
/// Application health status.
enum
HealthStatus
{
/// Application is known to be in a good shape and should be able to respond.
ok
,
...
...
@@ -28,7 +27,6 @@ enum HealthStatus {
final
EnumIndex
<
HealthStatus
>
_healthStatusIndex
=
new
EnumIndex
<
HealthStatus
>(
HealthStatus
.
values
);
/// Application health status.
class
Health
extends
Result
{
/// Creates a [Health] object with the given [status].
Health
(
this
.
status
)
{
...
...
@@ -40,7 +38,6 @@ class Health extends Result {
return
new
Health
(
_healthStatusIndex
.
lookupBySimpleName
(
json
[
'status'
]));
}
/// Health status
final
HealthStatus
status
;
@override
...
...
packages/flutter_test/lib/src/all_elements.dart
View file @
6f824bce
...
...
@@ -17,7 +17,7 @@ import 'package:flutter/widgets.dart';
/// one, for example the results of calling `where` on this iterable
/// are also cached.
Iterable
<
Element
>
collectAllElementsFrom
(
Element
rootElement
,
{
@required
bool
skipOffstage
@required
bool
skipOffstage
,
})
{
return
new
CachingIterable
<
Element
>(
new
_DepthFirstChildIterator
(
rootElement
,
skipOffstage
));
}
...
...
packages/flutter_test/lib/src/binding.dart
View file @
6f824bce
...
...
@@ -89,6 +89,10 @@ abstract class TestWidgetsFlutterBinding extends BindingBase
// Services binding omitted to avoid dragging in the licenses code.
WidgetsBinding
{
/// Constructor for [TestWidgetsFlutterBinding].
///
/// This constructor overrides the [debugPrint] global hook to point to
/// [debugPrintOverride], which can be overridden by subclasses.
TestWidgetsFlutterBinding
()
{
debugPrint
=
debugPrintOverride
;
}
...
...
packages/flutter_test/lib/src/finders.dart
View file @
6f824bce
...
...
@@ -236,6 +236,9 @@ abstract class Finder {
/// [Offstage] widgets, as well as children of inactive [Route]s.
final
bool
skipOffstage
;
/// Returns all the [Element]s that will be considered by this finder.
///
/// See [collectAllElementsFrom].
@protected
Iterable
<
Element
>
get
allCandidates
{
return
collectAllElementsFrom
(
...
...
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