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
f87c5102
Unverified
Commit
f87c5102
authored
Nov 27, 2019
by
Ian Hickson
Committed by
GitHub
Nov 27, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add more documentation around layers. (#45648)
parent
59ca523b
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
137 additions
and
71 deletions
+137
-71
binding.dart
packages/flutter/lib/src/rendering/binding.dart
+5
-5
layer.dart
packages/flutter/lib/src/rendering/layer.dart
+18
-1
object.dart
packages/flutter/lib/src/rendering/object.dart
+108
-64
proxy_box.dart
packages/flutter/lib/src/rendering/proxy_box.dart
+3
-0
binding.dart
packages/flutter/lib/src/widgets/binding.dart
+3
-1
No files found.
packages/flutter/lib/src/rendering/binding.dart
View file @
f87c5102
...
@@ -182,11 +182,12 @@ mixin RendererBinding on BindingBase, ServicesBinding, SchedulerBinding, Gesture
...
@@ -182,11 +182,12 @@ mixin RendererBinding on BindingBase, ServicesBinding, SchedulerBinding, Gesture
@protected
@protected
void
handleTextScaleFactorChanged
()
{
}
void
handleTextScaleFactorChanged
()
{
}
/// {@template on_platform_brightness_change}
/// Called when the platform brightness changes.
/// Called when the platform brightness changes.
///
///
/// The current platform brightness can be queried either from a Flutter
/// The current platform brightness can be queried from a Flutter binding or
/// binding, or from a [MediaQuery] widget.
/// from a [MediaQuery] widget. The latter is preferred from widgets because
/// it causes the widget to be automatically rebuilt when the brightness
/// changes.
///
///
/// {@tool sample}
/// {@tool sample}
/// Querying [Window.platformBrightness].
/// Querying [Window.platformBrightness].
...
@@ -197,7 +198,7 @@ mixin RendererBinding on BindingBase, ServicesBinding, SchedulerBinding, Gesture
...
@@ -197,7 +198,7 @@ mixin RendererBinding on BindingBase, ServicesBinding, SchedulerBinding, Gesture
/// {@end-tool}
/// {@end-tool}
///
///
/// {@tool sample}
/// {@tool sample}
/// Querying [MediaQuery] directly.
/// Querying [MediaQuery] directly.
Preferred.
///
///
/// ```dart
/// ```dart
/// final Brightness brightness = MediaQuery.platformBrightnessOf(context);
/// final Brightness brightness = MediaQuery.platformBrightnessOf(context);
...
@@ -214,7 +215,6 @@ mixin RendererBinding on BindingBase, ServicesBinding, SchedulerBinding, Gesture
...
@@ -214,7 +215,6 @@ mixin RendererBinding on BindingBase, ServicesBinding, SchedulerBinding, Gesture
/// {@end-tool}
/// {@end-tool}
///
///
/// See [Window.onPlatformBrightnessChanged].
/// See [Window.onPlatformBrightnessChanged].
/// {@endtemplate}
@protected
@protected
void
handlePlatformBrightnessChanged
()
{
}
void
handlePlatformBrightnessChanged
()
{
}
...
...
packages/flutter/lib/src/rendering/layer.dart
View file @
f87c5102
...
@@ -1673,6 +1673,11 @@ class OpacityLayer extends ContainerLayer {
...
@@ -1673,6 +1673,11 @@ class OpacityLayer extends ContainerLayer {
}
}
/// A composited layer that applies a shader to its children.
/// A composited layer that applies a shader to its children.
///
/// The shader is only applied inside the given [maskRect]. The shader itself
/// uses the top left of the [maskRect] as its origin.
///
/// The [maskRect] does not affect the positions of any child layers.
class
ShaderMaskLayer
extends
ContainerLayer
{
class
ShaderMaskLayer
extends
ContainerLayer
{
/// Creates a shader mask layer.
/// Creates a shader mask layer.
///
///
...
@@ -1688,8 +1693,16 @@ class ShaderMaskLayer extends ContainerLayer {
...
@@ -1688,8 +1693,16 @@ class ShaderMaskLayer extends ContainerLayer {
/// The shader to apply to the children.
/// The shader to apply to the children.
///
///
/// The origin of the shader (e.g. of the coordinate system used by the `from`
/// and `to` arguments to [ui.Gradient.linear]) is at the top left of the
/// [maskRect].
///
/// The scene must be explicitly recomposited after this property is changed
/// The scene must be explicitly recomposited after this property is changed
/// (as described at [Layer]).
/// (as described at [Layer]).
///
/// See also:
///
/// * [ui.Gradient] and [ui.ImageShader], two shader types that can be used.
Shader
get
shader
=>
_shader
;
Shader
get
shader
=>
_shader
;
Shader
_shader
;
Shader
_shader
;
set
shader
(
Shader
value
)
{
set
shader
(
Shader
value
)
{
...
@@ -1699,7 +1712,10 @@ class ShaderMaskLayer extends ContainerLayer {
...
@@ -1699,7 +1712,10 @@ class ShaderMaskLayer extends ContainerLayer {
}
}
}
}
/// The size of the shader.
/// The position and size of the shader.
///
/// The [shader] is only rendered inside this rectangle, using the top left of
/// the rectangle as its origin.
///
///
/// The scene must be explicitly recomposited after this property is changed
/// The scene must be explicitly recomposited after this property is changed
/// (as described at [Layer]).
/// (as described at [Layer]).
...
@@ -1730,6 +1746,7 @@ class ShaderMaskLayer extends ContainerLayer {
...
@@ -1730,6 +1746,7 @@ class ShaderMaskLayer extends ContainerLayer {
assert
(
shader
!=
null
);
assert
(
shader
!=
null
);
assert
(
maskRect
!=
null
);
assert
(
maskRect
!=
null
);
assert
(
blendMode
!=
null
);
assert
(
blendMode
!=
null
);
assert
(
layerOffset
!=
null
);
final
Rect
shiftedMaskRect
=
layerOffset
==
Offset
.
zero
?
maskRect
:
maskRect
.
shift
(
layerOffset
);
final
Rect
shiftedMaskRect
=
layerOffset
==
Offset
.
zero
?
maskRect
:
maskRect
.
shift
(
layerOffset
);
engineLayer
=
builder
.
pushShaderMask
(
shader
,
shiftedMaskRect
,
blendMode
,
oldLayer:
_engineLayer
);
engineLayer
=
builder
.
pushShaderMask
(
shader
,
shiftedMaskRect
,
blendMode
,
oldLayer:
_engineLayer
);
addChildrenToScene
(
builder
,
layerOffset
);
addChildrenToScene
(
builder
,
layerOffset
);
...
...
packages/flutter/lib/src/rendering/object.dart
View file @
f87c5102
...
@@ -344,8 +344,8 @@ class PaintingContext extends ClipContext {
...
@@ -344,8 +344,8 @@ class PaintingContext extends ClipContext {
///
///
/// See also:
/// See also:
///
///
/// * [pushLayer], for adding a layer and
using its canvas to paint with that
/// * [pushLayer], for adding a layer and
painting further contents within
///
layer
.
///
it
.
void
addLayer
(
Layer
layer
)
{
void
addLayer
(
Layer
layer
)
{
stopRecordingIfNeeded
();
stopRecordingIfNeeded
();
appendLayer
(
layer
);
appendLayer
(
layer
);
...
@@ -360,17 +360,24 @@ class PaintingContext extends ClipContext {
...
@@ -360,17 +360,24 @@ class PaintingContext extends ClipContext {
/// object, rather than reusing an existing layer, satisfies that
/// object, rather than reusing an existing layer, satisfies that
/// requirement.)
/// requirement.)
///
///
/// The `offset` is the offset to pass to the `painter`.
/// {@template flutter.rendering.object.pushLayer.offset}
/// The `offset` is the offset to pass to the `painter`. In particular, it is
/// not an offset applied to the layer itself. Layers conceptually by default
/// have no position or size, though they can transform their contents. For
/// example, an [OffsetLayer] applies an offset to its children.
/// {@endtemplate}
///
///
/// If the `childPaintBounds` are not specified then the current layer's paint
/// If the `childPaintBounds` are not specified then the current layer's paint
/// bounds are used. This is appropriate if the child layer does not apply any
/// bounds are used. This is appropriate if the child layer does not apply any
/// transformation or clipping to its contents. The `childPaintBounds`, if
/// transformation or clipping to its contents. The `childPaintBounds`, if
/// specified, must be in the coordinate system of the new layer, and should
/// specified, must be in the coordinate system of the new layer (i.e. as seen
/// not go outside the current layer's paint bounds.
/// by its children after it applies whatever transform to its contents), and
/// should not go outside the current layer's paint bounds.
///
///
/// See also:
/// See also:
///
///
/// * [addLayer], for pushing a leaf layer whose canvas is not used.
/// * [addLayer], for pushing a layer without painting further contents
/// within it.
void
pushLayer
(
ContainerLayer
childLayer
,
PaintingContextCallback
painter
,
Offset
offset
,
{
Rect
childPaintBounds
})
{
void
pushLayer
(
ContainerLayer
childLayer
,
PaintingContextCallback
painter
,
Offset
offset
,
{
Rect
childPaintBounds
})
{
assert
(
painter
!=
null
);
assert
(
painter
!=
null
);
// If a layer is being reused, it may already contain children. We remove
// If a layer is being reused, it may already contain children. We remove
...
@@ -385,7 +392,9 @@ class PaintingContext extends ClipContext {
...
@@ -385,7 +392,9 @@ class PaintingContext extends ClipContext {
childContext
.
stopRecordingIfNeeded
();
childContext
.
stopRecordingIfNeeded
();
}
}
/// Creates a compatible painting context to paint onto [childLayer].
/// Creates a painting context configured to paint into [childLayer].
///
/// The `bounds` are estimated paint bounds for debugging purposes.
@protected
@protected
PaintingContext
createChildContext
(
ContainerLayer
childLayer
,
Rect
bounds
)
{
PaintingContext
createChildContext
(
ContainerLayer
childLayer
,
Rect
bounds
)
{
return
PaintingContext
(
childLayer
,
bounds
);
return
PaintingContext
(
childLayer
,
bounds
);
...
@@ -394,28 +403,40 @@ class PaintingContext extends ClipContext {
...
@@ -394,28 +403,40 @@ class PaintingContext extends ClipContext {
/// Clip further painting using a rectangle.
/// Clip further painting using a rectangle.
///
///
/// {@template flutter.rendering.object.needsCompositing}
/// {@template flutter.rendering.object.needsCompositing}
/// * `needsCompositing` is whether the child needs compositing. Typically
/// The `needsCompositing` argument specifies whether the child needs
/// matches the value of [RenderObject.needsCompositing] for the caller. If
/// compositing. Typically this matches the value of
/// false, this method returns null, indicating that a layer is no longer
/// [RenderObject.needsCompositing] for the caller. If false, this method
/// necessary. If a render object calling this method stores the `oldLayer`
/// returns null, indicating that a layer is no longer necessary. If a render
/// in its [RenderObject.layer] field, it should set that field to null.
/// object calling this method stores the `oldLayer` in its
/// {@end template}
/// [RenderObject.layer] field, it should set that field to null.
/// * `offset` is the offset from the origin of the canvas' coordinate system
///
/// to the origin of the caller's coordinate system.
/// When `needsCompositing` is false, this method will use a more efficient
/// * `clipRect` is rectangle (in the caller's coordinate system) to use to
/// way to apply the layer effect than actually creating a layer.
/// clip the painting done by [painter].
/// {@endtemplate}
/// * `painter` is a callback that will paint with the [clipRect] applied. This
///
/// function calls the [painter] synchronously.
/// {@template flutter.rendering.object.pushClipLayer.offset}
/// * `clipBehavior` controls how the rectangle is clipped.
/// The `offset` argument is the offset from the origin of the canvas'
/// coordinate system to the origin of the caller's coordinate system.
/// {@endtemplate}
///
/// The `clipRect` is the rectangle (in the caller's coordinate system) to use
/// to clip the painting done by [painter]. It should not include the
/// `offset`.
///
/// The `painter` callback will be called while the `clipRect` is applied. It
/// is called synchronously during the call to [pushClipRect].
///
/// The `clipBehavior` argument controls how the rectangle is clipped.
///
/// {@template flutter.rendering.object.oldLayer}
/// {@template flutter.rendering.object.oldLayer}
///
* `oldLayer` is the layer created in the previous frame. Specifying the
///
For the `oldLayer` argument, specify the layer created in the previous
///
old layer
gives the engine more information for performance
///
frame. This
gives the engine more information for performance
///
optimizations. Typically this is the value of [RenderObject.layer] that
///
optimizations. Typically this is the value of [RenderObject.layer] that a
///
a render object creates once, then reuses for all subsequent frames
///
render object creates once, then reuses for all subsequent frames until a
///
until a layer is no longer needed (e.g. the render object no longer
///
layer is no longer needed (e.g. the render object no longer needs
///
needs compositing) or until the render object changes the type of the
///
compositing) or until the render object changes the type of the layer
///
layer
(e.g. from opacity layer to a clip rect layer).
/// (e.g. from opacity layer to a clip rect layer).
/// {@end
template}
/// {@endtemplate}
ClipRectLayer
pushClipRect
(
bool
needsCompositing
,
Offset
offset
,
Rect
clipRect
,
PaintingContextCallback
painter
,
{
Clip
clipBehavior
=
Clip
.
hardEdge
,
ClipRectLayer
oldLayer
})
{
ClipRectLayer
pushClipRect
(
bool
needsCompositing
,
Offset
offset
,
Rect
clipRect
,
PaintingContextCallback
painter
,
{
Clip
clipBehavior
=
Clip
.
hardEdge
,
ClipRectLayer
oldLayer
})
{
final
Rect
offsetClipRect
=
clipRect
.
shift
(
offset
);
final
Rect
offsetClipRect
=
clipRect
.
shift
(
offset
);
if
(
needsCompositing
)
{
if
(
needsCompositing
)
{
...
@@ -434,15 +455,21 @@ class PaintingContext extends ClipContext {
...
@@ -434,15 +455,21 @@ class PaintingContext extends ClipContext {
/// Clip further painting using a rounded rectangle.
/// Clip further painting using a rounded rectangle.
///
///
/// {@macro flutter.rendering.object.needsCompositing}
/// {@macro flutter.rendering.object.needsCompositing}
/// * `offset` is the offset from the origin of the canvas' coordinate system
///
/// to the origin of the caller's coordinate system.
/// {@macro flutter.rendering.object.pushClipLayer.offset}
/// * `bounds` is the region of the canvas (in the caller's coordinate system)
///
/// into which `painter` will paint in.
/// The `bounds` argument is used to specify the region of the canvas (in the
/// * `clipRRect` is the rounded-rectangle (in the caller's coordinate system)
/// caller's coordinate system) into which `painter` will paint.
/// to use to clip the painting done by `painter`.
///
/// * `painter` is a callback that will paint with the `clipRRect` applied. This
/// The `clipRRect` argument specifies the rounded-rectangle (in the caller's
/// function calls the `painter` synchronously.
/// coordinate system) to use to clip the painting done by `painter`. It
/// * `clipBehavior` controls how the path is clipped.
/// should not include the `offset`.
///
/// The `painter` callback will be called while the `clipRRect` is applied. It
/// is called synchronously during the call to [pushClipRRect].
///
/// The `clipBehavior` argument controls how the rounded rectangle is clipped.
///
/// {@macro flutter.rendering.object.oldLayer}
/// {@macro flutter.rendering.object.oldLayer}
ClipRRectLayer
pushClipRRect
(
bool
needsCompositing
,
Offset
offset
,
Rect
bounds
,
RRect
clipRRect
,
PaintingContextCallback
painter
,
{
Clip
clipBehavior
=
Clip
.
antiAlias
,
ClipRRectLayer
oldLayer
})
{
ClipRRectLayer
pushClipRRect
(
bool
needsCompositing
,
Offset
offset
,
Rect
bounds
,
RRect
clipRRect
,
PaintingContextCallback
painter
,
{
Clip
clipBehavior
=
Clip
.
antiAlias
,
ClipRRectLayer
oldLayer
})
{
assert
(
clipBehavior
!=
null
);
assert
(
clipBehavior
!=
null
);
...
@@ -464,15 +491,21 @@ class PaintingContext extends ClipContext {
...
@@ -464,15 +491,21 @@ class PaintingContext extends ClipContext {
/// Clip further painting using a path.
/// Clip further painting using a path.
///
///
/// {@macro flutter.rendering.object.needsCompositing}
/// {@macro flutter.rendering.object.needsCompositing}
/// * `offset` is the offset from the origin of the canvas' coordinate system
///
/// to the origin of the caller's coordinate system.
/// {@macro flutter.rendering.object.pushClipLayer.offset}
/// * `bounds` is the region of the canvas (in the caller's coordinate system)
///
/// into which `painter` will paint in.
/// The `bounds` argument is used to specify the region of the canvas (in the
/// * `clipPath` is the path (in the coordinate system of the caller) to use to
/// caller's coordinate system) into which `painter` will paint.
/// clip the painting done by `painter`.
///
/// * `painter` is a callback that will paint with the `clipPath` applied. This
/// The `clipPath` argument specifies the [Path] (in the caller's coordinate
/// function calls the `painter` synchronously.
/// system) to use to clip the painting done by `painter`. It should not
/// * `clipBehavior` controls how the rounded rectangle is clipped.
/// include the `offset`.
///
/// The `painter` callback will be called while the `clipPath` is applied. It
/// is called synchronously during the call to [pushClipPath].
///
/// The `clipBehavior` argument controls how the path is clipped.
///
/// {@macro flutter.rendering.object.oldLayer}
/// {@macro flutter.rendering.object.oldLayer}
ClipPathLayer
pushClipPath
(
bool
needsCompositing
,
Offset
offset
,
Rect
bounds
,
Path
clipPath
,
PaintingContextCallback
painter
,
{
Clip
clipBehavior
=
Clip
.
antiAlias
,
ClipPathLayer
oldLayer
})
{
ClipPathLayer
pushClipPath
(
bool
needsCompositing
,
Offset
offset
,
Rect
bounds
,
Path
clipPath
,
PaintingContextCallback
painter
,
{
Clip
clipBehavior
=
Clip
.
antiAlias
,
ClipPathLayer
oldLayer
})
{
assert
(
clipBehavior
!=
null
);
assert
(
clipBehavior
!=
null
);
...
@@ -493,12 +526,14 @@ class PaintingContext extends ClipContext {
...
@@ -493,12 +526,14 @@ class PaintingContext extends ClipContext {
/// Blend further painting with a color filter.
/// Blend further painting with a color filter.
///
///
/// * `offset` is the offset from the origin of the canvas' coordinate system
/// {@macro flutter.rendering.object.pushLayer.offset}
/// to the origin of the caller's coordinate system.
///
/// * `colorFilter` is the [ColorFilter] value to use when blending the
/// The `colorFilter` argument is the [ColorFilter] value to use when blending
/// painting done by `painter`.
/// the painting done by `painter`.
/// * `painter` is a callback that will paint with the `colorFilter` applied.
///
/// This function calls the `painter` synchronously.
/// The `painter` callback will be called while the `colorFilter` is applied.
/// It is called synchronously during the call to [pushColorFilter].
///
/// {@macro flutter.rendering.object.oldLayer}
/// {@macro flutter.rendering.object.oldLayer}
///
///
/// A [RenderObject] that uses this function is very likely to require its
/// A [RenderObject] that uses this function is very likely to require its
...
@@ -516,11 +551,17 @@ class PaintingContext extends ClipContext {
...
@@ -516,11 +551,17 @@ class PaintingContext extends ClipContext {
/// Transform further painting using a matrix.
/// Transform further painting using a matrix.
///
///
/// {@macro flutter.rendering.object.needsCompositing}
/// {@macro flutter.rendering.object.needsCompositing}
/// * `offset` is the offset from the origin of the canvas' coordinate system
///
/// to the origin of the caller's coordinate system.
/// The `offset` argument is the offset to pass to `painter` and the offset to
/// * `transform` is the matrix to apply to the painting done by `painter`.
/// the origin used by `transform`.
/// * `painter` is a callback that will paint with the `transform` applied. This
///
/// function calls the `painter` synchronously.
/// The `transform` argument is the [Matrix4] with which to transform the
/// coordinate system while calling `painter`. It should not include `offset`.
/// It is applied effectively after applying `offset`.
///
/// The `painter` callback will be called while the `transform` is applied. It
/// is called synchronously during the call to [pushTransform].
///
/// {@macro flutter.rendering.object.oldLayer}
/// {@macro flutter.rendering.object.oldLayer}
TransformLayer
pushTransform
(
bool
needsCompositing
,
Offset
offset
,
Matrix4
transform
,
PaintingContextCallback
painter
,
{
TransformLayer
oldLayer
})
{
TransformLayer
pushTransform
(
bool
needsCompositing
,
Offset
offset
,
Matrix4
transform
,
PaintingContextCallback
painter
,
{
TransformLayer
oldLayer
})
{
final
Matrix4
effectiveTransform
=
Matrix4
.
translationValues
(
offset
.
dx
,
offset
.
dy
,
0.0
)
final
Matrix4
effectiveTransform
=
Matrix4
.
translationValues
(
offset
.
dx
,
offset
.
dy
,
0.0
)
...
@@ -548,13 +589,16 @@ class PaintingContext extends ClipContext {
...
@@ -548,13 +589,16 @@ class PaintingContext extends ClipContext {
/// Blend further painting with an alpha value.
/// Blend further painting with an alpha value.
///
///
/// * `offset` is the offset from the origin of the canvas' coordinate system
/// The `offset` argument indicates an offset to apply to all the children
/// to the origin of the caller's coordinate system.
/// (the rendering created by `painter`).
/// * `alpha` is the alpha value to use when blending the painting done by
///
/// `painter`. An alpha value of 0 means the painting is fully transparent
/// The `alpha` argument is the alpha value to use when blending the painting
/// and an alpha value of 255 means the painting is fully opaque.
/// done by `painter`. An alpha value of 0 means the painting is fully
/// * `painter` is a callback that will paint with the `alpha` applied. This
/// transparent and an alpha value of 255 means the painting is fully opaque.
/// function calls the `painter` synchronously.
///
/// The `painter` callback will be called while the `alpha` is applied. It
/// is called synchronously during the call to [pushOpacity].
///
/// {@macro flutter.rendering.object.oldLayer}
/// {@macro flutter.rendering.object.oldLayer}
///
///
/// A [RenderObject] that uses this function is very likely to require its
/// A [RenderObject] that uses this function is very likely to require its
...
...
packages/flutter/lib/src/rendering/proxy_box.dart
View file @
f87c5102
...
@@ -968,6 +968,9 @@ class RenderShaderMask extends RenderProxyBox {
...
@@ -968,6 +968,9 @@ class RenderShaderMask extends RenderProxyBox {
///
///
/// The shader callback is called with the current size of the child so that
/// The shader callback is called with the current size of the child so that
/// it can customize the shader to the size and location of the child.
/// it can customize the shader to the size and location of the child.
///
/// The rectangle will always be at the origin when called by
/// [RenderShaderMask].
// TODO(abarth): Use the delegate pattern here to avoid generating spurious
// TODO(abarth): Use the delegate pattern here to avoid generating spurious
// repaints when the ShaderCallback changes identity.
// repaints when the ShaderCallback changes identity.
ShaderCallback
get
shaderCallback
=>
_shaderCallback
;
ShaderCallback
get
shaderCallback
=>
_shaderCallback
;
...
...
packages/flutter/lib/src/widgets/binding.dart
View file @
f87c5102
...
@@ -214,7 +214,9 @@ abstract class WidgetsBindingObserver {
...
@@ -214,7 +214,9 @@ abstract class WidgetsBindingObserver {
/// boilerplate.
/// boilerplate.
void
didChangeTextScaleFactor
()
{
}
void
didChangeTextScaleFactor
()
{
}
/// {@macro on_platform_brightness_change}
/// Called when the platform brightness changes.
///
/// This method exposes notifications from [Window.onPlatformBrightnessChanged].
void
didChangePlatformBrightness
()
{
}
void
didChangePlatformBrightness
()
{
}
/// Called when the system tells the app that the user's locale has
/// Called when the system tells the app that the user's locale has
...
...
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