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

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

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