2021-09-29 23:57:09 +00:00
|
|
|
import 'package:flutter/material.dart';
|
2021-11-11 03:00:38 +00:00
|
|
|
import 'package:pikapika/basic/config/ContentFailedReloadAction.dart';
|
2021-09-29 23:57:09 +00:00
|
|
|
|
2021-11-11 03:00:38 +00:00
|
|
|
import 'package:pikapika/basic/enum/ErrorTypes.dart';
|
2021-09-29 23:57:09 +00:00
|
|
|
|
|
|
|
class ContentError extends StatelessWidget {
|
|
|
|
final Object? error;
|
|
|
|
final StackTrace? stackTrace;
|
|
|
|
final Future<void> Function() onRefresh;
|
|
|
|
|
|
|
|
const ContentError({
|
|
|
|
Key? key,
|
|
|
|
required this.error,
|
|
|
|
required this.stackTrace,
|
|
|
|
required this.onRefresh,
|
|
|
|
}) : super(key: key);
|
|
|
|
|
|
|
|
@override
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
var type = errorType("$error");
|
|
|
|
late String message;
|
2021-11-02 07:54:34 +00:00
|
|
|
late IconData iconData;
|
2021-09-29 23:57:09 +00:00
|
|
|
switch (type) {
|
|
|
|
case ERROR_TYPE_NETWORK:
|
2021-11-02 07:54:34 +00:00
|
|
|
iconData = Icons.wifi_off_rounded;
|
2021-09-29 23:57:09 +00:00
|
|
|
message = "连接不上啦, 请检查网络";
|
|
|
|
break;
|
2021-09-30 07:12:23 +00:00
|
|
|
case ERROR_TYPE_PERMISSION:
|
2021-11-02 07:54:34 +00:00
|
|
|
iconData = Icons.highlight_off;
|
2021-09-30 07:12:23 +00:00
|
|
|
message = "没有权限或路径不可用";
|
|
|
|
break;
|
2021-10-22 02:24:39 +00:00
|
|
|
case ERROR_TYPE_TIME:
|
2021-11-02 07:54:34 +00:00
|
|
|
iconData = Icons.timer_off;
|
2021-10-22 02:24:39 +00:00
|
|
|
message = "请检查设备时间";
|
|
|
|
break;
|
2021-10-27 08:29:19 +00:00
|
|
|
case ERROR_TYPE_UNDER_REVIEW:
|
2021-11-02 07:54:34 +00:00
|
|
|
iconData = Icons.highlight_off;
|
2021-10-23 02:59:18 +00:00
|
|
|
message = "资源未审核或不可用";
|
|
|
|
break;
|
2021-09-29 23:57:09 +00:00
|
|
|
default:
|
2021-11-02 07:54:34 +00:00
|
|
|
iconData = Icons.highlight_off;
|
2021-09-29 23:57:09 +00:00
|
|
|
message = "啊哦, 被玩坏了";
|
|
|
|
break;
|
|
|
|
}
|
2021-09-30 07:12:23 +00:00
|
|
|
return LayoutBuilder(
|
|
|
|
builder: (BuildContext context, BoxConstraints constraints) {
|
|
|
|
print("$error");
|
|
|
|
print("$stackTrace");
|
|
|
|
var width = constraints.maxWidth;
|
|
|
|
var height = constraints.maxHeight;
|
|
|
|
var min = width < height ? width : height;
|
|
|
|
var iconSize = min / 2.3;
|
|
|
|
var textSize = min / 16;
|
|
|
|
var tipSize = min / 20;
|
|
|
|
var infoSize = min / 30;
|
|
|
|
if (contentFailedReloadAction ==
|
|
|
|
ContentFailedReloadAction.TOUCH_LOADER) {
|
|
|
|
return GestureDetector(
|
|
|
|
onTap: onRefresh,
|
|
|
|
child: ListView(
|
|
|
|
children: [
|
2022-03-17 03:31:25 +00:00
|
|
|
SizedBox(
|
2021-09-30 07:12:23 +00:00
|
|
|
height: height,
|
|
|
|
child: Column(
|
|
|
|
children: [
|
|
|
|
Expanded(child: Container()),
|
2022-03-17 03:31:25 +00:00
|
|
|
Icon(
|
|
|
|
iconData,
|
|
|
|
size: iconSize,
|
|
|
|
color: Colors.grey.shade600,
|
2021-09-30 07:12:23 +00:00
|
|
|
),
|
|
|
|
Container(height: min / 10),
|
|
|
|
Container(
|
2022-03-17 03:31:25 +00:00
|
|
|
padding: const EdgeInsets.only(
|
2021-09-30 07:12:23 +00:00
|
|
|
left: 30,
|
|
|
|
right: 30,
|
|
|
|
),
|
|
|
|
child: Text(
|
|
|
|
message,
|
|
|
|
style: TextStyle(fontSize: textSize),
|
|
|
|
textAlign: TextAlign.center,
|
|
|
|
),
|
|
|
|
),
|
|
|
|
Text('(点击刷新)', style: TextStyle(fontSize: tipSize)),
|
|
|
|
Container(height: min / 15),
|
|
|
|
Text('$error', style: TextStyle(fontSize: infoSize)),
|
|
|
|
Expanded(child: Container()),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
return RefreshIndicator(
|
|
|
|
onRefresh: onRefresh,
|
2021-09-29 23:57:09 +00:00
|
|
|
child: ListView(
|
|
|
|
children: [
|
2022-03-17 03:31:25 +00:00
|
|
|
SizedBox(
|
2021-09-29 23:57:09 +00:00
|
|
|
height: height,
|
|
|
|
child: Column(
|
|
|
|
children: [
|
|
|
|
Expanded(child: Container()),
|
2022-03-17 03:31:25 +00:00
|
|
|
Icon(
|
|
|
|
iconData,
|
|
|
|
size: iconSize,
|
|
|
|
color: Colors.grey.shade600,
|
2021-09-29 23:57:09 +00:00
|
|
|
),
|
|
|
|
Container(height: min / 10),
|
|
|
|
Container(
|
2022-03-17 03:31:25 +00:00
|
|
|
padding: const EdgeInsets.only(
|
2021-09-29 23:57:09 +00:00
|
|
|
left: 30,
|
|
|
|
right: 30,
|
|
|
|
),
|
|
|
|
child: Text(
|
|
|
|
message,
|
|
|
|
style: TextStyle(fontSize: textSize),
|
|
|
|
textAlign: TextAlign.center,
|
|
|
|
),
|
|
|
|
),
|
2021-09-30 07:12:23 +00:00
|
|
|
Text('(下拉刷新)', style: TextStyle(fontSize: tipSize)),
|
2021-09-29 23:57:09 +00:00
|
|
|
Container(height: min / 15),
|
|
|
|
Text('$error', style: TextStyle(fontSize: infoSize)),
|
|
|
|
Expanded(child: Container()),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
);
|
2021-09-30 07:12:23 +00:00
|
|
|
},
|
|
|
|
);
|
2021-09-29 23:57:09 +00:00
|
|
|
}
|
|
|
|
}
|