opt: HttpError
This commit is contained in:
@ -7,6 +7,7 @@ class HttpError extends StatelessWidget {
|
|||||||
required this.fn,
|
required this.fn,
|
||||||
this.btnText,
|
this.btnText,
|
||||||
this.isShowBtn = true,
|
this.isShowBtn = true,
|
||||||
|
this.isInSliver = true,
|
||||||
super.key,
|
super.key,
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -14,46 +15,42 @@ class HttpError extends StatelessWidget {
|
|||||||
final Function()? fn;
|
final Function()? fn;
|
||||||
final String? btnText;
|
final String? btnText;
|
||||||
final bool isShowBtn;
|
final bool isShowBtn;
|
||||||
|
final bool isInSliver;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return SliverToBoxAdapter(
|
Color primary = Theme.of(context).colorScheme.primary;
|
||||||
child: SizedBox(
|
final errorContent = SizedBox(
|
||||||
height: 400,
|
height: 400,
|
||||||
child: Column(
|
child: Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.center,
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
SvgPicture.asset(
|
SvgPicture.asset("assets/images/error.svg", height: 200),
|
||||||
"assets/images/error.svg",
|
const SizedBox(height: 30),
|
||||||
height: 200,
|
Text(
|
||||||
),
|
errMsg ?? '请求异常',
|
||||||
const SizedBox(height: 30),
|
textAlign: TextAlign.center,
|
||||||
Text(
|
style: Theme.of(context).textTheme.titleSmall,
|
||||||
errMsg ?? '请求异常',
|
),
|
||||||
textAlign: TextAlign.center,
|
const SizedBox(height: 20),
|
||||||
style: Theme.of(context).textTheme.titleSmall,
|
if (isShowBtn)
|
||||||
),
|
FilledButton.tonal(
|
||||||
const SizedBox(height: 20),
|
onPressed: () => fn?.call(),
|
||||||
if (isShowBtn)
|
style: ButtonStyle(
|
||||||
FilledButton.tonal(
|
backgroundColor: MaterialStateProperty.resolveWith((states) {
|
||||||
onPressed: () {
|
return primary.withAlpha(20);
|
||||||
fn!();
|
}),
|
||||||
},
|
|
||||||
style: ButtonStyle(
|
|
||||||
backgroundColor: MaterialStateProperty.resolveWith((states) {
|
|
||||||
return Theme.of(context).colorScheme.primary.withAlpha(20);
|
|
||||||
}),
|
|
||||||
),
|
|
||||||
child: Text(
|
|
||||||
btnText ?? '点击重试',
|
|
||||||
style:
|
|
||||||
TextStyle(color: Theme.of(context).colorScheme.primary),
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
],
|
child: Text(btnText ?? '点击重试', style: TextStyle(color: primary)),
|
||||||
),
|
),
|
||||||
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
if (isInSliver) {
|
||||||
|
return SliverToBoxAdapter(child: errorContent);
|
||||||
|
} else {
|
||||||
|
return Center(child: errorContent);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -183,8 +183,10 @@ class _BangumiPageState extends State<BangumiPage>
|
|||||||
return HttpError(
|
return HttpError(
|
||||||
errMsg: data['msg'],
|
errMsg: data['msg'],
|
||||||
fn: () {
|
fn: () {
|
||||||
_futureBuilderFuture =
|
setState(() {
|
||||||
_bangumidController.queryBangumiListFeed();
|
_futureBuilderFuture =
|
||||||
|
_bangumidController.queryBangumiListFeed();
|
||||||
|
});
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -77,10 +77,10 @@ class _BlackListPageState extends State<BlackListPage> {
|
|||||||
List<BlackListItem> list = _blackListController.blackList;
|
List<BlackListItem> list = _blackListController.blackList;
|
||||||
return Obx(
|
return Obx(
|
||||||
() => list.isEmpty
|
() => list.isEmpty
|
||||||
? CustomScrollView(
|
? HttpError(
|
||||||
slivers: [
|
errMsg: '你没有拉黑任何人哦~_~',
|
||||||
HttpError(errMsg: '你没有拉黑任何人哦~_~', fn: () => {})
|
fn: () => {},
|
||||||
],
|
isInSliver: false,
|
||||||
)
|
)
|
||||||
: ListView.builder(
|
: ListView.builder(
|
||||||
controller: scrollController,
|
controller: scrollController,
|
||||||
@ -119,13 +119,10 @@ class _BlackListPageState extends State<BlackListPage> {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
return CustomScrollView(
|
return HttpError(
|
||||||
slivers: [
|
errMsg: data['msg'],
|
||||||
HttpError(
|
fn: () => _blackListController.queryBlacklist(),
|
||||||
errMsg: data['msg'],
|
isInSliver: false,
|
||||||
fn: () => _blackListController.queryBlacklist(),
|
|
||||||
)
|
|
||||||
],
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -103,17 +103,14 @@ class _FansPageState extends State<FansPage> {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
return CustomScrollView(
|
return HttpError(
|
||||||
physics: const NeverScrollableScrollPhysics(),
|
errMsg: data['msg'],
|
||||||
slivers: [
|
fn: () {
|
||||||
HttpError(
|
setState(() {
|
||||||
errMsg: data['msg'],
|
_futureBuilderFuture = _fansController.queryFans('init');
|
||||||
fn: () {
|
});
|
||||||
_futureBuilderFuture =
|
},
|
||||||
_fansController.queryFans('init');
|
isInSliver: false,
|
||||||
},
|
|
||||||
)
|
|
||||||
],
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -112,23 +112,19 @@ class _FavPageState extends State<FavPage> {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
return CustomScrollView(
|
return HttpError(
|
||||||
physics: const NeverScrollableScrollPhysics(),
|
errMsg: data?['msg'] ?? '请求异常',
|
||||||
slivers: [
|
btnText: data?['code'] == -101 ? '去登录' : null,
|
||||||
HttpError(
|
fn: () {
|
||||||
errMsg: data?['msg'] ?? '请求异常',
|
if (data?['code'] == -101) {
|
||||||
btnText: data?['code'] == -101 ? '去登录' : null,
|
RoutePush.loginRedirectPush();
|
||||||
fn: () {
|
} else {
|
||||||
if (data?['code'] == -101) {
|
setState(() {
|
||||||
RoutePush.loginRedirectPush();
|
_futureBuilderFuture = _favController.queryFavFolder();
|
||||||
} else {
|
});
|
||||||
setState(() {
|
}
|
||||||
_futureBuilderFuture = _favController.queryFavFolder();
|
},
|
||||||
});
|
isInSliver: false,
|
||||||
}
|
|
||||||
},
|
|
||||||
),
|
|
||||||
],
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -94,13 +94,14 @@ class _FollowListState extends State<FollowList> {
|
|||||||
: const CustomScrollView(slivers: [NoData()]),
|
: const CustomScrollView(slivers: [NoData()]),
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
return CustomScrollView(
|
return HttpError(
|
||||||
slivers: [
|
errMsg: data['msg'],
|
||||||
HttpError(
|
fn: () {
|
||||||
errMsg: data['msg'],
|
setState(() {
|
||||||
fn: () => widget.ctr.queryFollowings('init'),
|
_futureBuilderFuture = widget.ctr.queryFollowings('init');
|
||||||
)
|
});
|
||||||
],
|
},
|
||||||
|
isInSliver: false,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -112,13 +112,10 @@ class _OwnerFollowListState extends State<OwnerFollowList>
|
|||||||
: const CustomScrollView(slivers: [NoData()]),
|
: const CustomScrollView(slivers: [NoData()]),
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
return CustomScrollView(
|
return HttpError(
|
||||||
slivers: [
|
errMsg: data['msg'],
|
||||||
HttpError(
|
fn: () => widget.ctr.queryFollowings('init'),
|
||||||
errMsg: data['msg'],
|
isInSliver: false,
|
||||||
fn: () => widget.ctr.queryFollowings('init'),
|
|
||||||
)
|
|
||||||
],
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -82,10 +82,10 @@ class _FollowSearchPageState extends State<FollowSearchPage> {
|
|||||||
if (snapshot.connectionState == ConnectionState.done) {
|
if (snapshot.connectionState == ConnectionState.done) {
|
||||||
var data = snapshot.data;
|
var data = snapshot.data;
|
||||||
if (data == null) {
|
if (data == null) {
|
||||||
return CustomScrollView(
|
return HttpError(
|
||||||
slivers: [
|
errMsg: snapshot.data['msg'],
|
||||||
HttpError(errMsg: snapshot.data['msg'], fn: reRequest)
|
fn: reRequest,
|
||||||
],
|
isInSliver: false,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (data['status']) {
|
if (data['status']) {
|
||||||
@ -101,15 +101,17 @@ class _FollowSearchPageState extends State<FollowSearchPage> {
|
|||||||
);
|
);
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
: CustomScrollView(
|
: HttpError(
|
||||||
slivers: [HttpError(errMsg: '未搜索到结果', fn: reRequest)],
|
errMsg: '未搜索到结果',
|
||||||
|
fn: reRequest,
|
||||||
|
isInSliver: false,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
return CustomScrollView(
|
return HttpError(
|
||||||
slivers: [
|
errMsg: snapshot.data['msg'],
|
||||||
HttpError(errMsg: snapshot.data['msg'], fn: reRequest)
|
fn: reRequest,
|
||||||
],
|
isInSliver: false,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -380,13 +380,10 @@ class _HtmlRenderPageState extends State<HtmlRenderPage>
|
|||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
// 请求错误
|
// 请求错误
|
||||||
return CustomScrollView(
|
return HttpError(
|
||||||
slivers: [
|
errMsg: data['msg'],
|
||||||
HttpError(
|
fn: () => setState(() {}),
|
||||||
errMsg: data['msg'],
|
isInSliver: false,
|
||||||
fn: () => setState(() {}),
|
|
||||||
)
|
|
||||||
],
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -138,16 +138,10 @@ class _MemberArticlePageState extends State<MemberArticlePage> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildError(String errMsg) {
|
Widget _buildError(String errMsg) {
|
||||||
return CustomScrollView(
|
return HttpError(
|
||||||
physics: const NeverScrollableScrollPhysics(),
|
errMsg: errMsg,
|
||||||
slivers: [
|
fn: () {},
|
||||||
SliverToBoxAdapter(
|
isInSliver: false,
|
||||||
child: HttpError(
|
|
||||||
errMsg: errMsg,
|
|
||||||
fn: () {},
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -164,13 +164,10 @@ class _MemberSearchPageState extends State<MemberSearchPage>
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
return CustomScrollView(
|
return HttpError(
|
||||||
slivers: <Widget>[
|
errMsg: data['msg'],
|
||||||
HttpError(
|
fn: () => setState(() {}),
|
||||||
errMsg: data['msg'],
|
isInSliver: false,
|
||||||
fn: () => setState(() {}),
|
|
||||||
)
|
|
||||||
],
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -85,18 +85,14 @@ class _MessageLikePageState extends State<MessageLikePage> {
|
|||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
// 请求错误
|
// 请求错误
|
||||||
return CustomScrollView(
|
return HttpError(
|
||||||
slivers: [
|
errMsg: snapshot.data['msg'],
|
||||||
HttpError(
|
fn: () {
|
||||||
errMsg: snapshot.data['msg'],
|
setState(() {
|
||||||
fn: () {
|
_futureBuilderFuture = _messageLikeCtr.queryMessageLike();
|
||||||
setState(() {
|
});
|
||||||
_futureBuilderFuture =
|
},
|
||||||
_messageLikeCtr.queryMessageLike();
|
isInSliver: false,
|
||||||
});
|
|
||||||
},
|
|
||||||
)
|
|
||||||
],
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -82,18 +82,15 @@ class _MessageReplyPageState extends State<MessageReplyPage> {
|
|||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
// 请求错误
|
// 请求错误
|
||||||
return CustomScrollView(
|
return HttpError(
|
||||||
slivers: [
|
errMsg: snapshot.data['msg'],
|
||||||
HttpError(
|
fn: () {
|
||||||
errMsg: snapshot.data['msg'],
|
setState(() {
|
||||||
fn: () {
|
_futureBuilderFuture =
|
||||||
setState(() {
|
_messageReplyCtr.queryMessageReply();
|
||||||
_futureBuilderFuture =
|
});
|
||||||
_messageReplyCtr.queryMessageReply();
|
},
|
||||||
});
|
isInSliver: false,
|
||||||
},
|
|
||||||
)
|
|
||||||
],
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -63,18 +63,15 @@ class _MessageSystemPageState extends State<MessageSystemPage> {
|
|||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
// 请求错误
|
// 请求错误
|
||||||
return CustomScrollView(
|
return HttpError(
|
||||||
slivers: [
|
errMsg: snapshot.data['msg'],
|
||||||
HttpError(
|
fn: () {
|
||||||
errMsg: snapshot.data['msg'],
|
setState(() {
|
||||||
fn: () {
|
_futureBuilderFuture =
|
||||||
setState(() {
|
_messageSystemCtr.queryMessageSystem();
|
||||||
_futureBuilderFuture =
|
});
|
||||||
_messageSystemCtr.queryMessageSystem();
|
},
|
||||||
});
|
isInSliver: false,
|
||||||
},
|
|
||||||
)
|
|
||||||
],
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -187,13 +187,10 @@ class _SearchPageState extends State<SearchPage> with RouteAware {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
return CustomScrollView(
|
return HttpError(
|
||||||
slivers: [
|
errMsg: data['msg'],
|
||||||
HttpError(
|
fn: () => setState(() {}),
|
||||||
errMsg: data['msg'],
|
isInSliver: false,
|
||||||
fn: () => setState(() {}),
|
|
||||||
)
|
|
||||||
],
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -109,33 +109,25 @@ class _SearchPanelState extends State<SearchPanel>
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
return CustomScrollView(
|
return HttpError(
|
||||||
physics: const NeverScrollableScrollPhysics(),
|
errMsg: data['msg'],
|
||||||
slivers: [
|
fn: () {
|
||||||
HttpError(
|
setState(() {
|
||||||
errMsg: data['msg'],
|
_searchPanelController.onSearch();
|
||||||
fn: () {
|
});
|
||||||
setState(() {
|
},
|
||||||
_searchPanelController.onSearch();
|
isInSliver: false,
|
||||||
});
|
|
||||||
},
|
|
||||||
),
|
|
||||||
],
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return CustomScrollView(
|
return HttpError(
|
||||||
physics: const NeverScrollableScrollPhysics(),
|
errMsg: '没有相关数据',
|
||||||
slivers: [
|
fn: () {
|
||||||
HttpError(
|
setState(() {
|
||||||
errMsg: '没有相关数据',
|
_searchPanelController.onSearch();
|
||||||
fn: () {
|
});
|
||||||
setState(() {
|
},
|
||||||
_searchPanelController.onSearch();
|
isInSliver: false,
|
||||||
});
|
|
||||||
},
|
|
||||||
),
|
|
||||||
],
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -174,14 +174,11 @@ Widget searchArticlePanel(BuildContext context, ctr, list) {
|
|||||||
);
|
);
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
: CustomScrollView(
|
: HttpError(
|
||||||
slivers: [
|
errMsg: '没有数据',
|
||||||
HttpError(
|
isShowBtn: false,
|
||||||
errMsg: '没有数据',
|
fn: () => {},
|
||||||
isShowBtn: false,
|
isInSliver: false,
|
||||||
fn: () => {},
|
|
||||||
)
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -46,14 +46,11 @@ class SearchVideoPanel extends StatelessWidget {
|
|||||||
);
|
);
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
: CustomScrollView(
|
: HttpError(
|
||||||
slivers: [
|
errMsg: '没有数据',
|
||||||
HttpError(
|
isShowBtn: false,
|
||||||
errMsg: '没有数据',
|
fn: () => {},
|
||||||
isShowBtn: false,
|
isInSliver: false,
|
||||||
fn: () => {},
|
|
||||||
)
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
// 分类筛选
|
// 分类筛选
|
||||||
|
|||||||
@ -68,30 +68,27 @@ class _SubPageState extends State<SubPage> {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
return const CustomScrollView(
|
return const HttpError(
|
||||||
physics: NeverScrollableScrollPhysics(),
|
errMsg: '',
|
||||||
slivers: [HttpError(errMsg: '', btnText: '没有数据', fn: null)],
|
btnText: '没有数据',
|
||||||
|
fn: null,
|
||||||
|
isInSliver: false,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return CustomScrollView(
|
return HttpError(
|
||||||
physics: const NeverScrollableScrollPhysics(),
|
errMsg: data?['msg'] ?? '请求异常',
|
||||||
slivers: [
|
btnText: data?['code'] == -101 ? '去登录' : null,
|
||||||
HttpError(
|
fn: () {
|
||||||
errMsg: data?['msg'] ?? '请求异常',
|
if (data?['code'] == -101) {
|
||||||
btnText: data?['code'] == -101 ? '去登录' : null,
|
RoutePush.loginRedirectPush();
|
||||||
fn: () {
|
} else {
|
||||||
if (data?['code'] == -101) {
|
setState(() {
|
||||||
RoutePush.loginRedirectPush();
|
_futureBuilderFuture = _subController.querySubFolder();
|
||||||
} else {
|
});
|
||||||
setState(() {
|
}
|
||||||
_futureBuilderFuture =
|
},
|
||||||
_subController.querySubFolder();
|
isInSliver: false,
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
),
|
|
||||||
],
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user