refactor(app): 迁移 4 个页面到共享 EmptyStateWidget + ErrorStateWidget
Some checks failed
Main Merge / backend (push) Has been cancelled
Main Merge / frontend (push) Has been cancelled

迁移统计:
- discover_page: _buildError → ErrorStateWidget, _buildEmptyHint → EmptyStateWidget
- sticker_library_page: 错误 + 空列表 → 共享组件
- class_page: 错误/班级列表空/日记墙空/话题空 → 共享组件 (4 处)
- calendar_page: CalendarError → ErrorStateWidget

统一体验: 所有页面空状态使用一致的 icon + title + subtitle + CTA 布局
This commit is contained in:
iven
2026-06-07 13:42:56 +08:00
parent 2f96f9a4f4
commit 346c751cbb
4 changed files with 45 additions and 119 deletions

View File

@@ -19,6 +19,8 @@ import '../../../core/theme/app_colors.dart';
import '../../../core/theme/app_radius.dart';
import '../../../core/theme/app_shadows.dart';
import '../../../core/theme/app_typography.dart';
import '../../../widgets/empty_state_widget.dart';
import '../../../widgets/error_state_widget.dart';
import '../bloc/discover_bloc.dart';
import '../models/discover_models.dart';
@@ -126,66 +128,19 @@ class DiscoverPage extends StatelessWidget {
/// 错误状态
Widget _buildError(BuildContext context, String message) {
return Column(
children: [
const _LoadingSkeleton(height: 140),
const SizedBox(height: DesignTokens.spacing24),
Container(
width: double.infinity,
padding: const EdgeInsets.all(DesignTokens.spacing16),
decoration: BoxDecoration(
color: AppColors.rose.withValues(alpha: 0.1),
borderRadius: AppRadius.mdBorder,
),
child: Column(
children: [
Icon(Icons.cloud_off_rounded,
size: 32, color: AppColors.rose),
const SizedBox(height: DesignTokens.spacing8),
Text(message,
style: TextStyle(
fontSize: 13,
color: Theme.of(context).colorScheme.onSurfaceVariant),
textAlign: TextAlign.center),
const SizedBox(height: DesignTokens.spacing12),
TextButton.icon(
onPressed: () => context
.read<DiscoverBloc>()
.add(const DiscoverLoadData()),
icon: const Icon(Icons.refresh_rounded, size: 18),
label: const Text('重试'),
),
],
),
),
],
return ErrorStateWidget(
message: message,
onRetry: () =>
context.read<DiscoverBloc>().add(const DiscoverLoadData()),
);
}
/// 空数据提示
Widget _buildEmptyHint(BuildContext context) {
return Padding(
padding: const EdgeInsets.symmetric(vertical: DesignTokens.spacing32),
child: Center(
child: Column(
children: [
const Text('', style: TextStyle(fontSize: 40)),
const SizedBox(height: DesignTokens.spacing12),
Text('还没有发现内容',
style: TextStyle(
fontSize: 15,
color: Theme.of(context).colorScheme.onSurfaceVariant,
)),
const SizedBox(height: 4),
Text('写下你的第一篇日记,出现在这里吧!',
style: TextStyle(
fontSize: 13,
color: Theme.of(context).colorScheme.onSurfaceVariant
.withValues(alpha: 0.7),
)),
],
),
),
return const EmptyStateWidget(
icon: Icons.explore_rounded,
title: '还没有发现内容',
subtitle: '试试写一篇日记分享给大家吧',
);
}