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

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

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