proxibuy_bussiness/lib/presentation/pages/working_hours_dialog.dart

119 lines
4.0 KiB
Dart

import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
class WorkingHoursDialog extends StatefulWidget {
const WorkingHoursDialog({super.key});
@override
State<WorkingHoursDialog> createState() => _WorkingHoursDialogState();
}
class _WorkingHoursDialogState extends State<WorkingHoursDialog> {
final Map<String, Map<String, dynamic>> _days = {
'شنبه': {'english': 'Saturday', 'isSelected': false},
'یکشنبه': {'english': 'Sunday', 'isSelected': false},
'دوشنبه': {'english': 'Monday', 'isSelected': false},
'سه‌شنبه': {'english': 'Tuesday', 'isSelected': false},
'چهارشنبه': {'english': 'Wednesday', 'isSelected': false},
'پنجشنبه': {'english': 'Thursday', 'isSelected': false},
'جمعه': {'english': 'Friday', 'isSelected': false},
};
TimeOfDay? _startTime;
TimeOfDay? _endTime;
@override
Widget build(BuildContext context) {
return AlertDialog(
title: const Text("تنظیم روز و ساعت کاری", textAlign: TextAlign.center),
content: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
const Text("روزهای فعالیت را انتخاب کنید:"),
const SizedBox(height: 8),
Wrap(
spacing: 4.0,
runSpacing: 8.0,
children: _days.keys.map((dayName) {
return ChoiceChip(
label: Text(dayName),
selected: _days[dayName]!['isSelected'],
onSelected: (isSelected) {
setState(() {
_days[dayName]!['isSelected'] = isSelected;
});
},
);
}).toList(),
),
const Divider(height: 32),
const Text("بازه ساعت کاری را مشخص کنید:"),
const SizedBox(height: 16),
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
_buildTimePicker("پایان", _endTime, (time) {
setState(() => _endTime = time);
}),
_buildTimePicker("شروع", _startTime, (time) {
setState(() => _startTime = time);
}),
],
),
],
),
),
actions: [
TextButton(
onPressed: () => Navigator.of(context).pop(),
child: const Text("انصراف"),
),
ElevatedButton(
onPressed: () {
if (_startTime != null && _endTime != null) {
final selectedDays = _days.entries
.where((entry) => entry.value['isSelected'])
.map((entry) => entry.value['english'] as String)
.toList();
if (selectedDays.isNotEmpty) {
final format = NumberFormat("00");
final startTimeString = "${format.format(_startTime!.hour)}:${format.format(_startTime!.minute)}";
final endTimeString = "${format.format(_endTime!.hour)}:${format.format(_endTime!.minute)}";
Navigator.of(context).pop({
'days': selectedDays,
'startTime': startTimeString,
'endTime': endTimeString,
});
}
}
},
child: const Text("تایید"),
),
],
);
}
Widget _buildTimePicker(String title, TimeOfDay? time, Function(TimeOfDay) onTimeChanged) {
return Column(
children: [
Text(title),
const SizedBox(height: 8),
OutlinedButton(
onPressed: () async {
final newTime = await showTimePicker(
context: context,
initialTime: time ?? TimeOfDay.now(),
);
if (newTime != null) {
onTimeChanged(newTime);
}
},
child: Text(time?.format(context) ?? "انتخاب"),
),
],
);
}
}