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
1f4f75bb
Commit
1f4f75bb
authored
Jun 13, 2017
by
Ian Hickson
Committed by
GitHub
Jun 13, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
More documentation. (#10653)
parent
272faba1
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
358 additions
and
52 deletions
+358
-52
analyze-sample-code.dart
dev/bots/analyze-sample-code.dart
+3
-1
animations.dart
packages/flutter/lib/src/animation/animations.dart
+5
-4
dropdown.dart
packages/flutter/lib/src/material/dropdown.dart
+6
-0
fractional_offset.dart
packages/flutter/lib/src/painting/fractional_offset.dart
+6
-0
text_span.dart
packages/flutter/lib/src/painting/text_span.dart
+3
-1
text_style.dart
packages/flutter/lib/src/painting/text_style.dart
+137
-8
box.dart
packages/flutter/lib/src/rendering/box.dart
+70
-12
proxy_box.dart
packages/flutter/lib/src/rendering/proxy_box.dart
+8
-2
animated_cross_fade.dart
packages/flutter/lib/src/widgets/animated_cross_fade.dart
+12
-6
basic.dart
packages/flutter/lib/src/widgets/basic.dart
+21
-6
container.dart
packages/flutter/lib/src/widgets/container.dart
+44
-0
gesture_detector.dart
packages/flutter/lib/src/widgets/gesture_detector.dart
+17
-0
size_changed_layout_notifier.dart
...flutter/lib/src/widgets/size_changed_layout_notifier.dart
+26
-12
No files found.
dev/bots/analyze-sample-code.dart
View file @
1f4f75bb
...
@@ -90,7 +90,7 @@ Future<Null> main() async {
...
@@ -90,7 +90,7 @@ Future<Null> main() async {
block
.
add
(
line
.
substring
(
3
));
block
.
add
(
line
.
substring
(
3
));
}
}
}
else
if
(
inSampleSection
)
{
}
else
if
(
inSampleSection
)
{
if
(!
trimmedLine
.
startsWith
(
kDartDocPrefix
)
||
trimmedLine
.
startsWith
(
'/// ##'
))
{
if
(!
trimmedLine
.
startsWith
(
kDartDocPrefix
)
||
trimmedLine
.
startsWith
(
'/// ##
'
))
{
if
(
inDart
)
if
(
inDart
)
throw
'
${file.path}
:
$lineNumber
: Dart section inexplicably unterminated.'
;
throw
'
${file.path}
:
$lineNumber
: Dart section inexplicably unterminated.'
;
if
(!
foundDart
)
if
(!
foundDart
)
...
@@ -160,6 +160,8 @@ dependencies:
...
@@ -160,6 +160,8 @@ dependencies:
);
);
stderr
.
addStream
(
process
.
stderr
);
stderr
.
addStream
(
process
.
stderr
);
final
List
<
String
>
errors
=
await
process
.
stdout
.
transform
<
String
>(
UTF8
.
decoder
).
transform
<
String
>(
const
LineSplitter
()).
toList
();
final
List
<
String
>
errors
=
await
process
.
stdout
.
transform
<
String
>(
UTF8
.
decoder
).
transform
<
String
>(
const
LineSplitter
()).
toList
();
if
(
errors
.
first
==
'Building flutter tool...'
)
errors
.
removeAt
(
0
);
if
(
errors
.
first
.
startsWith
(
'Running "flutter packages get" in '
))
if
(
errors
.
first
.
startsWith
(
'Running "flutter packages get" in '
))
errors
.
removeAt
(
0
);
errors
.
removeAt
(
0
);
if
(
errors
.
first
.
startsWith
(
'Analyzing '
))
if
(
errors
.
first
.
startsWith
(
'Analyzing '
))
...
...
packages/flutter/lib/src/animation/animations.dart
View file @
1f4f75bb
...
@@ -237,10 +237,11 @@ class ProxyAnimation extends Animation<double>
...
@@ -237,10 +237,11 @@ class ProxyAnimation extends Animation<double>
/// An animation that is the reverse of another animation.
/// An animation that is the reverse of another animation.
///
///
/// If the parent animation is running forward from 0.0 to 1.0, this animation
/// If the parent animation is running forward from 0.0 to 1.0, this animation
/// is running in reverse from 1.0 to 0.0. Notice that using a ReverseAnimation
/// is running in reverse from 1.0 to 0.0.
/// is different from simply using a [Tween] with a begin of 1.0 and an end of
///
/// 0.0 because the tween does not change the status or direction of the
/// Using a [ReverseAnimation] is different from simply using a [Tween] with a
/// animation.
/// begin of 1.0 and an end of 0.0 because the tween does not change the status
/// or direction of the animation.
class
ReverseAnimation
extends
Animation
<
double
>
class
ReverseAnimation
extends
Animation
<
double
>
with
AnimationLazyListenerMixin
,
AnimationLocalStatusListenersMixin
{
with
AnimationLazyListenerMixin
,
AnimationLocalStatusListenersMixin
{
...
...
packages/flutter/lib/src/material/dropdown.dart
View file @
1f4f75bb
...
@@ -398,10 +398,16 @@ class DropdownButtonHideUnderline extends InheritedWidget {
...
@@ -398,10 +398,16 @@ class DropdownButtonHideUnderline extends InheritedWidget {
/// shows the currently selected item as well as an arrow that opens a menu for
/// shows the currently selected item as well as an arrow that opens a menu for
/// selecting another item.
/// selecting another item.
///
///
/// The type `T` is the type of the values the dropdown menu represents. All the
/// entries in a given menu must represent values with consistent types.
/// Typically, an enum is used. Each [DropdownMenuItem] in [items] must be
/// specialized with that same type argument.
///
/// Requires one of its ancestors to be a [Material] widget.
/// Requires one of its ancestors to be a [Material] widget.
///
///
/// See also:
/// See also:
///
///
/// * [DropdownMenuItem], the class used to represent the [items].
/// * [DropdownButtonHideUnderline], which prevents its descendant dropdown buttons
/// * [DropdownButtonHideUnderline], which prevents its descendant dropdown buttons
/// from displaying their underlines.
/// from displaying their underlines.
/// * [RaisedButton], [FlatButton], ordinary buttons that trigger a single action.
/// * [RaisedButton], [FlatButton], ordinary buttons that trigger a single action.
...
...
packages/flutter/lib/src/painting/fractional_offset.dart
View file @
1f4f75bb
...
@@ -16,6 +16,12 @@ import 'basic_types.dart';
...
@@ -16,6 +16,12 @@ import 'basic_types.dart';
///
///
/// `FractionalOffset(0.5, 2.0)` represents a point half way across the [Size],
/// `FractionalOffset(0.5, 2.0)` represents a point half way across the [Size],
/// below the bottom of the rectangle by the height of the [Size].
/// below the bottom of the rectangle by the height of the [Size].
///
/// A variety of widgets use [FractionalOffset] in their configuration, most
/// notably:
///
/// * [Align] positions a child according to a [FractionalOffset].
/// * [FractionalTranslation] moves a child according to a [FractionalOffset].
@immutable
@immutable
class
FractionalOffset
{
class
FractionalOffset
{
/// Creates a fractional offset.
/// Creates a fractional offset.
...
...
packages/flutter/lib/src/painting/text_span.dart
View file @
1f4f75bb
...
@@ -98,7 +98,9 @@ class TextSpan {
...
@@ -98,7 +98,9 @@ class TextSpan {
/// object that manages the [TextSpan] painting is also responsible for
/// object that manages the [TextSpan] painting is also responsible for
/// dispatching events. In the rendering library, that is the
/// dispatching events. In the rendering library, that is the
/// [RenderParagraph] object, which corresponds to the [RichText] widget in
/// [RenderParagraph] object, which corresponds to the [RichText] widget in
/// the widgets layer.
/// the widgets layer; these objects do not bubble events in [TextSpan]s, so a
/// [recognizer] is only effective for events that directly hit the [text] of
/// that [TextSpan], not any of its [children].
///
///
/// [TextSpan] also does not manage the lifetime of the gesture recognizer.
/// [TextSpan] also does not manage the lifetime of the gesture recognizer.
/// The code that owns the [GestureRecognizer] object must call
/// The code that owns the [GestureRecognizer] object must call
...
...
packages/flutter/lib/src/painting/text_style.dart
View file @
1f4f75bb
...
@@ -9,6 +9,127 @@ import 'package:flutter/foundation.dart';
...
@@ -9,6 +9,127 @@ import 'package:flutter/foundation.dart';
import
'basic_types.dart'
;
import
'basic_types.dart'
;
/// An immutable style in which paint text.
/// An immutable style in which paint text.
///
/// ## Sample code
///
/// ### Bold
///
/// Here, a single line of text in a [Text] widget is given a specific style
/// override. The style is mixed with the ambient [DefaultTextStyle] by the
/// [Text] widget.
///
/// ```dart
/// new Text(
/// 'No, we need bold strokes. We need this plan.',
/// style: new TextStyle(fontWeight: FontWeight.bold),
/// )
/// ```
///
/// ### Italics
///
/// As in the previous example, the [Text] widget is given a specific style
/// override which is implicitly mixed with the ambient [DefaultTextStyle].
///
/// ```dart
/// new Text(
/// 'Welcome to the present, we\'re running a real nation.',
/// style: new TextStyle(fontStyle: FontStyle.italic),
/// )
/// ```
///
/// ### Opacity
///
/// Each line here is progressively more opaque. The base color is
/// [Colors.black], and [Color.withOpacity] is used to create a derivative color
/// with the desired opacity. The root [TextSpan] for this [RichText] widget is
/// explicitly given the ambient [DefaultTextStyle], since [RichText] does not
/// do that automatically. The inner [TextStyle] objects are implicitly mixed
/// with the parent [TextSpan]'s [TextSpan.style].
///
/// ```dart
/// new RichText(
/// text: new TextSpan(
/// style: DefaultTextStyle.of(context).style,
/// children: <TextSpan>[
/// new TextSpan(
/// text: 'You don\'t have the votes.\n',
/// style: new TextStyle(color: Colors.black.withOpacity(0.6)),
/// ),
/// new TextSpan(
/// text: 'You don\'t have the votes!\n',
/// style: new TextStyle(color: Colors.black.withOpacity(0.8)),
/// ),
/// new TextSpan(
/// text: 'You\'re gonna need congressional approval and you don\'t have the votes!\n',
/// style: new TextStyle(color: Colors.black.withOpacity(1.0)),
/// ),
/// ],
/// ),
/// )
/// ```
///
/// ### Size
///
/// In this example, the ambient [DefaultTextStyle] is explicitly manipulated to
/// obtain a [TextStyle] that doubles the default font size.
///
/// ```dart
/// new Text(
/// 'These are wise words, enterprising men quote \'em.',
/// style: DefaultTextStyle.of(context).style.apply(fontSizeFactor: 2.0),
/// )
/// ```
///
/// ### Line height
///
/// The [height] property can be used to change the line height. Here, the line
/// height is set to 100 logical pixels, so that the text is very spaced out.
///
/// ```dart
/// new Text(
/// 'Don\'t act surprised, you guys, cuz I wrote \'em!',
/// style: new TextStyle(height: 100.0),
/// )
/// ```
///
/// ### Wavy red underline with black text
///
/// Styles can be combined. In this example, the misspelt word is drawn in black
/// text and underlined with a wavy red line to indicate a spelling error. (The
/// remainder is styled according to the Flutter default text styles, not the
/// ambient [DefaultTextStyle], since no explicit style is given and [RichText]
/// does not automatically use the ambient [DefaultTextStyle].)
///
/// ```dart
/// new RichText(
/// text: new TextSpan(
/// text: 'Don\'t tax the South ',
/// children: <TextSpan>[
/// new TextSpan(
/// text: 'cuz',
/// style: new TextStyle(
/// color: Colors.black,
/// decoration: TextDecoration.underline,
/// decorationColor: Colors.red,
/// decorationStyle: TextDecorationStyle.wavy,
/// ),
/// ),
/// new TextSpan(
/// text: ' we got it made in the shade',
/// ),
/// ],
/// ),
/// )
/// ```
///
/// See also:
///
/// * [Text], the widget for showing text in a single style.
/// * [DefaultTextStyle], the widget that specifies the default text styles for
/// [Text] widgets, configured using a [TextStyle].
/// * [RichText], the widget for showing a paragraph of mix-style text.
/// * [TextSpan], the class that wraps a [TextStyle] for the purposes of
/// passing it to a [RichText].
@immutable
@immutable
class
TextStyle
{
class
TextStyle
{
/// Creates a text style.
/// Creates a text style.
...
@@ -25,10 +146,15 @@ class TextStyle {
...
@@ -25,10 +146,15 @@ class TextStyle {
this
.
height
,
this
.
height
,
this
.
decoration
,
this
.
decoration
,
this
.
decorationColor
,
this
.
decorationColor
,
this
.
decorationStyle
this
.
decorationStyle
,
})
:
assert
(
inherit
!=
null
);
})
:
assert
(
inherit
!=
null
);
/// Whether null values are replaced with their value in an ancestor text style (e.g., in a [TextSpan] tree).
/// Whether null values are replaced with their value in an ancestor text
/// style (e.g., in a [TextSpan] tree).
///
/// If this is false, properties that don't have explicit values will revert
/// to the defaults: white in color, a font size of 10 pixels, in a sans-serif
/// font face.
final
bool
inherit
;
final
bool
inherit
;
/// The color to use when painting the text.
/// The color to use when painting the text.
...
@@ -54,11 +180,13 @@ class TextStyle {
...
@@ -54,11 +180,13 @@ class TextStyle {
/// A negative value can be used to bring the letters closer.
/// A negative value can be used to bring the letters closer.
final
double
letterSpacing
;
final
double
letterSpacing
;
/// The amount of space (in logical pixels) to add at each sequence of white-space (i.e. between each word).
/// The amount of space (in logical pixels) to add at each sequence of
/// A negative value can be used to bring the words closer.
/// white-space (i.e. between each word). A negative value can be used to
/// bring the words closer.
final
double
wordSpacing
;
final
double
wordSpacing
;
/// The common baseline that should be aligned between this text span and its parent text span, or, for the root text spans, with the line box.
/// The common baseline that should be aligned between this text span and its
/// parent text span, or, for the root text spans, with the line box.
final
TextBaseline
textBaseline
;
final
TextBaseline
textBaseline
;
/// The height of this text span, as a multiple of the font size.
/// The height of this text span, as a multiple of the font size.
...
@@ -77,7 +205,8 @@ class TextStyle {
...
@@ -77,7 +205,8 @@ class TextStyle {
/// The style in which to paint the text decorations (e.g., dashed).
/// The style in which to paint the text decorations (e.g., dashed).
final
TextDecorationStyle
decorationStyle
;
final
TextDecorationStyle
decorationStyle
;
/// Creates a copy of this text style but with the given fields replaced with the new values.
/// Creates a copy of this text style but with the given fields replaced with
/// the new values.
TextStyle
copyWith
({
TextStyle
copyWith
({
Color
color
,
Color
color
,
String
fontFamily
,
String
fontFamily
,
...
@@ -90,7 +219,7 @@ class TextStyle {
...
@@ -90,7 +219,7 @@ class TextStyle {
double
height
,
double
height
,
TextDecoration
decoration
,
TextDecoration
decoration
,
Color
decorationColor
,
Color
decorationColor
,
TextDecorationStyle
decorationStyle
TextDecorationStyle
decorationStyle
,
})
{
})
{
return
new
TextStyle
(
return
new
TextStyle
(
inherit:
inherit
,
inherit:
inherit
,
...
@@ -105,7 +234,7 @@ class TextStyle {
...
@@ -105,7 +234,7 @@ class TextStyle {
height:
height
??
this
.
height
,
height:
height
??
this
.
height
,
decoration:
decoration
??
this
.
decoration
,
decoration:
decoration
??
this
.
decoration
,
decorationColor:
decorationColor
??
this
.
decorationColor
,
decorationColor:
decorationColor
??
this
.
decorationColor
,
decorationStyle:
decorationStyle
??
this
.
decorationStyle
decorationStyle:
decorationStyle
??
this
.
decorationStyle
,
);
);
}
}
...
...
packages/flutter/lib/src/rendering/box.dart
View file @
1f4f75bb
...
@@ -23,18 +23,63 @@ class _DebugSize extends Size {
...
@@ -23,18 +23,63 @@ class _DebugSize extends Size {
/// Immutable layout constraints for [RenderBox] layout.
/// Immutable layout constraints for [RenderBox] layout.
///
///
/// A
size
respects a [BoxConstraints] if, and only if, all of the following
/// A
[Size]
respects a [BoxConstraints] if, and only if, all of the following
/// relations hold:
/// relations hold:
///
///
/// *
`minWidth <= size.width <= maxWidth`
/// *
[minWidth] <= [Size.width] <= [maxWidth]
/// *
`minHeight <= size.height <= maxHeight`
/// *
[minHeight] <= [Size.height] <= [maxHeight]
///
///
/// The constraints themselves must satisfy these relations:
/// The constraints themselves must satisfy these relations:
///
///
/// *
`0.0 <= minWidth <= maxWidth <= double.INFINITY`
/// *
0.0 <= [minWidth] <= [maxWidth] <= [double.INFINITY]
/// *
`0.0 <= minHeight <= maxHeight <= double.INFINITY`
/// *
0.0 <= [minHeight] <= [maxHeight] <= [double.INFINITY]
///
///
/// [double.INFINITY] is a legal value for each constraint.
/// [double.INFINITY] is a legal value for each constraint.
///
/// ## The box layout model
///
/// Render objects in the Flutter framework are laid out by a one-pass layout
/// model which walks down the render tree passing constraints, then walks back
/// up the render tree passing concrete geometry.
///
/// For boxes, the constraints are [BoxConstraints], which, as described herein,
/// consist of four numbers: a minimum width [minWidth], a maximum width
/// [maxWidth], a minimum height [minHeight], and a maximum height [maxHeight].
///
/// The geometry for boxes consists of a [Size], which must satisfy the
/// constraints described above.
///
/// Each [RenderBox] (the objects that provide the layout models for box
/// widgets) receives [BoxConstraints] from its parent, then lays out each of
/// its children, then picks a [Size] that satisfies the [BoxConstraints].
///
/// Render objects position their children independently of laying them out.
/// Frequently, the parent will use the children's sizes to determine their
/// position. A child does not know its position and will not necessarily be
/// laid out again, or repainted, if its position changes.
///
/// ## Terminology
///
/// When the minimum constraints and the maximum constraint in an axis are the
/// same, that axis is _tightly_ constrained. See: [new
/// BoxConstraints.tightFor], [new BoxConstraints.tightForFinite], [tighten],
/// [hasTightWidth], [hasTightHeight], [isTight].
///
/// An axis with a minimum constraint of 0.0 is _loose_ (regardless of the
/// maximum constraint; if it is also 0.0, then the axis is simultaneously tight
/// and loose!). See: [new BoxConstraints.loose], [loosen].
///
/// An axis whose maximum constraint is not infinite is _bounded_. See:
/// [hasBoundedWidth], [hasBoundedHeight].
///
/// An axis whose maximum constraint is infinite is _unbounded_. An axis is
/// _expanding_ if it is tightly infinite (its minimum and maximum constraints
/// are both infinite). See: [new BoxConstraints.expand].
///
/// A size is _constrained_ when it satisfies a [BoxConstraints] description.
/// See: [constrain], [constrainWidth], [constrainHeight],
/// [constrainDimensions], [constrainSizeAndAttemptToPreserveAspectRatio],
/// [isSatisfiedBy].
class
BoxConstraints
extends
Constraints
{
class
BoxConstraints
extends
Constraints
{
/// Creates box constraints with the given constraints.
/// Creates box constraints with the given constraints.
const
BoxConstraints
({
const
BoxConstraints
({
...
@@ -68,6 +113,12 @@ class BoxConstraints extends Constraints {
...
@@ -68,6 +113,12 @@ class BoxConstraints extends Constraints {
maxHeight
=
size
.
height
;
maxHeight
=
size
.
height
;
/// Creates box constraints that require the given width or height.
/// Creates box constraints that require the given width or height.
///
/// See also:
///
/// * [new BoxConstraints.tightForFinite], which is similar but instead of
/// being tight if the value is non-null, is tight if the value is not
/// infinite.
const
BoxConstraints
.
tightFor
({
const
BoxConstraints
.
tightFor
({
double
width
,
double
width
,
double
height
double
height
...
@@ -76,7 +127,13 @@ class BoxConstraints extends Constraints {
...
@@ -76,7 +127,13 @@ class BoxConstraints extends Constraints {
minHeight
=
height
!=
null
?
height
:
0.0
,
minHeight
=
height
!=
null
?
height
:
0.0
,
maxHeight
=
height
!=
null
?
height
:
double
.
INFINITY
;
maxHeight
=
height
!=
null
?
height
:
double
.
INFINITY
;
/// Creates box constraints that require the given width or height, except if they are infinite.
/// Creates box constraints that require the given width or height, except if
/// they are infinite.
///
/// See also:
///
/// * [new BoxConstraints.tightFor], which is similar but instead of being
/// tight if the value is not infinite, is tight if the value is non-null.
const
BoxConstraints
.
tightForFinite
({
const
BoxConstraints
.
tightForFinite
({
double
width:
double
.
INFINITY
,
double
width:
double
.
INFINITY
,
double
height:
double
.
INFINITY
double
height:
double
.
INFINITY
...
@@ -230,10 +287,10 @@ class BoxConstraints extends Constraints {
...
@@ -230,10 +287,10 @@ class BoxConstraints extends Constraints {
/// Returns a size that attempts to meet the following conditions, in order:
/// Returns a size that attempts to meet the following conditions, in order:
///
///
///
-
The size must satisfy these constraints.
///
*
The size must satisfy these constraints.
///
-
The aspect ratio of the returned size matches the aspect ratio of the
///
*
The aspect ratio of the returned size matches the aspect ratio of the
/// given size.
/// given size.
///
-
The returned size as big as possible while still being equal to or
///
*
The returned size as big as possible while still being equal to or
/// smaller than the given size.
/// smaller than the given size.
Size
constrainSizeAndAttemptToPreserveAspectRatio
(
Size
size
)
{
Size
constrainSizeAndAttemptToPreserveAspectRatio
(
Size
size
)
{
if
(
isTight
)
{
if
(
isTight
)
{
...
@@ -1698,9 +1755,10 @@ abstract class RenderBox extends RenderObject {
...
@@ -1698,9 +1755,10 @@ abstract class RenderBox extends RenderObject {
/// Determines the set of render objects located at the given position.
/// Determines the set of render objects located at the given position.
///
///
/// Returns true if the given point is contained in this render object or one
/// Returns true, and adds any render objects that contain the point to the
/// of its descendants. Adds any render objects that contain the point to the
/// given hit test result, if this render object or one of its descendants
/// given hit test result.
/// absorbs the hit (preventing objects below this one from being hit).
/// Returns false if the hit can continue to other objects below this one.
///
///
/// The caller is responsible for transforming [position] into the local
/// The caller is responsible for transforming [position] into the local
/// coordinate space of the callee. The callee is responsible for checking
/// coordinate space of the callee. The callee is responsible for checking
...
...
packages/flutter/lib/src/rendering/proxy_box.dart
View file @
1f4f75bb
...
@@ -544,7 +544,10 @@ class RenderAspectRatio extends RenderProxyBox {
...
@@ -544,7 +544,10 @@ class RenderAspectRatio extends RenderProxyBox {
/// you would like a child that would otherwise attempt to expand infinitely to
/// you would like a child that would otherwise attempt to expand infinitely to
/// instead size itself to a more reasonable width.
/// instead size itself to a more reasonable width.
///
///
/// This class is relatively expensive. Avoid using it where possible.
/// This class is relatively expensive, because it adds a speculative layout
/// pass before the final layout phase. Avoid using it where possible. In the
/// worst case, this render object can result in a layout that is O(N²) in the
/// depth of the tree.
class
RenderIntrinsicWidth
extends
RenderProxyBox
{
class
RenderIntrinsicWidth
extends
RenderProxyBox
{
/// Creates a render object that sizes itself to its child's intrinsic width.
/// Creates a render object that sizes itself to its child's intrinsic width.
RenderIntrinsicWidth
({
RenderIntrinsicWidth
({
...
@@ -650,7 +653,10 @@ class RenderIntrinsicWidth extends RenderProxyBox {
...
@@ -650,7 +653,10 @@ class RenderIntrinsicWidth extends RenderProxyBox {
/// you would like a child that would otherwise attempt to expand infinitely to
/// you would like a child that would otherwise attempt to expand infinitely to
/// instead size itself to a more reasonable height.
/// instead size itself to a more reasonable height.
///
///
/// This class is relatively expensive. Avoid using it where possible.
/// This class is relatively expensive, because it adds a speculative layout
/// pass before the final layout phase. Avoid using it where possible. In the
/// worst case, this render object can result in a layout that is O(N²) in the
/// depth of the tree.
class
RenderIntrinsicHeight
extends
RenderProxyBox
{
class
RenderIntrinsicHeight
extends
RenderProxyBox
{
/// Creates a render object that sizes itself to its child's intrinsic height.
/// Creates a render object that sizes itself to its child's intrinsic height.
RenderIntrinsicHeight
({
RenderIntrinsicHeight
({
...
...
packages/flutter/lib/src/widgets/animated_cross_fade.dart
View file @
1f4f75bb
...
@@ -29,21 +29,27 @@ enum CrossFadeState {
...
@@ -29,21 +29,27 @@ enum CrossFadeState {
///
///
/// The animation is controlled through the [crossFadeState] parameter.
/// The animation is controlled through the [crossFadeState] parameter.
/// [firstCurve] and [secondCurve] represent the opacity curves of the two
/// [firstCurve] and [secondCurve] represent the opacity curves of the two
/// children.
Note that [firstCurve] is inverted, i.e. it fades out when
/// children.
The [firstCurve] is inverted, i.e. it fades out when providing a
///
providing a growing curve like [Curves.linear]. [sizeCurve] is the curve
///
growing curve like [Curves.linear]. The [sizeCurve] is the curve used to
///
used to animated between the size of the fading out child and the size of
///
animated between the size of the fading out child and the size of the fading
///
the fading
in child.
/// in child.
///
///
/// This widget is intended to be used to fade a pair of widgets with the same
/// This widget is intended to be used to fade a pair of widgets with the same
/// width. In the case where the two children have different heights, the
/// width. In the case where the two children have different heights, the
/// animation crops overflowing children during the animation by aligning their
/// animation crops overflowing children during the animation by aligning their
/// top edge, which means that the bottom will be clipped.
/// top edge, which means that the bottom will be clipped.
///
///
/// The animation is automatically triggered when an existing
/// [AnimatedCrossFade] is rebuilt with a different value for the
/// [crossFadeState] property.
///
/// ## Sample code
/// ## Sample code
///
///
/// This code fades between two representations of the Flutter logo. It depends
/// 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,
/// on a boolean field `_on`; when `_on` is true, the first logo is shown,
/// otherwise the second logo is shown.
/// otherwise the second logo is shown. When the field changes state, the
/// [AnimatedCrossFade] widget cross-fades between the two forms of the logo
/// over three seconds.
///
///
/// ```dart
/// ```dart
/// new AnimatedCrossFade(
/// new AnimatedCrossFade(
...
...
packages/flutter/lib/src/widgets/basic.dart
View file @
1f4f75bb
...
@@ -330,7 +330,7 @@ class CustomPaint extends SingleChildRenderObjectWidget {
...
@@ -330,7 +330,7 @@ class CustomPaint extends SingleChildRenderObjectWidget {
/// custom [clipper].
/// custom [clipper].
///
///
/// [ClipRect] is commonly used with these widgets, which commonly paint outside
/// [ClipRect] is commonly used with these widgets, which commonly paint outside
/// their bounds
.
/// their bounds
:
///
///
/// * [CustomPaint]
/// * [CustomPaint]
/// * [CustomSingleChildLayout]
/// * [CustomSingleChildLayout]
...
@@ -342,8 +342,8 @@ class CustomPaint extends SingleChildRenderObjectWidget {
...
@@ -342,8 +342,8 @@ class CustomPaint extends SingleChildRenderObjectWidget {
///
///
/// ## Sample code
/// ## Sample code
///
///
/// For example,
use a clip to show the top half of an [Image], you can use a
/// For example,
by combining a [ClipRect] with an [Align], one can show just
///
[ClipRect] combined with an [Align
]:
///
the top half of an [Image
]:
///
///
/// ```dart
/// ```dart
/// new ClipRect(
/// new ClipRect(
...
@@ -1693,7 +1693,10 @@ class AspectRatio extends SingleChildRenderObjectWidget {
...
@@ -1693,7 +1693,10 @@ class AspectRatio extends SingleChildRenderObjectWidget {
/// you would like a child that would otherwise attempt to expand infinitely to
/// you would like a child that would otherwise attempt to expand infinitely to
/// instead size itself to a more reasonable width.
/// instead size itself to a more reasonable width.
///
///
/// This class is relatively expensive. Avoid using it where possible.
/// This class is relatively expensive, because it adds a speculative layout
/// pass before the final layout phase. Avoid using it where possible. In the
/// worst case, this widget can result in a layout that is O(N²) in the depth of
/// the tree.
class
IntrinsicWidth
extends
SingleChildRenderObjectWidget
{
class
IntrinsicWidth
extends
SingleChildRenderObjectWidget
{
/// Creates a widget that sizes its child to the child's intrinsic width.
/// Creates a widget that sizes its child to the child's intrinsic width.
///
///
...
@@ -1724,7 +1727,10 @@ class IntrinsicWidth extends SingleChildRenderObjectWidget {
...
@@ -1724,7 +1727,10 @@ class IntrinsicWidth extends SingleChildRenderObjectWidget {
/// you would like a child that would otherwise attempt to expand infinitely to
/// you would like a child that would otherwise attempt to expand infinitely to
/// instead size itself to a more reasonable height.
/// instead size itself to a more reasonable height.
///
///
/// This class is relatively expensive. Avoid using it where possible.
/// This class is relatively expensive, because it adds a speculative layout
/// pass before the final layout phase. Avoid using it where possible. In the
/// worst case, this widget can result in a layout that is O(N²) in the depth of
/// the tree.
class
IntrinsicHeight
extends
SingleChildRenderObjectWidget
{
class
IntrinsicHeight
extends
SingleChildRenderObjectWidget
{
/// Creates a widget that sizes its child to the child's intrinsic height.
/// Creates a widget that sizes its child to the child's intrinsic height.
///
///
...
@@ -2236,6 +2242,7 @@ class Positioned extends ParentDataWidget<Stack> {
...
@@ -2236,6 +2242,7 @@ class Positioned extends ParentDataWidget<Stack> {
/// ## Layout algorithm
/// ## Layout algorithm
///
///
/// _This section describes how a [Flex] is rendered by the framework._
/// _This section describes how a [Flex] is rendered by the framework._
/// _See [BoxConstraints] for an introduction to box layout models._
///
///
/// Layout for a [Flex] proceeds in six steps:
/// Layout for a [Flex] proceeds in six steps:
///
///
...
@@ -2459,6 +2466,7 @@ class Flex extends MultiChildRenderObjectWidget {
...
@@ -2459,6 +2466,7 @@ class Flex extends MultiChildRenderObjectWidget {
/// ## Layout algorithm
/// ## Layout algorithm
///
///
/// _This section describes how a [Row] is rendered by the framework._
/// _This section describes how a [Row] is rendered by the framework._
/// _See [BoxConstraints] for an introduction to box layout models._
///
///
/// Layout for a [Row] proceeds in six steps:
/// Layout for a [Row] proceeds in six steps:
///
///
...
@@ -2583,6 +2591,7 @@ class Row extends Flex {
...
@@ -2583,6 +2591,7 @@ class Row extends Flex {
/// ## Layout algorithm
/// ## Layout algorithm
///
///
/// _This section describes how a [Column] is rendered by the framework._
/// _This section describes how a [Column] is rendered by the framework._
/// _See [BoxConstraints] for an introduction to box layout models._
///
///
/// Layout for a [Column] proceeds in six steps:
/// Layout for a [Column] proceeds in six steps:
///
///
...
@@ -3000,7 +3009,8 @@ class Flow extends MultiChildRenderObjectWidget {
...
@@ -3000,7 +3009,8 @@ class Flow extends MultiChildRenderObjectWidget {
///
///
/// Text displayed in a [RichText] widget must be explicitly styled. When
/// Text displayed in a [RichText] widget must be explicitly styled. When
/// picking which style to use, consider using [DefaultTextStyle.of] the current
/// picking which style to use, consider using [DefaultTextStyle.of] the current
/// [BuildContext] to provide defaults.
/// [BuildContext] to provide defaults. For more details on how to style text in
/// a [RichText] widget, see the documentation for [TextStyle].
///
///
/// When all the text uses the same style, consider using the [Text] widget,
/// When all the text uses the same style, consider using the [Text] widget,
/// which is less verbose and integrates with [DefaultTextStyle] for default
/// which is less verbose and integrates with [DefaultTextStyle] for default
...
@@ -3023,6 +3033,7 @@ class Flow extends MultiChildRenderObjectWidget {
...
@@ -3023,6 +3033,7 @@ class Flow extends MultiChildRenderObjectWidget {
///
///
/// See also:
/// See also:
///
///
/// * [TextStyle], which discusses how to style text.
/// * [TextSpan], which is used to describe the text in a paragraph.
/// * [TextSpan], which is used to describe the text in a paragraph.
/// * [Text], which automatically applies the ambient styles described by a
/// * [Text], which automatically applies the ambient styles described by a
/// [DefaultTextStyle] to a single string.
/// [DefaultTextStyle] to a single string.
...
@@ -3323,6 +3334,10 @@ class WidgetToRenderBoxAdapter extends LeafRenderObjectWidget {
...
@@ -3323,6 +3334,10 @@ class WidgetToRenderBoxAdapter extends LeafRenderObjectWidget {
/// Rather than listening for raw pointer events, consider listening for
/// Rather than listening for raw pointer events, consider listening for
/// higher-level gestures using [GestureDetector].
/// higher-level gestures using [GestureDetector].
///
///
/// ## Layout behavior
///
/// _See [BoxConstraints] for an introduction to box layout models._
///
/// If it has a child, this widget defers to the child for sizing behavior. If
/// If it has a child, this widget defers to the child for sizing behavior. If
/// it does not have a child, it grows to fit the parent instead.
/// it does not have a child, it grows to fit the parent instead.
class
Listener
extends
SingleChildRenderObjectWidget
{
class
Listener
extends
SingleChildRenderObjectWidget
{
...
...
packages/flutter/lib/src/widgets/container.dart
View file @
1f4f75bb
...
@@ -124,6 +124,50 @@ class DecoratedBox extends SingleChildRenderObjectWidget {
...
@@ -124,6 +124,50 @@ class DecoratedBox extends SingleChildRenderObjectWidget {
/// `width`, `height`, and [constraints] arguments to the constructor override
/// `width`, `height`, and [constraints] arguments to the constructor override
/// this.
/// this.
///
///
/// ## Layout behavior
///
/// _See [BoxConstraints] for an introduction to box layout models._
///
/// Since [Container] combines a number of other widgets each with their own
/// layout behavior, [Container]'s layout behaviour is somewhat complicated.
///
/// tl;dr: [Container] tries, in order: to honor [alignment], to size itself to
/// the [child], to honor the `width`, `height`, and [constraints], to expand to
/// fit the parent, to be as small as possible.
///
/// More specifically:
///
/// If the widget has no child, no `height`, no `width`, no [constraints],
/// and the parent provides unbounded constraints, then [Container] tries to
/// size as small as possible.
///
/// If the widget has no child and no [alignment], but a `height`, `width`, or
/// [constraints] are provided, then the [Container] tries to be as small as
/// possible given the combination of those constraints and the parent's
/// constraints.
///
/// If the widget has no child, no `height`, no `width`, no [constraints], and
/// no [alignment], but the parent provides bounded constraints, then
/// [Container] expands to fit the constraints provided by the parent.
///
/// If the widget has an [alignment], and the parent provides unbounded
/// constraints, then the [Container] tries to size itself around the child.
///
/// If the widget has an [alignment], and the parent provides bounded
/// constraints, then the [Container] tries to expand to fit the parent, and
/// then positions the child within itself as per the [alignment].
///
/// Otherwise, the widget has a [child] but no `height`, no `width`, no
/// [constraints], and no [alignment], and the [Container] passes the
/// constraints from the parent to the child and sizes itself to match the
/// child.
///
/// The [margin] and [padding] properties also affect the layout, as described
/// in the documentation for those properties. (Their effects merely augment the
/// rules described above.) The [decoration] can implicitly increase the
/// [padding] (e.g. borders in a [BoxDecoration] contribute to the [padding]);
/// see [Decoration.padding].
///
/// ## Sample code
/// ## Sample code
///
///
/// This example shows a 48x48 green square (placed inside a [Center] widget in
/// This example shows a 48x48 green square (placed inside a [Center] widget in
...
...
packages/flutter/lib/src/widgets/gesture_detector.dart
View file @
1f4f75bb
...
@@ -104,6 +104,23 @@ class GestureRecognizerFactoryWithHandlers<T extends GestureRecognizer> extends
...
@@ -104,6 +104,23 @@ class GestureRecognizerFactoryWithHandlers<T extends GestureRecognizer> extends
/// Material design applications typically react to touches with ink splash
/// Material design applications typically react to touches with ink splash
/// effects. The [InkWell] class implements this effect and can be used in place
/// effects. The [InkWell] class implements this effect and can be used in place
/// of a [GestureDetector] for handling taps.
/// of a [GestureDetector] for handling taps.
///
/// ## Sample code
///
/// This example makes a rectangle react to being tapped by setting the
/// `_lights` field:
///
/// ```dart
/// new GestureDetector(
/// onTap: () {
/// setState(() { _lights = true; });
/// },
/// child: new Container(
/// color: Colors.yellow,
/// child: new Text('TURN LIGHTS ON'),
/// ),
/// )
/// ```
class
GestureDetector
extends
StatelessWidget
{
class
GestureDetector
extends
StatelessWidget
{
/// Creates a widget that detects gestures.
/// Creates a widget that detects gestures.
///
///
...
...
packages/flutter/lib/src/widgets/size_changed_layout_notifier.dart
View file @
1f4f75bb
...
@@ -10,15 +10,15 @@ import 'package:flutter/widgets.dart';
...
@@ -10,15 +10,15 @@ import 'package:flutter/widgets.dart';
/// this notification has changed, and that therefore any assumptions about that
/// this notification has changed, and that therefore any assumptions about that
/// layout are no longer valid.
/// layout are no longer valid.
///
///
/// For example, sent by
[SizeChangedLayoutNotifier] whenever
/// For example, sent by
the [SizeChangedLayoutNotifier] widget whenever that
///
[SizeChangedLayoutNotifier]
changes size.
///
widget
changes size.
///
///
/// This notification
for triggering repaints, but if you use this notification
/// This notification
can be used for triggering repaints, but if you use this
///
to trigger rebuilds or relayouts, you'll create a backwards dependency in
///
notification to trigger rebuilds or relayouts, you'll create a backwards
///
the frame pipeline because [SizeChangedLayoutNotification]s are generated
///
dependency in the frame pipeline because [SizeChangedLayoutNotification]s
///
during layout, which is after the build phase and in the middle of
the
///
are generated during layout, which is after the build phase and in
the
///
layout phase. This backwards dependency can lead to visual corruption or
///
middle of the layout phase. This backwards dependency can lead to visual
/// lags.
///
corruption or
lags.
///
///
/// See [LayoutChangedNotification] for additional discussion of layout
/// See [LayoutChangedNotification] for additional discussion of layout
/// notifications such as this one.
/// notifications such as this one.
...
@@ -26,16 +26,28 @@ import 'package:flutter/widgets.dart';
...
@@ -26,16 +26,28 @@ import 'package:flutter/widgets.dart';
/// See also:
/// See also:
///
///
/// * [SizeChangedLayoutNotifier], which sends this notification.
/// * [SizeChangedLayoutNotifier], which sends this notification.
/// * [LayoutChangedNotification], of which this is a subclass.
class
SizeChangedLayoutNotification
extends
LayoutChangedNotification
{
}
class
SizeChangedLayoutNotification
extends
LayoutChangedNotification
{
}
/// A widget that automatically dispatches a [SizeChangedLayoutNotification]
/// A widget that automatically dispatches a [SizeChangedLayoutNotification]
/// when the layout of its child changes.
/// when the layout dimensions of its child change.
///
/// Useful especially when having some complex, layout-changing animation within
/// [Material] that is also interactive.
///
///
/// The notification is not sent for the initial layout (since the size doesn't
/// The notification is not sent for the initial layout (since the size doesn't
/// change in that case, it's just established).
/// change in that case, it's just established).
///
/// To listen for the notification dispatched by this widget, use a
/// [NotificationListener<SizeChangedLayoutNotification>].
///
/// The [Material] class listens for [LayoutChangedNotification]s, including
/// [SizeChangedLayoutNotification]s, to repaint [InkResponse] and [InkWell] ink
/// effects. When a widget is likely to change size, wrapping it in a
/// [SizeChangedLayoutNotifier] will cause the ink effects to correctly repaint
/// when the child changes size.
///
/// See also:
///
/// * [Notification], the base class for notifications that bubble through the
/// widget tree.
class
SizeChangedLayoutNotifier
extends
SingleChildRenderObjectWidget
{
class
SizeChangedLayoutNotifier
extends
SingleChildRenderObjectWidget
{
/// Creates a [SizeChangedLayoutNotifier] that dispatches layout changed
/// Creates a [SizeChangedLayoutNotifier] that dispatches layout changed
/// notifications when [child] changes layout size.
/// notifications when [child] changes layout size.
...
@@ -73,6 +85,8 @@ class _RenderSizeChangedWithCallback extends RenderProxyBox {
...
@@ -73,6 +85,8 @@ class _RenderSizeChangedWithCallback extends RenderProxyBox {
@override
@override
void
performLayout
()
{
void
performLayout
()
{
super
.
performLayout
();
super
.
performLayout
();
// Don't send the initial notification, or this will be SizeObserver all
// over again!
if
(
_oldSize
!=
null
&&
size
!=
_oldSize
)
if
(
_oldSize
!=
null
&&
size
!=
_oldSize
)
onLayoutChangedCallback
();
onLayoutChangedCallback
();
_oldSize
=
size
;
_oldSize
=
size
;
...
...
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