showNetworkError static method
void
showNetworkError(
- BuildContext context,
- int statusCode,
- String userMessage, {
- VoidCallback? onRetry,
显示网络错误(专门处理NetworkException)
Implementation
static void showNetworkError(
BuildContext context,
int statusCode,
String userMessage, {
VoidCallback? onRetry,
}) {
String title;
IconData icon;
switch (statusCode) {
case 404:
title = '功能暂未开放';
icon = Icons.construction_outlined;
break;
case 401:
case 403:
title = '访问受限';
icon = Icons.lock_outline;
break;
case 500:
case 503:
title = '服务异常';
icon = Icons.cloud_off_outlined;
break;
default:
title = '请求失败';
icon = Icons.error_outline;
}
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Container(
padding: const EdgeInsets.symmetric(vertical: 12),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Icon(
icon,
color: const Color(0xFFE53935),
size: 24,
),
const SizedBox(width: 12),
Expanded(
child: Text(
title,
style: const TextStyle(
fontFamily: 'AlibabaPuHuiTi',
fontSize: 15,
fontWeight: FontWeight.w600,
color: Color(0xFFC62828),
),
),
),
],
),
const SizedBox(height: 8),
Padding(
padding: const EdgeInsets.only(left: 36),
child: Text(
userMessage,
style: const TextStyle(
fontFamily: 'AlibabaPuHuiTi',
fontSize: 13,
color: Color(0xFF666666),
),
),
),
],
),
),
backgroundColor: const Color(0xFFFEF5F5),
behavior: SnackBarBehavior.floating,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
side: BorderSide(
color: const Color(0xFFE53935).withOpacity(0.2),
width: 1.5,
),
),
margin: const EdgeInsets.all(16),
elevation: 4,
duration: const Duration(seconds: 4),
action: onRetry != null
? SnackBarAction(
label: '重试',
textColor: const Color(0xFFE53935),
onPressed: onRetry,
)
: null,
),
);
}