From 3dbe7f23c5115c7b91771e3465ef80d5ebe1ab55 Mon Sep 17 00:00:00 2001 From: c1yde3 <1054346243@qq.com> Date: Wed, 7 Apr 2021 14:04:02 +0800 Subject: [PATCH] fix cupertino refresh control style (#79842) --- .../flutter/lib/src/cupertino/refresh.dart | 2 +- .../flutter/test/cupertino/refresh_test.dart | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/packages/flutter/lib/src/cupertino/refresh.dart b/packages/flutter/lib/src/cupertino/refresh.dart index 385a6850e6..74aac50838 100644 --- a/packages/flutter/lib/src/cupertino/refresh.dart +++ b/packages/flutter/lib/src/cupertino/refresh.dart @@ -420,7 +420,7 @@ class CupertinoSliverRefreshControl extends StatefulWidget { double refreshTriggerPullDistance, double refreshIndicatorExtent, ) { - final double percentageComplete = pulledExtent / refreshTriggerPullDistance; + final double percentageComplete = (pulledExtent / refreshTriggerPullDistance).clamp(0.0, 1.0); // Place the indicator at the top of the sliver that opens up. Note that we're using // a Stack/Positioned widget because the CupertinoActivityIndicator does some internal diff --git a/packages/flutter/test/cupertino/refresh_test.dart b/packages/flutter/test/cupertino/refresh_test.dart index 064ff3fbe9..d506443dad 100644 --- a/packages/flutter/test/cupertino/refresh_test.dart +++ b/packages/flutter/test/cupertino/refresh_test.dart @@ -1322,6 +1322,26 @@ void main() { ); expect(tester.widget(find.byType(CupertinoActivityIndicator)).progress, 100.0 / 100.0); }); + + testWidgets('indicator should not become larger when overscrolled', (WidgetTester tester) async { + // test for https://github.com/flutter/flutter/issues/79841 + await tester.pumpWidget( + Directionality( + textDirection: TextDirection.ltr, + child: Builder( + builder: (BuildContext context) { + return CupertinoSliverRefreshControl.buildRefreshIndicator( + context, + RefreshIndicatorMode.done, + 120, 100, 10, + ); + }, + ), + ), + ); + + expect(tester.widget(find.byType(CupertinoActivityIndicator)).radius, 14.0); + }); } group('UI tests long list', uiTestGroup);