1// Copyright 2014 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5import 'package:flutter/rendering.dart';
6
7import 'framework.dart';
8
9/// Annotates a region of the layer tree with a value.
10///
11/// See also:
12///
13/// * [Layer.find], for an example of how this value is retrieved.
14/// * [AnnotatedRegionLayer], the layer pushed into the layer tree.
15class AnnotatedRegion<T extends Object> extends SingleChildRenderObjectWidget {
16 /// Creates a new annotated region to insert [value] into the layer tree.
17 ///
18 /// Neither [child] nor [value] may be null.
19 ///
20 /// [sized] defaults to true and controls whether the annotated region will
21 /// clip its child.
22 const AnnotatedRegion({
23 super.key,
24 required Widget super.child,
25 required this.value,
26 this.sized = true,
27 });
28
29 /// A value which can be retrieved using [Layer.find].
30 final T value;
31
32 /// If false, the layer pushed into the tree will not be provided with a size.
33 ///
34 /// An [AnnotatedRegionLayer] with a size checks that the offset provided in
35 /// [Layer.find] is within the bounds, returning null otherwise.
36 ///
37 /// See also:
38 ///
39 /// * [AnnotatedRegionLayer], for a description of this behavior.
40 final bool sized;
41
42 @override
43 RenderObject createRenderObject(BuildContext context) {
44 return RenderAnnotatedRegion<T>(value: value, sized: sized);
45 }
46
47 @override
48 void updateRenderObject(BuildContext context, RenderAnnotatedRegion<T> renderObject) {
49 renderObject
50 ..value = value
51 ..sized = sized;
52 }
53}
54