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

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

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