Files
prosappweb/lib/src/components/schedule_picker.dart
T
2023-04-20 12:29:36 -05:00

141 lines
3.9 KiB
Dart

import 'package:flutter/material.dart';
import 'package:prosappco/src/components/primary_btn.dart';
typedef TimeCallback = void Function(TimeOfDay? pickedTime);
class SchedulePicker extends StatefulWidget {
final String name;
Schedule schedule;
SchedulePicker({super.key, required this.name, required this.schedule});
@override
State<SchedulePicker> createState() => _SchedulePickerState();
}
class _SchedulePickerState extends State<SchedulePicker> {
@override
Widget build(BuildContext context) {
return Column(
children: [
customSwitch(widget.name, widget.schedule.habilitado, (value) {
widget.schedule.habilitado = value;
}),
...datePickers(widget.schedule.habilitado),
const Divider(
height: 15,
color: Colors.grey,
),
],
);
}
List<Widget> datePickers(bool value) {
if (!value) return [];
return [
customSwitch(
'Jornada continua',
widget.schedule.jornadaContinua,
(value) {
widget.schedule.jornadaContinua = value;
},
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 25),
child: Row(children: [
datePicker(widget.schedule.range1Hour1,
(pickedTime) => widget.schedule.range1Hour1 = pickedTime),
const Text('-'),
...(!widget.schedule.jornadaContinua
? [
datePicker(widget.schedule.range1Hour2,
(pickedTime) => widget.schedule.range1Hour2 = pickedTime),
const Text(' '),
]
: []),
...(!widget.schedule.jornadaContinua
? [
datePicker(widget.schedule.range2Hour1,
(pickedTime) => widget.schedule.range2Hour1 = pickedTime),
const Text('-'),
]
: []),
datePicker(widget.schedule.range1Hour2,
(pickedTime) => widget.schedule.range1Hour2 = pickedTime),
]),
),
];
}
datePicker(TimeOfDay? time, TimeCallback callback) {
return Expanded(
child: TextFormField(
textAlign: TextAlign.center,
onTap: () async {
final TimeOfDay? pickedTime = await showTimePicker(
context: context,
initialTime: TimeOfDay.now(),
);
if (pickedTime != null) {
setState(() {
callback(pickedTime);
});
}
},
readOnly: true,
decoration: const InputDecoration(
hintText: 'Hora',
),
controller: TextEditingController(
text: time == null ? '' : time.format(context),
),
style: const TextStyle(fontSize: 15),
),
);
}
customSwitch(String text, bool switchValue, ValueChanged<bool> onChanged) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 30),
child: SizedBox(
height: 40,
child: Row(
children: [
Expanded(
child: Text(
text,
style: const TextStyle(
fontSize: 15,
color: Colors.black,
),
)),
Transform.scale(
scale: 1.2,
child: Switch(
value: switchValue,
onChanged: (bool newValue) {
setState(() {
onChanged(newValue);
});
},
),
),
],
),
),
);
}
}
class Schedule {
bool habilitado;
bool jornadaContinua;
TimeOfDay? range1Hour1 = TimeOfDay.now();
TimeOfDay? range1Hour2 = TimeOfDay.now();
TimeOfDay? range2Hour1 = TimeOfDay.now();
TimeOfDay? range2Hour2 = TimeOfDay.now();
Schedule(this.habilitado, this.jornadaContinua, this.range1Hour1,
this.range1Hour2, this.range2Hour1, this.range2Hour2);
}