提交 911eb6be authored 作者: shixiaochen's avatar shixiaochen

1、优化BaseListWidget(增加刷新单个item方法);

上级 4f317103
import 'package:flutter/material.dart'; import 'package:flutter/material.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/base_list_widget.dart'; import 'package:flutter_clx_base/widget/base_list_widget.dart';
import 'package:flutter_clx_base_example/sample/skeleton_item.dart';
// import 'package:rive/rive.dart'; // import 'package:rive/rive.dart';
class BaseListWidgetTest extends StatefulWidget { class BaseListWidgetTest extends StatefulWidget {
...@@ -12,45 +11,60 @@ class BaseListWidgetTest extends StatefulWidget { ...@@ -12,45 +11,60 @@ class BaseListWidgetTest extends StatefulWidget {
} }
class _BaseListWidgetTestState extends State<BaseListWidgetTest> { class _BaseListWidgetTestState extends State<BaseListWidgetTest> {
var controller = BaseListController();
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final themeData = Theme.of(context); final themeData = Theme.of(context);
return MyScaffold( return MyScaffold(
title: 'BaseListWidget', title: 'BaseListWidget',
body: BaseListWidget( body: BaseListWidget(
controller: controller,
requestData: (page, pageSize, success, error) async { requestData: (page, pageSize, success, error) async {
await Future.delayed(const Duration(seconds: 5)); await Future.delayed(const Duration(seconds: 5));
if (page == 1) { if (page == 1) {
success([ success([
'1', {"key": "1", "value": "1"},
'2', {"key": "2", "value": '2'},
'3', {"key": "3", "value": '3'},
'4', {"key": "4", "value": '4'},
'5', {"key": "5", "value": '5'},
'6', {"key": "6", "value": '6'},
'7', {"key": "7", "value": '7'},
'8', {"key": "8", "value": '8'},
'9', {"key": "9", "value": '9'},
'10', {"key": "10", "value": '10'},
]); ]);
} else { } else {
success([ success([
'11', {"key": "11", "value": "11"},
'12', {"key": "12", "value": '12'},
'13', {"key": "13", "value": '13'},
'14', {"key": "14", "value": '14'},
'15', {"key": "15", "value": '15'},
'16', {"key": "16", "value": '16'},
'17', {"key": "17", "value": '17'},
'18', {"key": "18", "value": '18'},
'19', {"key": "19", "value": '19'},
'20', {"key": "20", "value": '20'},
]); ]);
} }
}, },
pageSize: 10, pageSize: 10,
itemBuilder: (context, index, item) { itemBuilder: (context, index, item) {
return const SkeletonItem(); return InkWell(
onTap: () {
item["value"] = "修改item ${index + 1}";
controller.notifySingleItem(index, item);
},
child: Container(
height: 150.0,
color: Colors.white,
margin: const EdgeInsets.only(top: 10.0),
alignment: Alignment.center,
child: Text(item["value"]),
),
);
}, },
header: TaurusHeader( header: TaurusHeader(
skyColor: themeData.colorScheme.primary, skyColor: themeData.colorScheme.primary,
......
...@@ -58,6 +58,7 @@ class _BaseListWidgetState extends State<BaseListWidget> { ...@@ -58,6 +58,7 @@ class _BaseListWidgetState extends State<BaseListWidget> {
void initState() { void initState() {
super.initState(); super.initState();
_controller = widget.controller ?? BaseListController(); _controller = widget.controller ?? BaseListController();
_controller._bind(this); // 绑定 BaseListWidget state
} }
@override @override
...@@ -136,7 +137,7 @@ class _BaseListWidgetState extends State<BaseListWidget> { ...@@ -136,7 +137,7 @@ class _BaseListWidgetState extends State<BaseListWidget> {
_dataList.addAll(result!); _dataList.addAll(result!);
_count = _dataList.length; _count = _dataList.length;
}); });
_controller.c.finishLoad(result.length < widget.pageSize _controller.finishLoad(result.length < widget.pageSize
? IndicatorResult.noMore ? IndicatorResult.noMore
: IndicatorResult.success); : IndicatorResult.success);
} }
...@@ -210,6 +211,14 @@ class _BaseListWidgetState extends State<BaseListWidget> { ...@@ -210,6 +211,14 @@ class _BaseListWidgetState extends State<BaseListWidget> {
return _dataList[index]; return _dataList[index];
} }
// 刷新单个数据
void notifySingleItem(index, item) {
_dataList[index] = item;
if (mounted) {
setState(() {});
}
}
List<Widget> buildSlivers() { List<Widget> buildSlivers() {
final header = buildHeader(); final header = buildHeader();
final footer = buildFooter(); final footer = buildFooter();
...@@ -258,6 +267,12 @@ class _BaseListWidgetState extends State<BaseListWidget> { ...@@ -258,6 +267,12 @@ class _BaseListWidgetState extends State<BaseListWidget> {
// 列表控制器 // 列表控制器
class BaseListController { class BaseListController {
late EasyRefreshController _controller; late EasyRefreshController _controller;
_BaseListWidgetState? _listState; // listState
/// Binding with BaseListWidget state
void _bind(_BaseListWidgetState state) {
_listState = state;
}
BaseListController() { BaseListController() {
_controller = EasyRefreshController( _controller = EasyRefreshController(
...@@ -270,8 +285,8 @@ class BaseListController { ...@@ -270,8 +285,8 @@ class BaseListController {
_controller.finishRefresh(); _controller.finishRefresh();
} }
void finishLoad() { void finishLoad([IndicatorResult result = IndicatorResult.success]) {
_controller.finishLoad(); _controller.finishLoad(result);
} }
void resetFooter() { void resetFooter() {
...@@ -283,6 +298,11 @@ class BaseListController { ...@@ -283,6 +298,11 @@ class BaseListController {
_controller.callRefresh(); _controller.callRefresh();
} }
// 刷新单个数据
void notifySingleItem(index, item) {
_listState?.notifySingleItem(index, item);
}
get c => _controller; get c => _controller;
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论