先看图,无图无真相~
![](https://i-blog.csdnimg.cn/blog_migrate/75ef611a08c56d22b0bf611ae14c82a3.gif)
具体实现如下:
创建load_state.dart
//四种视图状态
enum LoadState {
State_Success, State_Error, State_Loading, State_Empty }
///根据不同状态来展示不同的视图
class LoadStateLayout extends StatefulWidget {
final LoadState state; //页面状态
final Widget successWidget;//成功视图
final VoidCallback errorRetry; //错误事件处理
final VoidCallback emptyRetry; //空数据事件处理
LoadStateLayout(
{
Key key,
this.state = LoadState.State_Loading,//默认为加载状态
this.successWidget,
this.errorRetry,
this.emptyRetry
})
: super(key: key);
@override
_LoadStateLayoutState createState() => _LoadStateLayoutState();
}
class _LoadStateLayoutState extends State<LoadStateLayout> {
@override
Widget build(BuildContext context) {
return Container(
//宽高都充满屏幕剩余空间
width: double.infinity,
height: double.infinity,
child: _buildWidget,
);
}
///根据不同状态来显示不同的视图
Widget get _buildWidget {
switch (widget.state) {
case LoadState.State_Success:
return widget.successWidget;
break;
case LoadState.State_Error:
return _errorView;
break;
case LoadState.State_Loading:
return _loadingView;