Flutter中如何将Firestore布尔值显示为Yes/No而非true/false
解决Flutter中Firestore布尔字段显示优化问题
这里提供两种优化布尔字段显示的方案,按需选择:
方案1:将true/false替换为"Yes"/"No"
先在你的_readDataState类中添加一个工具方法,用来转换布尔值:
class _readDataState extends State<readData> { final Stream<QuerySnapshot> users = FirebaseFirestore.instance .collection('users') .orderBy('Fecha ingreso sintoma') .snapshots(); // 添加布尔值转换方法 String boolToYesNo(bool? value) { return value == true ? "Yes" : "No"; } @override Widget build(BuildContext context) { // 原有代码不变,仅修改展示Text的部分 // ...
接着修改展示数据的Text组件,把每个布尔字段用这个方法处理:
Text(''' Fatiga: ${boolToYesNo(data.docs[index]['Fatiga'])} Miccion: ${boolToYesNo(data.docs[index]['Miccion'])} Flujo Vaginal: ${boolToYesNo(data.docs[index]['Flujo Vaginal'])} Estreñimiento: ${boolToYesNo(data.docs[index]['Estreñimiento'])} Acidez Gastrica: ${boolToYesNo(data.docs[index]['Acidez Gastrica'])} Sangrado Nasal: ${boolToYesNo(data.docs[index]['Sangrado Nasal'])} Sangrado de encias: ${boolToYesNo(data.docs[index]['Sangrado de encias'])} Hinchazon: ${boolToYesNo(data.docs[index]['Hinchazon'])} Problemas respiratarios: ${boolToYesNo(data.docs[index]['Problemas respiratarios'])} ''')
方案2:仅显示值为true的症状
如果只想展示用户存在的症状(即字段值为true的项),可以在itemBuilder里先筛选再拼接文本:
itemBuilder: (context, index) { // 定义症状名称和对应的Firestore字段名 final symptomFields = { 'Fatiga': 'Fatiga', 'Miccion': 'Miccion', 'Flujo Vaginal': 'Flujo Vaginal', 'Estreñimiento': 'Estreñimiento', 'Acidez Gastrica': 'Acidez Gastrica', 'Sangrado Nasal': 'Sangrado Nasal', 'Sangrado de encias': 'Sangrado de encias', 'Hinchazon': 'Hinchazon', 'Problemas respiratarios': 'Problemas respiratarios', }; // 筛选出值为true的症状 final activeSymptoms = <String>[]; symptomFields.forEach((symptomName, fieldName) { if (data.docs[index][fieldName] == true) { activeSymptoms.add(symptomName); } }); // 拼接最终显示的文本 final displayText = activeSymptoms.isNotEmpty ? activeSymptoms.join('\n') : 'No hay síntomas registrados'; return Card( child: Column( mainAxisSize: MainAxisSize.min, children: <Widget>[ Text('Síntomas'), Text('${data.docs[index]['Fecha ingreso sintoma']}'), // 替换原来的Text为筛选后的文本 Text(displayText) ], ), ); },
内容的提问来源于stack exchange,提问作者jmichelena
相关产品推荐
相关产品推荐

