Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
F
flutter_clx_base
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
openSourceLibrary
flutter_clx_base
Commits
96767c85
提交
96767c85
authored
9月 08, 2023
作者:
shixiaochen
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
1、修复BaseListWidget多次触发自动刷新无反应问题
上级
780d581d
隐藏空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
177 行增加
和
6 行删除
+177
-6
CHANGELOG.md
CHANGELOG.md
+4
-2
sample.dart
example/lib/sample.dart
+5
-0
detail_logic.dart
example/lib/sample/list/detail/detail_logic.dart
+5
-0
detail_view.dart
example/lib/sample/list/detail/detail_view.dart
+27
-0
list1_logic.dart
example/lib/sample/list/list1/list1_logic.dart
+7
-0
list1_view.dart
example/lib/sample/list/list1/list1_view.dart
+110
-0
base_list_widget.dart
lib/widget/base_list_widget.dart
+19
-4
没有找到文件。
CHANGELOG.md
浏览文件 @
96767c85
...
...
@@ -25,4 +25,6 @@
## 1.1.2
*
修改BaseListWidget,①修复根据获取加载数据大小设置是否可上拉加载②去除canLoadMore标识(根据获取数据大小判断是否可上拉加载)
## 1.1.3
*
修改base_dio 去除基础bean类,修改为直接解析返回数据
\ No newline at end of file
*
修改base_dio 去除基础bean类,修改为直接解析返回数据
## 1.1.4
*
修复BaseListWidget多次触发自动刷新无反应问题
\ No newline at end of file
example/lib/sample.dart
浏览文件 @
96767c85
...
...
@@ -3,6 +3,7 @@ import 'package:flutter_clx_base/flutter_clx_base.dart';
import
'package:flutter_clx_base/widget/normal_dialog.dart'
;
import
'package:flutter_clx_base_example/sample/base_list_widget_test.dart'
;
import
'package:flutter_clx_base_example/sample/dio_widget_test.dart'
;
import
'package:flutter_clx_base_example/sample/list/list1/list1_view.dart'
;
import
'package:flutter_clx_base_example/sample/scroll_view.dart'
;
import
'package:flutter_clx_base_example/sample/search_appbar.dart'
;
...
...
@@ -56,6 +57,10 @@ class Sample extends StatelessWidget {
fullWidthButton:
true
,
onPressed:
()
=>
Get
.
to
(
const
SearchAppBarPage
()),
text:
'SearchAppBar'
),
GFButton
(
fullWidthButton:
true
,
onPressed:
()
=>
Get
.
to
(
List1Page
()),
text:
'BaseListWidget多次reload无法应问题'
),
],
);
}
...
...
example/lib/sample/list/detail/detail_logic.dart
0 → 100644
浏览文件 @
96767c85
import
'package:flutter_clx_base/flutter_clx_base.dart'
;
class
DetailLogic
extends
GetxController
{
}
example/lib/sample/list/detail/detail_view.dart
0 → 100644
浏览文件 @
96767c85
import
'package:flutter/material.dart'
;
import
'package:flutter_clx_base/flutter_clx_base.dart'
;
import
'package:flutter_clx_base_example/sample/list/list1/list1_logic.dart'
;
import
'detail_logic.dart'
;
class
DetailPage
extends
StatelessWidget
{
DetailPage
({
Key
?
key
})
:
super
(
key:
key
);
final
logic
=
Get
.
put
(
DetailLogic
());
@override
Widget
build
(
BuildContext
context
)
{
return
MyScaffold
(
title:
"详情"
,
children:
[
TextButton
(
onPressed:
()
{
findOtherLogic
<
List1Logic
>()?.
controller
.
reload
();
findOtherLogic
<
List1Logic
>()?.
controller
.
reload
();
Get
.
back
();
},
child:
const
Text
(
"刷新列表1"
))
],
);
}
}
example/lib/sample/list/list1/list1_logic.dart
0 → 100644
浏览文件 @
96767c85
import
'package:flutter_clx_base/flutter_clx_base.dart'
;
import
'package:flutter_clx_base/widget/base_list_widget.dart'
;
class
List1Logic
extends
GetxController
{
var
controller
=
BaseListController
();
}
example/lib/sample/list/list1/list1_view.dart
0 → 100644
浏览文件 @
96767c85
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/list/detail/detail_view.dart'
;
import
'list1_logic.dart'
;
class
List1Page
extends
StatelessWidget
{
List1Page
({
Key
?
key
})
:
super
(
key:
key
);
final
logic
=
Get
.
put
(
List1Logic
());
@override
Widget
build
(
BuildContext
context
)
{
return
MyScaffold
(
title:
'list1'
,
floatingActionButton:
Row
(
children:
[
TextButton
(
onPressed:
()
{
logic
.
controller
.
reload
();
},
child:
const
Text
(
"下拉刷新"
),
),
TextButton
(
onPressed:
()
{
Get
.
to
(
DetailPage
());
},
child:
const
Text
(
"detail"
),
),
],
),
body:
BaseListWidget
(
controller:
logic
.
controller
,
requestData:
(
page
,
pageSize
,
success
,
error
)
async
{
await
Future
.
delayed
(
const
Duration
(
seconds:
1
));
if
(
page
==
1
)
{
success
([
{
"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
([
{
"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
InkWell
(
onTap:
()
{
item
[
"value"
]
=
"修改item
${index + 1}
"
;
logic
.
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,
// ),
// footer: ClassicFooter(
// dragText: 'Pull to load'.tr,
// armedText: 'Release ready'.tr,
// readyText: 'Loading...'.tr,
// processingText: 'Loading...'.tr,
// processedText: 'Succeeded'.tr,
// noMoreText: 'No more'.tr,
// failedText: 'Failed'.tr,
// messageText: 'Last updated at %T'.tr,
// ),
// startLoadWidget: Container(
// decoration: BoxDecoration(
// color: themeData.colorScheme.primary,
// borderRadius: BorderRadius.circular(10),
// ),
// alignment: Alignment.center,
// width: double.infinity,
// height: 300,
// // child: const RiveAnimation.asset(
// // 'assets/rive/highway-truck.riv',
// // fit: BoxFit.cover,
// // ),
// ),
),
);
}
}
lib/widget/base_list_widget.dart
浏览文件 @
96767c85
...
...
@@ -54,7 +54,8 @@ class _BaseListWidgetState extends State<BaseListWidget> {
bool
_startLoadingFinish
=
false
;
// 首次进入loading加载完成标识
StateType
_stateType
=
StateType
.
loading
;
// 列表状态
// 禁止手动触发滚动,处理刷新过程中禁止滚动列表操作
bool
disallowScroll
=
false
;
bool
_disallowScroll
=
false
;
bool
_callReloading
=
false
;
// 触发自动刷新标识
@override
void
initState
()
{
...
...
@@ -103,7 +104,7 @@ class _BaseListWidgetState extends State<BaseListWidget> {
),
// 列表刷新时,增加透明遮罩,禁止滚动列表
Visibility
(
visible:
disallowScroll
,
visible:
_
disallowScroll
,
child:
Container
(
color:
Colors
.
transparent
,
width:
double
.
infinity
,
...
...
@@ -118,7 +119,8 @@ class _BaseListWidgetState extends State<BaseListWidget> {
}
Future
<
void
>
_onRefresh
()
async
{
disallowScroll
=
false
;
// 开始刷新-重置标志位
_disallowScroll
=
false
;
// 开始刷新-重置标志位
_callReloading
=
false
;
// 重置自动刷新标识
_stateType
=
StateType
.
loading
;
_page
=
1
;
await
widget
.
requestData
(
...
...
@@ -274,10 +276,18 @@ class _BaseListWidgetState extends State<BaseListWidget> {
void
setDisallowScroll
()
{
if
(
mounted
)
{
setState
(()
{
disallowScroll
=
true
;
_
disallowScroll
=
true
;
});
}
}
// 触发自动刷新列表
void
onCallReload
()
{
_callReloading
=
true
;
}
// 自动刷新标识
bool
get
reloadFlag
=>
_callReloading
;
}
// 列表控制器
...
...
@@ -311,6 +321,11 @@ class BaseListController {
// 重新加载数据
void
reload
()
{
// 多次触发自动刷新无反应问题
if
(
_listState
?.
reloadFlag
==
true
)
{
return
;
}
_listState
?.
onCallReload
();
// 设置自动刷新标识
_listState
?.
setDisallowScroll
();
// 禁止手动触发滚动
// force true 强制刷新,解决快速刷新只触发一次问题
_controller
.
callRefresh
(
force:
true
);
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论