Skip to content

Commit

Permalink
Revert "Fix RefreshIndicator performance issue (#47667)" (#53149)
Browse files Browse the repository at this point in the history
This reverts commit 602ac0b.
  • Loading branch information
dnfield committed Mar 24, 2020
1 parent af5194d commit f3d95cd
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 47 deletions.
22 changes: 11 additions & 11 deletions packages/flutter/lib/src/material/refresh_indicator.dart
Expand Up @@ -409,34 +409,34 @@ class RefreshIndicatorState extends State<RefreshIndicator> with TickerProviderS
return _pendingRefreshFuture;
}

final GlobalKey _key = GlobalKey();

@override
Widget build(BuildContext context) {
assert(debugCheckHasMaterialLocalizations(context));
final Widget child = NotificationListener<ScrollNotification>(
key: _key,
onNotification: _handleScrollNotification,
child: NotificationListener<OverscrollIndicatorNotification>(
onNotification: _handleGlowNotification,
child: widget.child,
),
);
assert(() {
if (_mode == null) {
assert(_dragOffset == null);
assert(_isIndicatorAtTop == null);
} else {
assert(_dragOffset != null);
assert(_isIndicatorAtTop != null);
}
return true;
}());
if (_mode == null) {
assert(_dragOffset == null);
assert(_isIndicatorAtTop == null);
return child;
}
assert(_dragOffset != null);
assert(_isIndicatorAtTop != null);

final bool showIndeterminateIndicator =
_mode == _RefreshIndicatorMode.refresh || _mode == _RefreshIndicatorMode.done;

return Stack(
children: <Widget>[
child,
if (_mode != null) Positioned(
Positioned(
top: _isIndicatorAtTop ? 0.0 : null,
bottom: !_isIndicatorAtTop ? 0.0 : null,
left: 0.0,
Expand Down
37 changes: 1 addition & 36 deletions packages/flutter/test/material/refresh_indicator_test.dart
Expand Up @@ -420,39 +420,4 @@ void main() {
expect(controller.offset, lessThan(0.0));
expect(refreshCalled, isTrue);
}, variant: const TargetPlatformVariant(<TargetPlatform>{ TargetPlatform.iOS, TargetPlatform.macOS }));

testWidgets('RefreshIndicator does not force child to relayout', (WidgetTester tester) async {
int layoutCount = 0;

Widget layoutCallback(BuildContext context, BoxConstraints constraints) {
layoutCount++;
return ListView(
physics: const AlwaysScrollableScrollPhysics(),
children: <String>['A', 'B', 'C', 'D', 'E', 'F'].map<Widget>((String item) {
return SizedBox(
height: 200.0,
child: Text(item),
);
}).toList(),
);
}

await tester.pumpWidget(
MaterialApp(
home: RefreshIndicator(
onRefresh: refresh,
child: LayoutBuilder(builder: layoutCallback),
),
),
);

await tester.fling(find.text('A'), const Offset(0.0, 300.0), 1000.0); // trigger refresh
await tester.pump();

await tester.pump(const Duration(seconds: 1)); // finish the scroll animation
await tester.pump(const Duration(seconds: 1)); // finish the indicator settle animation
await tester.pump(const Duration(seconds: 1)); // finish the indicator hide animation

expect(layoutCount, 1);
});
}
}

0 comments on commit f3d95cd

Please sign in to comment.