提交 d9108b8f authored 作者: 史晓晨's avatar 史晓晨

feat:静默下拉刷新(①不执行下拉刷新动画②刷新冲突处理-静默和普通同时触发)

上级 3bcfda1b
......@@ -17,14 +17,22 @@ class _BaseListWidgetTestState extends State<BaseListWidgetTest> {
Widget build(BuildContext context) {
return MyScaffold(
title: 'BaseListWidget',
floatingActionButton: Row(children: [
floatingActionButton: Row(
children: [
TextButton(
onPressed: () {
controller.reload();
},
child: const Text("下拉刷新"),
),
],),
TextButton(
onPressed: () {
controller.reloadSilent();
},
child: const Text("下拉刷新-静默"),
),
],
),
body: BaseListWidget(
controller: controller,
requestData: (page, pageSize, success, error) async {
......
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_clx_base/flutter_clx_base.dart';
import 'package:flutter_clx_base/widget/state_layout.dart';
import 'package:flutter_spinkit/flutter_spinkit.dart';
......@@ -37,6 +38,7 @@ class BaseListWidget extends StatefulWidget {
class _BaseListWidgetState extends State<BaseListWidget> {
late BaseListController _controller;
ScrollController _scrollController = ScrollController();
final _CIProperties _headerProperties = _CIProperties(
name: 'Header',
alignment: MainAxisAlignment.center,
......@@ -121,7 +123,10 @@ class _BaseListWidgetState extends State<BaseListWidget> {
}
Widget buildScrollView() {
return CustomScrollView(slivers: buildSlivers());
return CustomScrollView(
slivers: buildSlivers(),
controller: _scrollController,
);
}
Future<void> _onRefresh() async {
......@@ -129,19 +134,23 @@ class _BaseListWidgetState extends State<BaseListWidget> {
_callReloading = false; // 重置自动刷新标识
_stateType = StateType.loading;
_page = 1;
await widget.requestData(
_page, widget.pageSize, _requestSuccess, _requestError);
await widget.requestData(_page, widget.pageSize,
(List? list) => _requestSuccess(list, resultPage: 1), _requestError);
}
Future<void> _onLoad() async {
_stateType = StateType.loading;
_page++;
var cPage = ++_page;
await widget.requestData(
_page, widget.pageSize, _requestSuccess, _requestError);
_page,
widget.pageSize,
(List? list) => _requestSuccess(list, resultPage: cPage),
_requestError);
}
void _requestSuccess(List? result) {
if (!mounted) {
void _requestSuccess(List? result, {int? resultPage}) {
if (!mounted || _page != resultPage) {
// 多次触发刷新数据,_page和resultPage不一致,不需要刷新
return;
}
result ??= [];
......@@ -340,6 +349,12 @@ class BaseListController {
_controller.callRefresh(force: true);
}
// 静默重新加载数据
void reloadSilent() async {
_listState?._scrollController.jumpTo(0);
_listState?._onRefresh();
}
// 刷新单个数据
void notifySingleItem(index, item) {
_listState?.notifySingleItem(index, item);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论