You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 23:10:30