Flutter Firestore, ShowTimePicker 无效参数:'TimeOfDay'错误的实例



我使用ShowTimePicker小部件在我的应用程序与TimeOfDay数据。Flutter给了我这个错误:

无效参数:Instance of 'TimeOfDay'

我不想将此数据作为字符串类型添加到Firestore。我想加上这个"时间"数据作为时间戳。我该怎么做呢?

TimeOfDay time = TimeOfDay.now();

这是我添加数据到firestore的方法:

void addData2() {
final FirebaseAuth auth = FirebaseAuth.instance;
final User user = auth.currentUser;
final uid = user.uid;
var map = new Map<String, dynamic>();
map['ilac'] = ilacText.text;
map['miktar'] = miktarText.text;
map["tarih"] = _dateTime;
map["bitistarih"] = _dateTime2;
map["periyot"] = timesdata;
map["tur"] = turdata;
map["saat"] = time  ;

FirebaseFirestore.instance.
collection('users').
doc(uid).
set({
"ilacvemiktar": FieldValue.arrayUnion([ map])
}, SetOptions(merge: true)
).catchError((e) {
print(e);
});
}

这是我的ShowTimePicker小部件:

Container(
height: 40, width: 200,
margin: EdgeInsets.all(10),
decoration: BoxDecoration(
color: Colors.black38,
borderRadius: BorderRadius.circular(18)
),
alignment: Alignment.center,
padding: EdgeInsets.fromLTRB(14, 0, 14, 0),
child: GestureDetector(
child: Text( time == null ? "İlaç Saati" :time.format(context), textAlign: 
TextAlign.center
,
style: GoogleFonts.montserrat(
color:  Colors.white,
fontSize: 16,
textStyle: TextStyle(fontWeight: FontWeight.w300)),),
onTap: () async {
final TimeOfDay selectedTime = await showTimePicker(
context: context,
initialTime: TimeOfDay.now() ,

builder: (BuildContext context, Widget child) {
return MediaQuery(
data: MediaQuery.of(context)
.copyWith(alwaysUse24HourFormat: false),
child: Theme(
data: ThemeData.dark().copyWith(
colorScheme: ColorScheme.dark(
primary: Colors.cyan[700],
onPrimary: Colors.cyan[700],
surface: Colors.white,
onSurface: Colors.cyan[700],
),
dialogBackgroundColor: Colors.cyan[700],
),
child: child),
);
},
);
print(selectedTime);
setState(() {
time = selectedTime ;
});

},
),
),

根据firestore官方文档,您可以使用针对这种情况制作的firestore服务器值-firebase.database.ServerValue.TIMESTAMP,解释如下:

一个占位符值,用于自动填充当前时间戳(时间)自Unix纪元以来(以毫秒为单位),由Firebase确定服务器。

例子
var sessionsRef = firebase.database().ref("sessions");
sessionsRef.push({   startedAt:
firebase.database.ServerValue.TIMESTAMP });

另外,如果您希望服务器的当前时间,您可以使用fieldValuefirebase.firestore.FieldValue.serverTimestamp(),更多关于这个选项的信息在这里。这可以为您节省有不同时区的麻烦,如果不同的时区混合和保存可能会导致混乱。

因为要在firebase中传递TimeOfDay的实例,所以这次应该传递这样的内容。Hour或time.minutes

最新更新