diff --git a/packages/flutter/lib/src/material/progress_indicator.dart b/packages/flutter/lib/src/material/progress_indicator.dart index 1e4b94e4a1..c112d492b6 100644 --- a/packages/flutter/lib/src/material/progress_indicator.dart +++ b/packages/flutter/lib/src/material/progress_indicator.dart @@ -10,7 +10,6 @@ import 'package:flutter/widgets.dart'; import 'material.dart'; import 'theme.dart'; -const double _kLinearProgressIndicatorHeight = 6.0; const double _kMinCircularProgressIndicatorSize = 36.0; const int _kIndeterminateLinearDuration = 1800; @@ -221,6 +220,9 @@ class _LinearProgressIndicatorPainter extends CustomPainter { /// The indicator line is displayed with [valueColor], an animated value. To /// specify a constant color value use: `AlwaysStoppedAnimation(color)`. /// +/// The minimum height of the indicator can be specified using [minHeight]. +/// The indicator can be made taller by wrapping the widget with a [SizedBox]. +/// /// See also: /// /// * [CircularProgressIndicator], which shows progress along a circular arc. @@ -236,16 +238,23 @@ class LinearProgressIndicator extends ProgressIndicator { double value, Color backgroundColor, Animation valueColor, + this.minHeight, String semanticsLabel, String semanticsValue, - }) : super( - key: key, - value: value, - backgroundColor: backgroundColor, - valueColor: valueColor, - semanticsLabel: semanticsLabel, - semanticsValue: semanticsValue, - ); + }) : assert(minHeight == null || minHeight > 0), + super( + key: key, + value: value, + backgroundColor: backgroundColor, + valueColor: valueColor, + semanticsLabel: semanticsLabel, + semanticsValue: semanticsValue, + ); + + /// The minimum height of the line used to draw the indicator. + /// + /// This defaults to 4dp. + final double minHeight; @override _LinearProgressIndicatorState createState() => _LinearProgressIndicatorState(); @@ -284,9 +293,9 @@ class _LinearProgressIndicatorState extends State with return widget._buildSemanticsWrapper( context: context, child: Container( - constraints: const BoxConstraints( + constraints: BoxConstraints( minWidth: double.infinity, - minHeight: _kLinearProgressIndicatorHeight, + minHeight: widget.minHeight ?? 4.0, ), child: CustomPaint( painter: _LinearProgressIndicatorPainter( diff --git a/packages/flutter/test/material/progress_indicator_test.dart b/packages/flutter/test/material/progress_indicator_test.dart index 207c387225..9742e8af93 100644 --- a/packages/flutter/test/material/progress_indicator_test.dart +++ b/packages/flutter/test/material/progress_indicator_test.dart @@ -49,6 +49,27 @@ void main() { handle.dispose(); }); + testWidgets('LinearProgressIndicator custom minHeight', (WidgetTester tester) async { + await tester.pumpWidget( + const Directionality( + textDirection: TextDirection.ltr, + child: Center( + child: SizedBox( + width: 200.0, + child: LinearProgressIndicator(value: 0.25, minHeight: 2.0), + ), + ), + ), + ); + + expect( + find.byType(LinearProgressIndicator), + paints + ..rect(rect: const Rect.fromLTRB(0.0, 0.0, 200.0, 2.0)) + ..rect(rect: const Rect.fromLTRB(0.0, 0.0, 50.0, 2.0)), + ); + }); + testWidgets('LinearProgressIndicator paint (LTR)', (WidgetTester tester) async { await tester.pumpWidget( const Directionality( @@ -65,8 +86,8 @@ void main() { expect( find.byType(LinearProgressIndicator), paints - ..rect(rect: const Rect.fromLTRB(0.0, 0.0, 200.0, 6.0)) - ..rect(rect: const Rect.fromLTRB(0.0, 0.0, 50.0, 6.0)), + ..rect(rect: const Rect.fromLTRB(0.0, 0.0, 200.0, 4.0)) + ..rect(rect: const Rect.fromLTRB(0.0, 0.0, 50.0, 4.0)), ); expect(tester.binding.transientCallbackCount, 0); @@ -88,8 +109,8 @@ void main() { expect( find.byType(LinearProgressIndicator), paints - ..rect(rect: const Rect.fromLTRB(0.0, 0.0, 200.0, 6.0)) - ..rect(rect: const Rect.fromLTRB(150.0, 0.0, 200.0, 6.0)), + ..rect(rect: const Rect.fromLTRB(0.0, 0.0, 200.0, 4.0)) + ..rect(rect: const Rect.fromLTRB(150.0, 0.0, 200.0, 4.0)), ); expect(tester.binding.transientCallbackCount, 0); @@ -115,8 +136,8 @@ void main() { expect( find.byType(LinearProgressIndicator), paints - ..rect(rect: const Rect.fromLTRB(0.0, 0.0, 200.0, 6.0)) - ..rect(rect: Rect.fromLTRB(0.0, 0.0, animationValue * 200.0, 6.0)), + ..rect(rect: const Rect.fromLTRB(0.0, 0.0, 200.0, 4.0)) + ..rect(rect: Rect.fromLTRB(0.0, 0.0, animationValue * 200.0, 4.0)), ); expect(tester.binding.transientCallbackCount, 1); @@ -142,8 +163,8 @@ void main() { expect( find.byType(LinearProgressIndicator), paints - ..rect(rect: const Rect.fromLTRB(0.0, 0.0, 200.0, 6.0)) - ..rect(rect: Rect.fromLTRB(200.0 - animationValue * 200.0, 0.0, 200.0, 6.0)), + ..rect(rect: const Rect.fromLTRB(0.0, 0.0, 200.0, 4.0)) + ..rect(rect: Rect.fromLTRB(200.0 - animationValue * 200.0, 0.0, 200.0, 4.0)), ); expect(tester.binding.transientCallbackCount, 1); @@ -169,8 +190,8 @@ void main() { expect( find.byType(LinearProgressIndicator), paints - ..rect(rect: const Rect.fromLTRB(0.0, 0.0, 200.0, 6.0)) - ..rect(rect: const Rect.fromLTRB(0.0, 0.0, 50.0, 6.0), color: Colors.white), + ..rect(rect: const Rect.fromLTRB(0.0, 0.0, 200.0, 4.0)) + ..rect(rect: const Rect.fromLTRB(0.0, 0.0, 50.0, 4.0), color: Colors.white), ); });