From fca021deeed18b8d67fe2c3aaee4820374319855 Mon Sep 17 00:00:00 2001 From: Dibash Poudel <31642846+dbspoudel@users.noreply.github.com> Date: Thu, 20 Feb 2025 18:48:23 +1100 Subject: [PATCH] `CircularProgressIndicator` throws null exception (#163356) This PR adds a null check before accessing value, preventing errors caused by the null check operator used on null value. Fixes #163253 ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [ ] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [ ] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md --- .../lib/src/material/progress_indicator.dart | 2 +- .../progress_indicator_theme_test.dart | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/packages/flutter/lib/src/material/progress_indicator.dart b/packages/flutter/lib/src/material/progress_indicator.dart index 03d0679a852..867cac2a6e0 100644 --- a/packages/flutter/lib/src/material/progress_indicator.dart +++ b/packages/flutter/lib/src/material/progress_indicator.dart @@ -606,7 +606,7 @@ class _CircularProgressIndicatorPainter extends CustomPainter { ..strokeCap = strokeCap ?? StrokeCap.round ..style = PaintingStyle.stroke; // If hasGap is true, draw the background arc with a gap. - if (hasGap && value! > _epsilon) { + if (hasGap && value != null && value! > _epsilon) { final double arcRadius = arcActualSize.shortestSide / 2; final double strokeRadius = strokeWidth / arcRadius; final double gapRadius = trackGap! / arcRadius; diff --git a/packages/flutter/test/material/progress_indicator_theme_test.dart b/packages/flutter/test/material/progress_indicator_theme_test.dart index bc2b7fdd40d..00bc55cca7c 100644 --- a/packages/flutter/test/material/progress_indicator_theme_test.dart +++ b/packages/flutter/test/material/progress_indicator_theme_test.dart @@ -376,6 +376,25 @@ void main() { ); }); + testWidgets( + 'CircularProgressIndicator.year2023 set to false and provided circularTrackColor does not throw exception', + (WidgetTester tester) async { + const Color circularTrackColor = Color(0XFF0000FF); + final ThemeData theme = ThemeData( + progressIndicatorTheme: const ProgressIndicatorThemeData( + circularTrackColor: circularTrackColor, + year2023: false, + ), + ); + + await tester.pumpWidget( + Theme(data: theme, child: const Center(child: CircularProgressIndicator())), + ); + + expect(tester.takeException(), null); + }, + ); + testWidgets( 'Opt into 2024 CircularProgressIndicator appearance with ProgressIndicatorThemeData.year2023', (WidgetTester tester) async {