| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- import 'package:flutter/material.dart';
- import '../../../core/l10n/app_localizations.dart';
- import '../../../core/theme/app_colors.dart';
- /// 网络错误占位体(无 Scaffold/AppBar)
- /// 用于嵌入已有页面内容区,需要完整路由页面时使用 [NetworkErrorScreen]。
- class NetworkErrorBody extends StatelessWidget {
- const NetworkErrorBody({super.key, required this.onRetry});
- final VoidCallback onRetry;
- @override
- Widget build(BuildContext context) {
- final cs = Theme.of(context).colorScheme;
- final l10n = AppLocalizations.of(context)!;
- return Center(
- child: Padding(
- padding: const EdgeInsets.symmetric(horizontal: 40),
- child: Column(
- mainAxisSize: MainAxisSize.min,
- children: [
- Container(
- width: 100, height: 100,
- decoration: const BoxDecoration(color: Color(0xFFF2F2F2), shape: BoxShape.circle),
- child: const Icon(Icons.wifi_off_rounded, size: 52, color: Color(0xFFBBBBBB)),
- ),
- const SizedBox(height: 28),
- Text(l10n.pageLoadFailed, style: TextStyle(color: cs.onSurface, fontSize: 17, fontWeight: FontWeight.w600)),
- const SizedBox(height: 10),
- Text(
- l10n.networkConnectionError,
- textAlign: TextAlign.center,
- style: TextStyle(color: cs.onSurface.withAlpha(153), fontSize: 13, height: 1.5),
- ),
- const SizedBox(height: 36),
- SizedBox(
- width: double.infinity, height: 50,
- child: FilledButton.icon(
- onPressed: onRetry,
- style: FilledButton.styleFrom(
- backgroundColor: AppColors.brand,
- foregroundColor: Colors.black,
- shape: const StadiumBorder(),
- ),
- icon: const Icon(Icons.refresh_rounded, size: 18),
- label: Text(l10n.reload, style: const TextStyle(fontSize: 15, fontWeight: FontWeight.w500)),
- ),
- ),
- ],
- ),
- ),
- );
- }
- }
|