import 'package:flutter/material.dart'; import '../../../../core/theme/design_tokens.dart'; import '../../../../shared/widgets/app_loading_indicator.dart'; class HomeWaitingIndicator extends StatelessWidget { const HomeWaitingIndicator({super.key, required this.label}); final String label; @override Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.fromLTRB(20, 0, 20, 20), child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ SizedBox( width: 18, height: 18, child: const AppLoadingIndicator( variant: AppLoadingVariant.inline, size: 18, strokeWidth: 2, color: AppColors.blue600, trackColor: AppColors.blue100, ), ), SizedBox(width: AppSpacing.sm), Text( label, style: const TextStyle(fontSize: 14, color: AppColors.slate500), ), ], ), ); } } class HomeDateDivider extends StatelessWidget { const HomeDateDivider({super.key, required this.date}); final DateTime date; @override Widget build(BuildContext context) { final now = DateTime.now(); final weekdays = ['周一', '周二', '周三', '周四', '周五', '周六', '周日']; final weekday = weekdays[date.weekday - 1]; final label = date.year == now.year ? '${date.month}月${date.day}日 $weekday' : '${date.year}年${date.month}月${date.day}日 $weekday'; return Container( padding: const EdgeInsets.symmetric(vertical: 12), alignment: Alignment.center, child: Text( label, style: const TextStyle(fontSize: 12, color: AppColors.slate400), ), ); } } class HomeLoadMoreButton extends StatelessWidget { const HomeLoadMoreButton({ super.key, required this.isLoading, required this.onTap, }); final bool isLoading; final VoidCallback? onTap; @override Widget build(BuildContext context) { return GestureDetector( onTap: isLoading ? null : onTap, child: Container( padding: const EdgeInsets.symmetric(vertical: 8), alignment: Alignment.center, child: isLoading ? const AppLoadingIndicator( variant: AppLoadingVariant.inline, size: 14, strokeWidth: 1.5, color: AppColors.slate400, trackColor: AppColors.slate200, ) : const Text( '查看历史', style: TextStyle(fontSize: 12, color: AppColors.slate400), ), ), ); } }