CircularProgressIndicator class
A Material Design circular progress indicator, which spins to indicate that the application is busy.
A widget that shows progress along a circle. There are two kinds of circular progress indicators:
- Determinate. Determinate progress indicators have a specific value at each point in time, and the value should increase monotonically from 0.0 to 1.0, at which time the indicator is complete. To create a determinate progress indicator, use a non-null value between 0.0 and 1.0.
- Indeterminate. Indeterminate progress indicators do not have a specific value at each point in time and instead indicate that progress is being made without indicating how much progress remains. To create an indeterminate progress indicator, use a null value.
The indicator arc is displayed with valueColor, an animated value. To
specify a constant color use: AlwaysStoppedAnimation<Color>(color).
To create a local project with this code sample, run:
flutter create --sample=material.CircularProgressIndicator.1 mysample
To create a local project with this code sample, run:
flutter create --sample=material.CircularProgressIndicator.2 mysample
Animation synchronization
When multiple CircularProgressIndicators or LinearProgressIndicators are animating on screen simultaneously (e.g., in a list of loading items), their uncoordinated animations can appear visually cluttered. To address this, the animation of an indicator can be driven by a custom AnimationController.
This allows multiple indicators to be synchronized to a single animation source. The most convenient way to achieve this for a group of indicators is by providing a controller via ProgressIndicatorTheme (see ProgressIndicatorThemeData.controller). All CircularProgressIndicators or LinearProgressIndicators within that theme's subtree will then share the same animation, resulting in a more coordinated and visually pleasing effect.
Alternatively, a specific AnimationController can be passed directly to the controller property of an individual indicator.
Tapping the buttons adds or removes indicators. By default, they all share a ProgressIndicatorThemeData.controller, which keeps their animations in sync.
Tapping the "Toggle" button sets the theme's controller to null. This forces each indicator to create its own internal controller, causing their animations to become desynchronized.
To create a local project with this code sample, run:
flutter create --sample=material.CircularProgressIndicator.3 mysample
See also:
- LinearProgressIndicator, which displays progress along a line.
- RefreshIndicator, which automatically displays a CircularProgressIndicator when the underlying vertical scrollable is overscrolled.
- material.io/design/components/progress-indicators.html#circular-progress-indicators
- Inheritance
-
- Object
- DiagnosticableTree
- Widget
- StatefulWidget
- ProgressIndicator
- CircularProgressIndicator
- Implementers
Constructors
-
CircularProgressIndicator({Key? key, double? value, Color? backgroundColor, Color? color, Animation<
Color?> ? valueColor, double? strokeWidth, double? strokeAlign, String? semanticsLabel, String? semanticsValue, StrokeCap? strokeCap, BoxConstraints? constraints, double? trackGap, @Deprecated('Set this flag to false to opt into the 2024 progress indicator appearance. Defaults to true. ' 'In the future, this flag will default to false. Use ProgressIndicatorThemeData to customize individual properties. ' 'This feature was deprecated after v3.27.0-0.1.pre.') bool? year2023, EdgeInsetsGeometry? padding, AnimationController? controller}) -
Creates a circular progress indicator.
const
-
CircularProgressIndicator.adaptive({Key? key, double? value, Color? backgroundColor, Animation<
Color?> ? valueColor, double? strokeWidth, String? semanticsLabel, String? semanticsValue, StrokeCap? strokeCap, double? strokeAlign, BoxConstraints? constraints, double? trackGap, @Deprecated('Set this flag to false to opt into the 2024 progress indicator appearance. Defaults to true. ' 'In the future, this flag will default to false. Use ProgressIndicatorThemeData to customize individual properties. ' 'This feature was deprecated after v3.27.0-0.2.pre.') bool? year2023, EdgeInsetsGeometry? padding, AnimationController? controller}) -
Creates an adaptive progress indicator that is a
CupertinoActivityIndicator on TargetPlatform.iOS &
TargetPlatform.macOS and a CircularProgressIndicator in material
theme/non-Apple platforms.
const
Properties
- backgroundColor → Color?
-
Color of the circular track being filled by the circular indicator.
no setteroverride
- color → Color?
-
The progress indicator's color.
finalinherited
- constraints → BoxConstraints?
-
Defines minimum and maximum sizes for a CircularProgressIndicator.
final
- controller → AnimationController?
-
An optional AnimationController that controls the animation of this
indeterminate progress indicator.
final
- hashCode → int
-
The hash code for this object.
no setterinherited
- key → Key?
-
Controls how one widget replaces another widget in the tree.
finalinherited
- padding → EdgeInsetsGeometry?
-
The padding around the indicator track.
final
- runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
- semanticsLabel → String?
-
The SemanticsProperties.label for this progress indicator.
finalinherited
- semanticsValue → String?
-
The SemanticsProperties.value for this progress indicator.
finalinherited
- strokeAlign → double?
-
The relative position of the stroke on a CircularProgressIndicator.
final
- strokeCap → StrokeCap?
-
The progress indicator's line ending.
final
- strokeWidth → double?
-
The width of the line used to draw the circle.
final
- trackGap → double?
-
The gap between the active indicator and the background track.
final
- value → double?
-
If non-null, the value of this progress indicator.
finalinherited
-
valueColor
→ Animation<
Color?> ? -
The progress indicator's color as an animated value.
finalinherited
- year2023 → bool?
-
When true, the CircularProgressIndicator will use the 2023 Material Design 3
appearance.
final
Methods
-
createElement(
) → StatefulElement -
Creates a StatefulElement to manage this widget's location in the tree.
inherited
-
createState(
) → State< CircularProgressIndicator> -
Creates the mutable state for this widget at a given location in the tree.
override
-
debugDescribeChildren(
) → List< DiagnosticsNode> -
Returns a list of DiagnosticsNode objects describing this node's
children.
inherited
-
debugFillProperties(
DiagnosticPropertiesBuilder properties) → void -
Add additional properties associated with the node.
inherited
-
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
toDiagnosticsNode(
{String? name, DiagnosticsTreeStyle? style}) → DiagnosticsNode -
Returns a debug representation of the object that is used by debugging
tools and by DiagnosticsNode.toStringDeep.
inherited
-
toString(
{DiagnosticLevel minLevel = DiagnosticLevel.info}) → String -
A string representation of this object.
inherited
-
toStringDeep(
{String prefixLineOne = '', String? prefixOtherLines, DiagnosticLevel minLevel = DiagnosticLevel.debug, int wrapWidth = 65}) → String -
Returns a string representation of this node and its descendants.
inherited
-
toStringShallow(
{String joiner = ', ', DiagnosticLevel minLevel = DiagnosticLevel.debug}) → String -
Returns a one-line detailed description of the object.
inherited
-
toStringShort(
) → String -
A short, textual description of this widget.
inherited
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited
Constants
- defaultAnimationDuration → const Duration
- The default duration for one full cycle of the indeterminate animation.
- strokeAlignCenter → const double
- The indicator stroke is drawn on the center of the indicator path, with half of the strokeWidth on the inside, and the other half on the outside of the path.
- strokeAlignInside → const double
- The indicator stroke is drawn fully inside of the indicator path.
- strokeAlignOutside → const double
- The indicator stroke is drawn on the outside of the indicator path.