import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../../providers/bill_provider.dart'; import '../../../utils/date_util.dart'; /// 月份切换条:‹ 2026年9月 › class MonthSwitcher extends ConsumerWidget { const MonthSwitcher({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { final anchor = ref.watch(monthAnchorProvider); final notifier = ref.read(monthAnchorProvider.notifier); return Container( padding: const EdgeInsets.symmetric(horizontal: 6, vertical: 2), decoration: BoxDecoration( color: Colors.white.withValues(alpha: 0.85), borderRadius: BorderRadius.circular(20), ), child: Row( mainAxisSize: MainAxisSize.min, children: [ _iconButton( icon: Icons.chevron_left, tooltip: '上一月', onTap: notifier.prev, ), GestureDetector( onTap: () => _pickMonth(context, ref), child: Padding( padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 6), child: Row( mainAxisSize: MainAxisSize.min, children: [ Text( formatMonthTitle(anchor), style: const TextStyle( fontSize: 14, fontWeight: FontWeight.w600, color: Color(0xFF5D4037), ), ), const SizedBox(width: 4), const Icon(Icons.arrow_drop_down, size: 18, color: Color(0xFF8D6E63)), ], ), ), ), _iconButton( icon: Icons.chevron_right, tooltip: '下一月', // 不允许超过当前月 onTap: notifier.canGoNext ? notifier.next : null, ), ], ), ); } Widget _iconButton({ required IconData icon, required String tooltip, VoidCallback? onTap, }) { final enabled = onTap != null; return IconButton( icon: Icon(icon), iconSize: 20, visualDensity: VisualDensity.compact, padding: EdgeInsets.zero, constraints: const BoxConstraints(minWidth: 32, minHeight: 32), color: enabled ? const Color(0xFF5D4037) : const Color(0xFFBCAAA4), tooltip: tooltip, onPressed: onTap, ); } Future _pickMonth(BuildContext context, WidgetRef ref) async { final anchor = ref.read(monthAnchorProvider); final picked = await showDatePicker( context: context, initialDate: anchor, initialDatePickerMode: DatePickerMode.year, firstDate: DateTime(2000), lastDate: DateTime(2100), ); if (picked != null) { ref.read(monthAnchorProvider.notifier).pick(picked); } } }