mirror of
https://github.com/Iconica-Development/flutter_availability.git
synced 2025-05-19 05:03:44 +02:00
fix: change DateTime to TimeOfDay for timeselection widgets
This commit is contained in:
parent
79be2d74dc
commit
9ba32016b8
8 changed files with 84 additions and 65 deletions
|
@ -225,12 +225,12 @@ class AvailabilityTranslations {
|
|||
/// Get the time formatted as a string
|
||||
///
|
||||
/// The default implementation is `HH:mm`
|
||||
final String Function(BuildContext, DateTime) timeFormatter;
|
||||
final String Function(BuildContext, TimeOfDay) timeFormatter;
|
||||
}
|
||||
|
||||
String _defaultTimeFormatter(BuildContext context, DateTime date) =>
|
||||
"${date.hour.toString().padLeft(2, '0')}:"
|
||||
"${date.minute.toString().padLeft(2, '0')}";
|
||||
String _defaultTimeFormatter(BuildContext context, TimeOfDay time) =>
|
||||
"${time.hour.toString().padLeft(2, '0')}:"
|
||||
"${time.minute.toString().padLeft(2, '0')}";
|
||||
|
||||
String _defaultDayMonthFormatter(BuildContext context, DateTime date) =>
|
||||
"${_getDayName(date.weekday)} ${date.day} ${_getMonthName(date.month)}";
|
||||
|
|
|
@ -108,30 +108,14 @@ class _AvailabilityModificationViewState
|
|||
|
||||
var timeSelection = AvailabilityTimeSelection(
|
||||
dateRange: widget.dateRange,
|
||||
startTime: _startTime != null
|
||||
? DateTime(
|
||||
widget.dateRange.start.year,
|
||||
widget.dateRange.start.month,
|
||||
widget.dateRange.start.day,
|
||||
_startTime!.hour,
|
||||
_startTime!.minute,
|
||||
)
|
||||
: null,
|
||||
endTime: _endTime != null
|
||||
? DateTime(
|
||||
widget.dateRange.start.year,
|
||||
widget.dateRange.start.month,
|
||||
widget.dateRange.start.day,
|
||||
_endTime!.hour,
|
||||
_endTime!.minute,
|
||||
)
|
||||
: null,
|
||||
startTime: _startTime,
|
||||
endTime: _endTime,
|
||||
key: ValueKey([_startTime, _endTime]),
|
||||
onStartChanged: (start) => setState(() {
|
||||
_startTime = TimeOfDay.fromDateTime(start);
|
||||
_startTime = start;
|
||||
}),
|
||||
onEndChanged: (end) => setState(() {
|
||||
_endTime = TimeOfDay.fromDateTime(end);
|
||||
_endTime = end;
|
||||
}),
|
||||
);
|
||||
|
||||
|
|
|
@ -104,22 +104,40 @@ class _AvailabilityDayTemplateEditState
|
|||
|
||||
var timeSection = TemplateTimeSelection(
|
||||
key: ValueKey(_template.templateData),
|
||||
startTime: (_template.templateData as DayTemplateData).startTime,
|
||||
endTime: (_template.templateData as DayTemplateData).endTime,
|
||||
startTime: TimeOfDay.fromDateTime(
|
||||
(_template.templateData as DayTemplateData).startTime,),
|
||||
endTime: TimeOfDay.fromDateTime(
|
||||
(_template.templateData as DayTemplateData).endTime,),
|
||||
onStartChanged: (start) {
|
||||
var startTime = (_template.templateData as DayTemplateData).startTime;
|
||||
var updatedStartTime = DateTime(
|
||||
startTime.year,
|
||||
startTime.month,
|
||||
startTime.day,
|
||||
start.hour,
|
||||
start.minute,
|
||||
);
|
||||
setState(() {
|
||||
_template = _template.copyWith(
|
||||
templateData: (_template.templateData as DayTemplateData).copyWith(
|
||||
startTime: start,
|
||||
startTime: updatedStartTime,
|
||||
),
|
||||
);
|
||||
});
|
||||
},
|
||||
onEndChanged: (end) {
|
||||
var endTime = (_template.templateData as DayTemplateData).endTime;
|
||||
var updatedEndTime = DateTime(
|
||||
endTime.year,
|
||||
endTime.month,
|
||||
endTime.day,
|
||||
end.hour,
|
||||
end.minute,
|
||||
);
|
||||
setState(() {
|
||||
_template = _template.copyWith(
|
||||
templateData: (_template.templateData as DayTemplateData).copyWith(
|
||||
endTime: end,
|
||||
endTime: updatedEndTime,
|
||||
),
|
||||
);
|
||||
});
|
||||
|
|
|
@ -15,16 +15,16 @@ class AvailabilityTimeSelection extends StatelessWidget {
|
|||
});
|
||||
|
||||
///
|
||||
final DateTime? startTime;
|
||||
final TimeOfDay? startTime;
|
||||
|
||||
///
|
||||
final DateTime? endTime;
|
||||
final TimeOfDay? endTime;
|
||||
|
||||
///
|
||||
final void Function(DateTime) onStartChanged;
|
||||
final void Function(TimeOfDay) onStartChanged;
|
||||
|
||||
///
|
||||
final void Function(DateTime) onEndChanged;
|
||||
final void Function(TimeOfDay) onEndChanged;
|
||||
|
||||
/// The date range for which the availabilities are being managed
|
||||
final DateTimeRange dateRange;
|
||||
|
|
|
@ -26,16 +26,16 @@ class TimeSelection extends StatelessWidget {
|
|||
final CrossAxisAlignment crossAxisAlignment;
|
||||
|
||||
///
|
||||
final DateTime? startTime;
|
||||
final TimeOfDay? startTime;
|
||||
|
||||
///
|
||||
final DateTime? endTime;
|
||||
final TimeOfDay? endTime;
|
||||
|
||||
///
|
||||
final void Function(DateTime) onStartChanged;
|
||||
final void Function(TimeOfDay) onStartChanged;
|
||||
|
||||
///
|
||||
final void Function(DateTime) onEndChanged;
|
||||
final void Function(TimeOfDay) onEndChanged;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
|
|
@ -11,10 +11,10 @@ class TimeInputField extends StatelessWidget {
|
|||
});
|
||||
|
||||
///
|
||||
final DateTime? initialValue;
|
||||
final TimeOfDay? initialValue;
|
||||
|
||||
///
|
||||
final void Function(DateTime) onTimeChanged;
|
||||
final void Function(TimeOfDay) onTimeChanged;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
@ -24,22 +24,14 @@ class TimeInputField extends StatelessWidget {
|
|||
var translations = options.translations;
|
||||
|
||||
Future<void> onFieldtap() async {
|
||||
var initialTime = TimeOfDay.fromDateTime(initialValue ?? DateTime.now());
|
||||
var initialTime = initialValue ?? TimeOfDay.now();
|
||||
var time = await (options.timePickerBuilder?.call(context, initialTime) ??
|
||||
showTimePicker(
|
||||
context: context,
|
||||
initialTime: TimeOfDay.fromDateTime(initialValue ?? DateTime.now()),
|
||||
initialTime: initialTime,
|
||||
));
|
||||
if (time != null) {
|
||||
onTimeChanged(
|
||||
DateTime(
|
||||
initialValue?.year ?? DateTime.now().year,
|
||||
initialValue?.month ?? DateTime.now().month,
|
||||
initialValue?.day ?? DateTime.now().day,
|
||||
time.hour,
|
||||
time.minute,
|
||||
),
|
||||
);
|
||||
onTimeChanged(time);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -136,6 +136,15 @@ class BreakDisplay extends StatelessWidget {
|
|||
var colors = options.colors;
|
||||
var translations = options.translations;
|
||||
|
||||
var starTime = translations.timeFormatter(
|
||||
context,
|
||||
TimeOfDay.fromDateTime(breakModel.startTime),
|
||||
);
|
||||
var endTime = translations.timeFormatter(
|
||||
context,
|
||||
TimeOfDay.fromDateTime(breakModel.endTime),
|
||||
);
|
||||
|
||||
return GestureDetector(
|
||||
onTap: onClick,
|
||||
child: Container(
|
||||
|
@ -150,8 +159,8 @@ class BreakDisplay extends StatelessWidget {
|
|||
Text(
|
||||
"${breakModel.duration.inMinutes} "
|
||||
"${translations.timeMinutes} | "
|
||||
"${translations.timeFormatter(context, breakModel.startTime)} - "
|
||||
"${translations.timeFormatter(context, breakModel.endTime)}",
|
||||
"$starTime - "
|
||||
"$endTime",
|
||||
),
|
||||
const Spacer(),
|
||||
GestureDetector(onTap: onRemove, child: const Icon(Icons.remove)),
|
||||
|
@ -207,15 +216,19 @@ class AvailabilityBreakSelectionDialog extends StatefulWidget {
|
|||
|
||||
class _AvailabilityBreakSelectionDialogState
|
||||
extends State<AvailabilityBreakSelectionDialog> {
|
||||
late DateTime? _startTime;
|
||||
late DateTime? _endTime;
|
||||
late TimeOfDay? _startTime;
|
||||
late TimeOfDay? _endTime;
|
||||
late Duration? _duration;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_startTime = widget.initialBreak?.startTime;
|
||||
_endTime = widget.initialBreak?.endTime;
|
||||
_startTime = widget.initialBreak != null
|
||||
? TimeOfDay.fromDateTime(widget.initialBreak!.startTime)
|
||||
: null;
|
||||
_endTime = widget.initialBreak != null
|
||||
? TimeOfDay.fromDateTime(widget.initialBreak!.endTime)
|
||||
: null;
|
||||
_duration = widget.initialBreak?.duration;
|
||||
}
|
||||
|
||||
|
@ -234,15 +247,15 @@ class _AvailabilityBreakSelectionDialogState
|
|||
});
|
||||
}
|
||||
|
||||
void onUpdateStart(DateTime time) {
|
||||
void onUpdateStart(TimeOfDay start) {
|
||||
setState(() {
|
||||
_startTime = time;
|
||||
_startTime = start;
|
||||
});
|
||||
}
|
||||
|
||||
void onUpdateEnd(DateTime time) {
|
||||
void onUpdateEnd(TimeOfDay end) {
|
||||
setState(() {
|
||||
_endTime = time;
|
||||
_endTime = end;
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -251,8 +264,20 @@ class _AvailabilityBreakSelectionDialogState
|
|||
var onSaveButtonPress = canSave
|
||||
? () {
|
||||
var breakModel = AvailabilityBreakModel(
|
||||
startTime: _startTime!,
|
||||
endTime: _endTime!,
|
||||
startTime: DateTime(
|
||||
DateTime.now().year,
|
||||
DateTime.now().month,
|
||||
DateTime.now().day,
|
||||
_startTime!.hour,
|
||||
_startTime!.minute,
|
||||
),
|
||||
endTime: DateTime(
|
||||
DateTime.now().year,
|
||||
DateTime.now().month,
|
||||
DateTime.now().day,
|
||||
_endTime!.hour,
|
||||
_endTime!.minute,
|
||||
),
|
||||
duration: _duration,
|
||||
);
|
||||
Navigator.of(context).pop(breakModel);
|
||||
|
|
|
@ -14,16 +14,16 @@ class TemplateTimeSelection extends StatelessWidget {
|
|||
});
|
||||
|
||||
///
|
||||
final DateTime? startTime;
|
||||
final TimeOfDay? startTime;
|
||||
|
||||
///
|
||||
final DateTime? endTime;
|
||||
final TimeOfDay? endTime;
|
||||
|
||||
///
|
||||
final void Function(DateTime) onStartChanged;
|
||||
final void Function(TimeOfDay) onStartChanged;
|
||||
|
||||
///
|
||||
final void Function(DateTime) onEndChanged;
|
||||
final void Function(TimeOfDay) onEndChanged;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
|
Loading…
Reference in a new issue