import 'package:flutter/material.dart'; import 'a11y/a11y_labels.dart'; class AppProgressIndicator extends StatelessWidget { final double size; final double strokeWidth; final Color? color; final String semanticsLabel; const AppProgressIndicator._({ required this.size, required this.strokeWidth, this.color, this.semanticsLabel = A11yLabels.loading, }); const AppProgressIndicator.small({Color? color, String? semanticsLabel}) : this._( size: 16, strokeWidth: 2, color: color, semanticsLabel: semanticsLabel ?? A11yLabels.loading, ); const AppProgressIndicator.medium({Color? color, String? semanticsLabel}) : this._( size: 24, strokeWidth: 2.5, color: color, semanticsLabel: semanticsLabel ?? A11yLabels.loading, ); const AppProgressIndicator.large({Color? color, String? semanticsLabel}) : this._( size: 40, strokeWidth: 3, color: color, semanticsLabel: semanticsLabel ?? A11yLabels.loading, ); @override Widget build(BuildContext context) { final resolved = color ?? Theme.of(context).colorScheme.primary; return SizedBox( width: size, height: size, child: CircularProgressIndicator( strokeWidth: strokeWidth, valueColor: AlwaysStoppedAnimation(resolved), semanticsLabel: semanticsLabel, ), ); } }