如何将颤抖的 TimeOfDay 保存到 firebase?
How to save flutter TimeOfDay to firebase?
我正在开发一个 flutter 应用程序,我正在使用这个插件显示 TimeRangepicker:time_range_picker 并且我得到 TimeOfDay(09:00) + TimeOfDay(12:00) 作为使用此代码的结果:
onPressed: () async {
TimeRange result = await showTimeRangePicker(
use24HourFormat: false,
interval: Duration(minutes: 30),
context: context,
start: TimeOfDay(hour: 9, minute: 0),
end: TimeOfDay(hour: 12, minute: 0),
disabledTime: TimeRange(
startTime: TimeOfDay(hour: 23, minute: 0),
endTime: TimeOfDay(hour: 5, minute: 0)),
disabledColor: Colors.red.withOpacity(0.5),
strokeWidth: 4,
ticks: 24,
ticksOffset: -7,
ticksLength: 15,
ticksColor: Colors.grey,
labels: [
"12 pm",
"3 am",
"6 am",
"9 am",
"12 am",
"3 pm",
"6 pm",
"9 pm"
].asMap().entries.map((e) {
return ClockLabel.fromIndex(
idx: e.key, length: 8, text: e.value);
}).toList(),
labelOffset: 35,
rotateLabels: false,
padding: 60);
print("${result.startTime} + ${result.endTime}");
},
但唯一的问题是我可以找到一种合适的方法将其保存到 firebase,我不需要 date 我只需要 TimeOfDay。
Firestore 中没有用于存储时间的特定数据类型,因此您必须将其映射到现有类型之一。
一些常见的映射是:
- 将一天中的时间存储为字符串值,例如“07:55:00.000”(如果您关心毫秒精度)
- 将一天中的时间存储为与午夜的偏移量,例如 28500(作为从午夜到 7:55 AM 的秒数)
- 将一天中的时间存储为
Timestamp
字段中固定日期的时间部分。这本质上是先前方法的变体,偏移量来自 start of the epoch。假设您选择纪元的开始(1970 年 1 月 1 日)作为固定日期,那么时间戳的值将为 28500000(以毫秒为单位)。
所有这些都有有效的用例,因此请选择最适合您的应用用例的一个。
在只需要小时和分钟的常见用例中,这些值的简单映射就足够了。
Map timeOfDayToFirebase(TimeOfDay timeOfDay){
return {
'hour':timeOfDay.hour,
'minute':timeOfDay.minute
}
}
TimeOfDay firebaseToTimeOfDay(Map data){
return TimeOfDay(
hour: data['hour'],
minute: data['minute']);
}
var myTimeOfDayObject=TimeOfDay.now();
firebase.update({'time': timeOfDayToFirebase(myTimeOfDayObject)});
这样您就不必担心管理偏移量、意外的语言环境更改等问题。
我正在开发一个 flutter 应用程序,我正在使用这个插件显示 TimeRangepicker:time_range_picker 并且我得到 TimeOfDay(09:00) + TimeOfDay(12:00) 作为使用此代码的结果:
onPressed: () async {
TimeRange result = await showTimeRangePicker(
use24HourFormat: false,
interval: Duration(minutes: 30),
context: context,
start: TimeOfDay(hour: 9, minute: 0),
end: TimeOfDay(hour: 12, minute: 0),
disabledTime: TimeRange(
startTime: TimeOfDay(hour: 23, minute: 0),
endTime: TimeOfDay(hour: 5, minute: 0)),
disabledColor: Colors.red.withOpacity(0.5),
strokeWidth: 4,
ticks: 24,
ticksOffset: -7,
ticksLength: 15,
ticksColor: Colors.grey,
labels: [
"12 pm",
"3 am",
"6 am",
"9 am",
"12 am",
"3 pm",
"6 pm",
"9 pm"
].asMap().entries.map((e) {
return ClockLabel.fromIndex(
idx: e.key, length: 8, text: e.value);
}).toList(),
labelOffset: 35,
rotateLabels: false,
padding: 60);
print("${result.startTime} + ${result.endTime}");
},
但唯一的问题是我可以找到一种合适的方法将其保存到 firebase,我不需要 date 我只需要 TimeOfDay。
Firestore 中没有用于存储时间的特定数据类型,因此您必须将其映射到现有类型之一。
一些常见的映射是:
- 将一天中的时间存储为字符串值,例如“07:55:00.000”(如果您关心毫秒精度)
- 将一天中的时间存储为与午夜的偏移量,例如 28500(作为从午夜到 7:55 AM 的秒数)
- 将一天中的时间存储为
Timestamp
字段中固定日期的时间部分。这本质上是先前方法的变体,偏移量来自 start of the epoch。假设您选择纪元的开始(1970 年 1 月 1 日)作为固定日期,那么时间戳的值将为 28500000(以毫秒为单位)。
所有这些都有有效的用例,因此请选择最适合您的应用用例的一个。
在只需要小时和分钟的常见用例中,这些值的简单映射就足够了。
Map timeOfDayToFirebase(TimeOfDay timeOfDay){
return {
'hour':timeOfDay.hour,
'minute':timeOfDay.minute
}
}
TimeOfDay firebaseToTimeOfDay(Map data){
return TimeOfDay(
hour: data['hour'],
minute: data['minute']);
}
var myTimeOfDayObject=TimeOfDay.now();
firebase.update({'time': timeOfDayToFirebase(myTimeOfDayObject)});
这样您就不必担心管理偏移量、意外的语言环境更改等问题。