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