提交 4e70f681 authored 作者: shixiaochen's avatar shixiaochen

1、增加方法assetImageExist(检查本地资源文件是否存在);2、优化BaseListWidget(①增加状态-加载中、加载成功、加载失败②列表获取错误toast③设置空省图);

上级 21b2e786
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
class ImageUtils {
......@@ -19,5 +20,14 @@ class ImageUtils {
static String getSVGPath(String name, {String format = 'svg'}) {
return 'assets/images/$name.$format';
}
}
static Future<bool> assetImageExist(String? name,
{String format = 'png'}) async {
try {
await rootBundle.load(getImgPath(name, format: format));
return true;
} catch (e) {
return false;
}
}
}
import 'package:easy_refresh/easy_refresh.dart';
import 'package:flutter/material.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';
export 'package:easy_refresh/easy_refresh.dart';
......@@ -49,6 +49,9 @@ class _BaseListWidgetState extends State<BaseListWidget> {
final List<dynamic> _dataList = [];
int _page = 1;
int _count = 0;
bool startLoadingFinish = false; // 首次进入loading加载完成标识
StateType stateType = StateType.loading; // 列表状态
@override
void initState() {
super.initState();
......@@ -72,6 +75,7 @@ class _BaseListWidgetState extends State<BaseListWidget> {
builder: (ctx, state) {
if (state.mode == IndicatorMode.inactive ||
state.mode == IndicatorMode.done) {
startLoadingFinish = true;
return const SizedBox();
}
return Container(
......@@ -87,7 +91,7 @@ class _BaseListWidgetState extends State<BaseListWidget> {
},
),
onRefresh: _onRefresh,
onLoad: widget.noMoreLoad? null : _onLoad,
onLoad: widget.noMoreLoad ? null : _onLoad,
child: buildScrollView(),
);
}
......@@ -99,12 +103,14 @@ class _BaseListWidgetState extends State<BaseListWidget> {
}
Future<void> _onRefresh() async {
stateType = StateType.loading;
_page = 1;
await widget.requestData(
_page, widget.pageSize, _requestSuccess, _requestError);
}
Future<void> _onLoad() async {
stateType = StateType.loading;
_page++;
await widget.requestData(
_page, widget.pageSize, _requestSuccess, _requestError);
......@@ -132,12 +138,15 @@ class _BaseListWidgetState extends State<BaseListWidget> {
? IndicatorResult.noMore
: IndicatorResult.success);
}
stateType = isEmpty ? StateType.empty : StateType.success;
}
void _requestError(r, s) {
void _requestError(code, msg) {
if (!mounted) {
return;
}
stateType = StateType.error;
ToastUtil.showToast(msg);
if (_page == 1) {
_controller.finishRefresh();
} else {
......@@ -191,18 +200,20 @@ class _BaseListWidgetState extends State<BaseListWidget> {
List<Widget> buildSlivers() {
final header = buildHeader();
final footer = buildFooter();
Widget? emptyWidget;
if (isEmpty) {
emptyWidget = widget.emptyWidget;
}
return [
if (header.position == IndicatorPosition.locator)
const HeaderLocator.sliver(),
if (emptyWidget != null)
if (isEmpty && startLoadingFinish)
SliverFillViewport(
delegate: SliverChildBuilderDelegate(
(context, index) {
return emptyWidget;
return widget.emptyWidget ??
StateLayout(
type: stateType,
emptyImg: "default_drawing_1",
errorImg: "default_drawing_5",
onRefresh: _controller.reload,
);
},
childCount: 1,
),
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论