refresh_paging_listview 1.3.2 copy "refresh_paging_listview: ^1.3.2" to clipboard
refresh_paging_listview: ^1.3.2 copied to clipboard

包含支持下拉刷新,上拉加载更多组件。另外封装了简单的分页加载页面,ListView支持设置headers、footers和空页面

example/lib/main.dart

import 'package:example/empty_view.dart';
import 'package:flutter/material.dart';
import 'package:refresh_paging_listview/refresh_paging_listview.dart'
    hide RefreshIndicator;

import 'list_footer_item.dart';
import 'list_header_item.dart';
import 'task_entity.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return RefreshConfiguration(
      // maxOverScrollExtent: 0,
      // dragSpeedRatio: 0.2,
      springDescription: SpringDescription.withDurationAndBounce(),
      headerBuilder: () => const MaterialClassicHeader(),
      //分页接口初始页码
      initPage: 1,
      //空数据时的空页面
      emptyBuilder: (config) => EmptyView(config: config),
      emptyConfig: EmptyConfig(
        text: "暂无数据,请稍后再试!",
        image: "images/ic_empty.png",
      ),
      child: MaterialApp(
        title: "RefreshPagingListView",
        theme: ThemeData(),
        home: const TaskPage(),
        localizationsDelegates: const [
          RefreshLocalizations.delegate,
        ],
      ),
    );
  }
}

class TaskPage extends BaseRefreshList {
  const TaskPage({super.key});

  @override
  State<TaskPage> createState() => _TaskPageState();
}

class _TaskPageState extends BaseRefreshListState<TaskEntity, TaskPage> {
  @override
  Widget build(BuildContext context) {
    super.build(context);
    return Scaffold(
      appBar: AppBar(
        title: const Text("RefreshPagingListView"),
        elevation: 0,
        scrolledUnderElevation: 0,
        forceMaterialTransparency: true,
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          setState(() {
            items.clear();
          });
        },
        child: const Text("CLEAR"),
      ),
      // body: ScrollConfiguration(
      //   behavior: NoOverscrollBehavior(),
      //   child: ListView.separated(
      //     itemBuilder: itemBuilder,
      //     itemCount: itemCount,
      //     separatorBuilder: (c, i) => const Divider(height: 1),
      //   ),
      // ),
      body: buildRefreshList(
        // enableLoadMore: false,
        emptyConfig: RefreshConfiguration.of(context)?.emptyConfig?.copyWith(
              btnText: "重试",
            ),
        headers: [
          const ListHeaderItem(),
          const ListHeaderItem(),
        ],
        footers: [
          const ListFooterItem(),
          const ListFooterItem(),
        ],
        child: ListView.separated(
          itemBuilder: itemBuilder,
          itemCount: itemCount,
          separatorBuilder: (c, i) => const Divider(height: 1),
        ),
      ),
    );
  }

  @override
  Widget buildListItem(BuildContext context, TaskEntity item, int index) {
    return ListTile(
      title: Text("item: $index"),
    );
  }

  @override
  Future<List<TaskEntity>> loadData(int page) async {
    return Future.delayed(const Duration(seconds: 1), () {
      return [
        TaskEntity(),
        TaskEntity(),
        TaskEntity(),
        TaskEntity(),
        TaskEntity(),
      ];
    });
  }
}

class NoOverscrollBehavior extends ScrollBehavior {
  @override
  Widget buildViewportChrome(
      BuildContext context, Widget child, AxisDirection axisDirection) {
    // 返回 child 即可,不添加任何额外的 overscroll 效果
    return child;
  }

  @override
  bool get hasVisualDensity => false;

  @override
  ScrollPhysics get scrollPhysics => const ClampingScrollPhysics();
}
2
likes
135
points
31
downloads

Publisher

unverified uploader

Weekly Downloads

包含支持下拉刷新,上拉加载更多组件。另外封装了简单的分页加载页面,ListView支持设置headers、footers和空页面

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

flutter, pull_to_refresh_flutter3

More

Packages that depend on refresh_paging_listview