blob: 0619e62be6d0b98b4781b9aff144ad4e980939c6 [file] [log] [blame]
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:flutter/rendering.dart';
import 'framework.dart';
/// Annotates a region of the layer tree with a value.
///
/// See also:
///
/// * [Layer.find], for an example of how this value is retrieved.
/// * [AnnotatedRegionLayer], the layer pushed into the layer tree.
class AnnotatedRegion<T extends Object> extends SingleChildRenderObjectWidget {
/// Creates a new annotated region to insert [value] into the layer tree.
///
/// Neither [child] nor [value] may be null.
///
/// [sized] defaults to true and controls whether the annotated region will
/// clip its child.
const AnnotatedRegion({
super.key,
required Widget super.child,
required this.value,
this.sized = true,
}) : assert(value != null),
assert(child != null);
/// A value which can be retrieved using [Layer.find].
final T value;
/// If false, the layer pushed into the tree will not be provided with a size.
///
/// An [AnnotatedRegionLayer] with a size checks that the offset provided in
/// [Layer.find] is within the bounds, returning null otherwise.
///
/// See also:
///
/// * [AnnotatedRegionLayer], for a description of this behavior.
final bool sized;
@override
RenderObject createRenderObject(BuildContext context) {
return RenderAnnotatedRegion<T>(value: value, sized: sized);
}
@override
void updateRenderObject(BuildContext context, RenderAnnotatedRegion<T> renderObject) {
renderObject
..value = value
..sized = sized;
}
}