我使用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