使用 `CustomScrollView` 结合 `SliverList` 实现了一个支持下拉刷新和上拉加载更多功能的滚动列表,对下面代码进行解析学习。
import 'dart:math';
import 'package:flutter/material.dart';
import 'custom_pull/gsy_refresh_sliver.dart';
import 'package:flutter/cupertino.dart' as IOS;
class NewMyRefreshDemoPage extends StatefulWidget {
const NewMyRefreshDemoPage({super.key});
@override
State<StatefulWidget> createState() => _NewMyRefreshDemoState();
}
class _NewMyRefreshDemoState extends State<NewMyRefreshDemoPage> {
final GlobalKey<CupertinoSliverRefreshControlState> sliverRefreshKey =
GlobalKey<CupertinoSliverRefreshControlState>();
final int pageSize = 30;
bool disposed = false;
List<String> dataList = [];
final ScrollController _scrollController = ScrollController();
Future<void> onRefresh() async {
await Future.delayed(const Duration(seconds: 2));
dataList.clear();
for (int i = 0; i < pageSize; i++) {
dataList.add("refresh");
}
if (disposed) {
return;
}
setState(() {});
}
Future<void> loadMore() async {
await Future.delayed(const Duration(seconds: 2));
for (int i = 0; i < pageSize; i++) {
dataList.add("loadmore");
}
if (disposed) {
return;
}
setState(() {});
}
@override
void didChangeDependencies() {
Future.delayed(const Duration(milliseconds: 500), () {
_scrollController.animateTo(-141,
duration: const Duration(milliseconds: 600), curve: Curves.linear);
return true;
});
}
@override
void dispose() {
disposed = true;
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("NewMyRefreshDemoPage"),
),
body: NotificationListener(
onNotification: (ScrollNotification notification) {
//通知 CupertinoSliverRefreshControl 当前的拖拽状态
sliverRefreshKey.currentState?.notifyScrollNotification(notification);
if (notification is ScrollE