horario fixed
This commit is contained in:
@@ -0,0 +1,139 @@
|
||||
import 'package:flutter/material.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 lunesValue) {
|
||||
if (!lunesValue) 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);
|
||||
}
|
||||
Reference in New Issue
Block a user