Flutter中Firestore存储数据格式异常:误存TextEditingController对象
问题原因与解决方法
问题原因
你存储的是TextEditingController对象的字符串表示,而非输入框的实际文本,核心问题是你调用了控制器的toString()方法——这个方法返回的是控制器对象的内部描述信息,不是用户输入的内容。
解决方法
要获取输入框的实际文本,需要使用TextEditingController的.text属性,替换掉代码里的toString()调用即可。
修改后的代码如下:
final adTitleController = TextEditingController(); final priceController = TextEditingController(); final adDescription = TextEditingController(); Future<void> createAds() async { CollectionReference ads = FirebaseFirestore.instance.collection('Ads'); // 获取输入框的实际文本内容 String? title = adTitleController.text; String? desc = adDescription.text; String? price = priceController.text; String? userId = FirebaseAuth.instance.currentUser?.uid; // 添加文档到Firestore,获取自动生成的文档引用 DocumentReference docRef = await ads.add({ "UID": userId, "Title": title, "Description": desc, "Price": price, }); // 如果需要将Firebase自动生成的ID作为AdId存储,执行以下更新操作 await docRef.update({"AdId": docRef.id}); }
补充说明:原代码中adId变量未赋值,会存储null。如果需要用Firebase自动生成的文档ID作为AdId,可以利用add方法返回的DocumentReference获取id,再更新到文档中(如上述代码所示)。
内容的提问来源于stack exchange,提问作者Alex Ali
相关产品推荐
相关产品推荐

