In my app I need to provide a pull-to-refresh on one of the screens. I've chosen CupertinoSliverRefreshControl
. App's primary color is red, so the navbar and searchbar are colored with it. And also refresh control needs to be colored with red. But when I return Container with color from CupertinoSliverRefreshControl
's method, the whole control kind-of blinks with white stripe, when reaches the zero position after onRefresh
completes.
Widget structure is the following:
import 'package:flutter/cupertino.dart';
void main() {
runApp(App());
}
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return CupertinoApp(
home: CupertinoPageScaffold(
child: CustomScrollView(
slivers: <Widget>[
/// navbar
CupertinoSliverNavigationBar(
backgroundColor: Color(0xffe30613),
largeTitle: Text(
'App',
style: TextStyle(
color: Color(0xffffffff),
),
),
),
/// pull to refresh control
CupertinoSliverRefreshControl(
onRefresh: () => Future.delayed(Duration(milliseconds: 1000)),
builder: (_, __, ___, ____, _____) {
return Container(
color: Color(0xffe30613),
child: Center(
child: const CupertinoActivityIndicator(
radius: 12.0,
),
),
);
},
),
/// searchbar
SliverToBoxAdapter(
child: Container(
height: 56.0,
padding: const EdgeInsets.symmetric(
horizontal: 8.0,
vertical: 10.0,
),
color: Color(0xffe30613),
child: Container(
color: Color(0xffffffff),
),
),
),
],
),
),
);
}
}
Here's the demonstration of the problem:
UPDATE:
Referencing to the issue I've created in flutter's repo, the problem is in CupertinoSliverRefreshControl
itself. In fact, it is not a problem, but an expected behavior. When Control's refreshState
reaches inactive
, build method returns an empty Container
, which is, by default, 10% of height of control. This exact Container
is visible on gif above above.
I've created Pull Request, that adds param to control this Container
color, now waiting for it to be merged.
User contributions licensed under CC BY-SA 3.0