<itemvalue="A [DocumentReference] refers to a document location in a [FirebaseFirestore] database and can be used to write, read, or listen to the location. The document at the referenced location may or may not exist. A [DocumentReference] can also be used to create a [CollectionReference] to a subcollection."/>
<itemvalue="If true the [body] and the scaffold's floating widgets should size themselves to avoid the onscreen keyboard whose height is defined by the ambient [MediaQuery]'s [MediaQueryData.viewInsets] `bottom` property. For example, if there is an onscreen keyboard displayed above the scaffold, the body can be resized to avoid overlapping the keyboard, which prevents widgets inside the body from being obscured by the keyboard. Defaults to true."/>
<itemvalue="Position the control relative to the text in the fashion that is typical for the current platform, and place the secondary widget on the opposite side."/>
<itemvalue="Position the control on the trailing edge, and the secondary widget, if any, on the leading edge."/>
<itemvalue="Position the control on the leading edge, and the secondary widget, if any, on the trailing edge."/>
<itemvalue="Typically used to force the expansion arrow icon to the tile's leading or trailing edge. By default, the value of `controlAffinity` is [ListTileControlAffinity.platform], which means that the expansion arrow icon will appear on the tile's trailing edge."/>
<itemvalue="A single-line [ListTile] with an expansion arrow icon that expands or collapses the tile to reveal or hide the [children]. This widget is typically used with [ListView] to create an "expand collapse" list entry. When used with scrolling widgets like [ListView], a unique [PageStorageKey] must be specified to enable the [ExpansionTile] to save and restore its expanded state when it is scrolled in and out of view. This class overrides the [ListTileThemeData.iconColor] and [ListTileThemeData.textColor] theme properties for its [ListTile]. These colors animate between values when the tile is expanded and collapsed: between [iconColor], [collapsedIconColor] and between [textColor] and [collapsedTextColor]. The expansion arrow icon is shown on the right by default in left-to-right languages (i.e. the trailing edge). This can be changed using [controlAffinity]. This maps to the [leading] and [trailing] properties of [ExpansionTile]. {@tool dartpad} This example demonstrates different configurations of ExpansionTile. See code in examplesapilibmaterialexpansion_tileexpansion_tile.0.dart {@end-tool} See also: [ListTile], useful for creating expansion tile [children] when the expansion tile represents a sublist. The "Expand and collapse" section of <https:material.iocomponentsliststypes>"/>
<itemvalue="A sliver that contains a single box widget. Slivers are special-purpose widgets that can be combined using a [CustomScrollView] to create custom scroll effects. A [SliverToBoxAdapter] is a basic sliver that creates a bridge back to one of the usual box-based widgets. Rather than using multiple [SliverToBoxAdapter] widgets to display multiple box widgets in a [CustomScrollView], consider using [SliverList], [SliverFixedExtentList], [SliverPrototypeExtentList], or [SliverGrid], which are more efficient because they instantiate only those children that are actually visible through the scroll view's viewport."/>
<itemvalue="A material design app bar that integrates with a [CustomScrollView]. An app bar consists of a toolbar and potentially other widgets, such as a [TabBar] and a [FlexibleSpaceBar]. App bars typically expose one or more common actions with [IconButton]s which are optionally followed by a [PopupMenuButton] for less common operations. {@youtube 560 315 https:www.youtube.comwatch?v=R9C5KMJKluE} Sliver app bars are typically used as the first child of a [CustomScrollView], which lets the app bar integrate with the scroll view so that it can vary in height according to the scroll offset or float above the other content in the scroll view. For a fixed-height app bar at the top of the screen see [AppBar], which is used in the [Scaffold.appBar] slot. The AppBar displays the toolbar widgets, [leading], [title], and [actions], above the [bottom] (if any). If a [flexibleSpace] widget is specified then it is stacked behind the toolbar and the bottom widget."/>
<itemvalue="A sliver that places multiple box children in a two dimensional arrangement. [SliverGrid] places its children in arbitrary positions determined by [gridDelegate]. Each child is forced to have the size specified by the [gridDelegate]. The main axis direction of a grid is the direction in which it scrolls; the cross axis direction is the orthogonal direction. {@youtube 560 315 https:www.youtube.comwatch?v=ORiTTaVY6mM} {@tool snippet} This example, which would be inserted into a [CustomScrollView.slivers] list, shows twenty boxes in a pretty teal grid:"/>
<itemvalue="A sliver that places multiple box children in a linear array along the main axis. Each child is forced to have the [SliverConstraints.crossAxisExtent] in the cross axis but determines its own main axis extent. [SliverList] determines its scroll offset by "dead reckoning" because children outside the visible part of the sliver are not materialized, which means [SliverList] cannot learn their main axis extent. Instead, newly materialized children are placed adjacent to existing children. {@youtube 560 315 https:www.youtube.comwatch?v=ORiTTaVY6mM} If the children have a fixed extent in the main axis, consider using [SliverFixedExtentList] rather than [SliverList] because [SliverFixedExtentList] does not need to perform layout on its children to obtain their extent in the main axis and is therefore more efficient. {@macro flutter.widgets.SliverChildDelegate.lifecycle} See also: <https:flutter.devdocsdevelopmentuiadvancedslivers>, a description of what slivers are and how to use them. [SliverFixedExtentList], which is more efficient for children with the same extent in the main axis. [SliverPrototypeExtentList], which is similar to [SliverFixedExtentList] except that it uses a prototype list item instead of a pixel value to define the main axis extent of each item. [SliverGrid], which places its children in arbitrary positions."/>
<itemvalue="A [ScrollView] that creates custom scroll effects using slivers. A [CustomScrollView] lets you supply [slivers] directly to create various scrolling effects, such as lists, grids, and expanding headers. For example, to create a scroll view that contains an expanding app bar followed by a list and a grid, use a list of three slivers: [SliverAppBar], [SliverList], and [SliverGrid]. [Widget]s in these [slivers] must produce [RenderSliver] objects. To control the initial scroll offset of the scroll view, provide a [controller] with its [ScrollController.initialScrollOffset] property set. {@animation 400 376 https:flutter.github.ioassets-for-api-docsassetswidgetscustom_scroll_view.mp4} {@tool snippet} This sample code shows a scroll view that contains a flexible pinned app bar, a grid, and an infinite list."/>
<itemvalue="A base class for the `State` of widgets with implicit animations. [ImplicitlyAnimatedWidgetState] requires that subclasses respond to the animation themselves. If you would like `setState()` to be called automatically as the animation changes, use [AnimatedWidgetBaseState]. Properties that subclasses choose to animate are represented by [Tween] instances. Subclasses must implement the [forEachTween] method to allow [ImplicitlyAnimatedWidgetState] to iterate through the widget's fields and animate them."/>
<itemvalue="Animated version of [Align] which automatically transitions the child's position over a given duration whenever the given [alignment] changes. Here's an illustration of what this can look like, using a [curve] of [Curves.fastOutSlowIn]. {@animation 250 266 https:flutter.github.ioassets-for-api-docsassetswidgetsanimated_align.mp4} For the animation, you can choose a [curve] as well as a [duration] and the widget will automatically animate to the new target [alignment]. If you require more control over the animation (e.g. if you want to stop it mid-animation), consider using an [AlignTransition] instead, which takes a provided [Animation] as argument. While that allows you to fine-tune the animation, it also requires more development overhead as you have to manually manage the lifecycle of the underlying [AnimationController]. {@tool dartpad} The following code implements the [AnimatedAlign] widget, using a [curve] of [Curves.fastOutSlowIn]. See code in examplesapilibwidgetsimplicit_animationsanimated_align.0.dart {@end-tool} See also: [AnimatedContainer], which can transition more values at once. [AnimatedPadding], which can animate the padding instead of the alignment. [AnimatedSlide], which can animate the translation of child by a given offset relative to its size. [AnimatedPositioned], which, as a child of a [Stack], automatically transitions its child's position over a given duration whenever the given position changes."/>
<itemvalue="Optional widget to place on the line after the input. This can be used, for example, to add some padding to the text that would otherwise be specified using [suffixText], or to add a custom widget after the input. The widget's baseline is lined up with the input baseline. Only one of [suffix] and [suffixText] can be specified. The [suffix] appears before the [suffixIcon], if both are specified. See also: [prefix], the equivalent but on the leading edge."/>
<itemvalue="The number is decimal, allowing a decimal point to provide fractional. This flag is only used for the [number] input type, otherwise `null`. Use `const TextInputType.numberWithOptions(decimal: true)` to set this."/>
<itemvalue="The number is signed, allowing a positive or negative sign at the start. This flag is only used for the [number] input type, otherwise `null`. Use `const TextInputType.numberWithOptions(signed: true)` to set this."/>
<itemvalue="Reduces a collection to a single value by iteratively combining elements of the collection using the provided function. The iterable must have at least one element. If it has only one element, that element is returned. Otherwise this method starts with the first element from the iterator, and then combines it with the remaining elements in iteration order, as if by: ``` E value = iterable.first; iterable.skip(1).forEach((element) { value = combine(value, element); }); return value; ``` Example of calculating the sum of an iterable: ```dart final numbers = <double>[10, 2, 5, 0.5]; final result = numbers.reduce((value, element) => value + element); print(result); 17.5"/>
<itemvalue="Register a closure to be called when the object changes. If the given closure is already registered, an additional instance is added, and must be removed the same number of times it is added before it will stop being called. This method must not be called after [dispose] has been called. {@template flutter.foundation.ChangeNotifier.addListener} If a listener is added twice, and is removed once during an iteration (e.g. in response to a notification), it will still be called again. If, on the other hand, it is removed as many times as it was registered, then it will no longer be called. This odd behavior is the result of the [ChangeNotifier] not being able to determine which listener is being removed, since they are identical, therefore it will conservatively still call all the listeners when it knows that any are still registered. This surprising behavior can be unexpectedly observed when registering a listener on two separate objects which are both forwarding all registrations to a common upstream object. {@endtemplate} See also: [removeListener], which removes a previously registered closure from the list of closures that are notified when the object changes."/>