Flutter中如何按指定数据类型写入Firebase Cloud Firestore数据
Flutter写入Firestore时指定字段数据类型实现方案
问题根源
你当前所有写入Firestore的字段都直接读取TextEditingController的.text属性,该属性固定返回String类型,因此无论输入什么内容,最终存入数据库的全是字符串格式。
相关实现参考截图:
具体实现步骤
1. 修改数据写入方法,对字段做显式类型转换
在调用set()写入数据时,对需要指定非String类型的字段做类型转换,同时增加基础的输入校验,避免非法输入导致转换报错,修改后的sandDataToDB代码如下:
sandDataToDB() async { CollectionReference _collectionReferance = FirebaseFirestore.instance.collection("Use-of-fund"); // 校验金额输入是否为合法数字 final inputAmount = _AmountController.text.trim(); if (int.tryParse(inputAmount) == null) { Fluttertoast.showToast(msg: "金额字段请输入有效整数"); return; } return _collectionReferance .doc() .set({ "Details of Sector": _DetailsofSectorController.text.trim(), // 存储为String类型 "Through": _ThroughController.text.trim(), // 存储为String类型 "Amount": int.parse(inputAmount), // 转换为int类型存储 "Date": _DateController.text.trim(), // 若需存储时间类型可转为DateTime,此处保留原String逻辑 }) .then((value) => dialog()) .catchError((error) => Fluttertoast.showToast(msg: "存储出错,请重试")); }
2.(可选)从输入源头限制输入类型
针对金额这类只允许输入数字的字段,可以给对应输入框配置数字键盘,减少用户输入非法内容的概率,如果你的自定义输入框customAdminTextField支持传入键盘类型参数,可以给Amount字段单独配置:
customAdminTextField("Details of Sector", _DetailsofSectorController), customAdminTextField("Through", _ThroughController), // 金额输入框限制为数字键盘 customAdminTextField( "Amount", _AmountController, keyboardType: TextInputType.number ), customAdminTextField("Date", _DateController), const SizedBox( height: 10, ), customSubmitButton("Submit ", () { sandDataToDB(); })
补充说明
- Firestore原生支持
int、double、bool、DateTime、List、Map等常见数据类型,不需要强制转成字符串存储,需要什么类型在写入前做对应转换即可。 - 读取文本输入时建议统一调用
.trim()去除首尾多余的空白字符,避免存入无效内容。 - 如果需要存储浮点型金额,把
int.parse替换为double.parse即可,对应校验方法换成double.tryParse。
内容的提问来源于stack exchange,提问作者Nur Islam Nime
相关产品推荐
相关产品推荐

