96 lines
2.6 KiB
Dart
96 lines
2.6 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:my_attendance/services/settings_service.dart';
|
|
import 'package:provider/provider.dart';
|
|
|
|
class SettingsDialog extends StatefulWidget {
|
|
const SettingsDialog({super.key});
|
|
|
|
@override
|
|
State<SettingsDialog> createState() => _SettingsDialogState();
|
|
}
|
|
|
|
class _SettingsDialogState extends State<SettingsDialog> {
|
|
late final TextEditingController _hoursController;
|
|
late final TextEditingController _minutesController;
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
final settingsService = Provider.of<SettingsService>(
|
|
context,
|
|
listen: false,
|
|
);
|
|
final currentDuration = settingsService.settings.dailyWorkDuration;
|
|
|
|
_hoursController = TextEditingController(
|
|
text: currentDuration.inHours.toString(),
|
|
);
|
|
_minutesController = TextEditingController(
|
|
text: currentDuration.inMinutes.remainder(60).toString(),
|
|
);
|
|
}
|
|
|
|
@override
|
|
void dispose() {
|
|
_hoursController.dispose();
|
|
_minutesController.dispose();
|
|
super.dispose();
|
|
}
|
|
|
|
void _save() {
|
|
final hours = int.tryParse(_hoursController.text) ?? 0;
|
|
final minutes = int.tryParse(_minutesController.text) ?? 0;
|
|
final newDuration = Duration(hours: hours, minutes: minutes);
|
|
|
|
Provider.of<SettingsService>(
|
|
context,
|
|
listen: false,
|
|
).saveWorkDuration(newDuration);
|
|
Navigator.of(context).pop();
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return AlertDialog(
|
|
title: const Text('Set Daily Work Hours'),
|
|
content: Column(
|
|
mainAxisSize: MainAxisSize.min,
|
|
children: [
|
|
Row(
|
|
children: [
|
|
Expanded(
|
|
child: TextField(
|
|
controller: _hoursController,
|
|
keyboardType: TextInputType.number,
|
|
decoration: const InputDecoration(
|
|
labelText: 'Hours',
|
|
border: OutlineInputBorder(),
|
|
),
|
|
),
|
|
),
|
|
const SizedBox(width: 16),
|
|
Expanded(
|
|
child: TextField(
|
|
controller: _minutesController,
|
|
keyboardType: TextInputType.number,
|
|
decoration: const InputDecoration(
|
|
labelText: 'Minutes',
|
|
border: OutlineInputBorder(),
|
|
),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
],
|
|
),
|
|
actions: [
|
|
TextButton(
|
|
onPressed: () => Navigator.of(context).pop(),
|
|
child: const Text('Cancel'),
|
|
),
|
|
ElevatedButton(onPressed: _save, child: const Text('Save')),
|
|
],
|
|
);
|
|
}
|
|
}
|