custom_refresh_indicator包,以编程方式触发刷新



我在我的应用程序中使用了一个包custom_fresh_indicator。它允许您在应用程序中添加滚动刷新功能。然而,我希望能够按下按钮,并以编程方式触发刷新,而不是通过用户从顶部向下滚动。这可能吗?

我当前的代码看起来是这样的(在Scaffold的内部(:

CustomRefreshIndicator(
onRefresh: () async { <--- I WANT TO TRIGGER THIS PROGRAMMATICALLY
await Future.delayed(const Duration(milliseconds: 400));
},
builder: (BuildContext context, Widget child,
IndicatorController controller) {
return AnimatedBuilder(
animation: controller,
builder: (BuildContext context, _) {
return Stack(
clipBehavior: Clip.hardEdge,
children: <Widget>[
AnimatedBuilder(
animation: controller,
builder: (BuildContext context, _) {
return Container(
color: Colors.white,
width: double.infinity,
height: controller.value * 80,
child: const FittedBox(
alignment: Alignment.center,
fit: BoxFit.scaleDown,
child: Padding(
padding: EdgeInsets.symmetric(vertical: 8),
child: CupertinoActivityIndicator(
radius: 12,
color: Colors.black,
),
),
),
);
},
),
Transform.translate(
offset: Offset(0, controller.value * 80),
child: child,
),
],
);
},
);
},
child: ScrollablePositionedList.builder(
physics: const ClampingScrollPhysics(
parent: AlwaysScrollableScrollPhysics(),
),
itemCount: posts.length + 1,
itemBuilder: (context, index) {
if (index == 0) {
return Container(
height: 200,
color: Colors.green,
child: const Center(
child: Text('post content'),
),
);
} else if (posts[index - 1].isRoot) {
return Container(
padding: const EdgeInsets.symmetric(vertical: 15),
margin: const EdgeInsets.symmetric(vertical: 5),
color: Colors.redAccent,
child: Text('ROOT COMMENT, index: ${index - 1}'),
);
} else {
return Container(
padding: const EdgeInsets.symmetric(vertical: 15),
margin: const EdgeInsets.symmetric(vertical: 5),
color: Colors.lightBlueAccent,
child: Text('Threaded comment, index: ${index - 1}'),
);
}
},
itemScrollController: itemScrollController,
itemPositionsListener: itemPositionsListener,
),
),

创建一个未来的方法并像一样包含在onRefresh

Future<void> onRefresh() async{}
CustomRefreshIndicator(
onRefresh: onRefresh,
builder: (context, child, controller) {

当你喜欢回忆里面的任何方法/按钮按下做

await onRefresh();

@David Sedlar的评论让我很快得到了答案:

我参考了Flutter RefreshIndicator的文档:

https://api.flutter.dev/flutter/material/RefreshIndicator-class.html

然后执行他们在示例中所做的操作,创建一个全局键,将该键值设置为CustomRefreshIndicator中的key属性,然后通过该键从CustomRefreshindicator的状态调用show()

最新更新