import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:hoshan/ui/theme/text.dart'; import 'package:hoshan/ui/widgets/components/button/loading_button.dart'; import 'package:hoshan/ui/widgets/components/dropdown/simple_dropdown.dart'; import 'package:shamsi_date/shamsi_date.dart'; class ShamsiYearMonthPicker extends StatefulWidget { final Function(Jalali) onDateSelected; final Jalali initailDate; const ShamsiYearMonthPicker( {super.key, required this.onDateSelected, required this.initailDate}); @override State createState() => _ShamsiYearMonthPickerState(); } class _ShamsiYearMonthPickerState extends State { late int selectedYear; late String selectedMonth; late int selectedMonthNum; List years = List.generate(50, (index) => Jalali.now().year - index) .map((year) => year.toString()) .toList(); List ms = [ "فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند" ]; late List mounths = [...ms]; @override void initState() { super.initState(); final now = widget.initailDate; if (now.year == Jalali.now().year) { while (mounths.length == Jalali.now().month + 1) { mounths.removeLast(); } } selectedYear = now.year; selectedMonth = now.formatter.mN; selectedMonthNum = now.month; // Ensure initial item matches one of the items in the dropdown list if (!years.contains(selectedYear.toString())) { selectedYear = int.parse(years.first); } if (!mounths.contains(selectedMonth)) { selectedMonth = mounths.first; selectedMonthNum = mounths.indexOf(selectedMonth) + 1; } } @override Widget build(BuildContext context) { return Column( mainAxisSize: MainAxisSize.min, children: [ // Year Picker Row( children: [ Expanded( child: Text( 'سال', textAlign: TextAlign.center, style: AppTextStyles.body2.copyWith( color: Theme.of(context).colorScheme.onSurface, fontWeight: FontWeight.bold), )), Expanded( child: Text('ماه', textAlign: TextAlign.center, style: AppTextStyles.body2.copyWith( color: Theme.of(context).colorScheme.onSurface, fontWeight: FontWeight.bold))), ], ), const SizedBox( height: 12, ), Row( children: [ Expanded( child: SimpleDropdown( initialItem: selectedYear.toString(), list: years, onSelect: (value) { setState(() { selectedYear = int.parse(years[value]); if (selectedYear == Jalali.now().year) { while (mounths.length == Jalali.now().month + 1) { mounths.removeLast(); } } else { mounths = [...ms]; } }); }, ), ), const SizedBox( width: 24, ), Expanded( child: SimpleDropdown( initialItem: selectedMonth.toString(), list: mounths, onSelect: (value) { setState(() { selectedMonth = mounths[value]; selectedMonthNum = value + 1; }); }, ), ), ], ), const SizedBox( height: 12, ), Row( children: [ Expanded( child: LoadingButton( width: double.infinity, onPressed: () { final selectedDate = Jalali(selectedYear, selectedMonthNum, 1); widget.onDateSelected(selectedDate); context.pop(); }, color: Theme.of(context).colorScheme.primary, child: Text( 'تأیید', style: AppTextStyles.body4.copyWith( color: Colors.white, fontWeight: FontWeight.bold), ), ), ), const SizedBox( width: 24, ), Expanded( child: LoadingButton( width: double.infinity, onPressed: () { context.pop(); }, isOutlined: true, color: Theme.of(context).colorScheme.primary, backgroundColor: Theme.of(context).dialogTheme.backgroundColor, child: Text( 'لغو', style: AppTextStyles.body4.copyWith( color: Theme.of(context).colorScheme.primary, fontWeight: FontWeight.bold), )), ), ], ) ], ); } }