Flutter web:从 Firestore 地图检索的值在添加到列表时被截断

Posted

技术标签:

【中文标题】Flutter web:从 Firestore 地图检索的值在添加到列表时被截断【英文标题】:Flutter web: Values retrieved from Firestore map are truncated when added to List 【发布时间】:2020-09-09 03:26:14 【问题描述】:

在我的 Flutter Web 应用程序中,我正在从 Firestore 中的地图 timeslots 中检索值。 这是数据的样子:

但是,我没有检索整个值列表,而是得到一个截断的列表,如下所示:

[Mo-Washing-(09:00-10:00, 10:00-11:00, 11:00-12:00, ..., 20:00-21:00, 21:00-22:00)]

下面我包含了负责检索数据并将其添加到列表中的 2 个函数object

static List object = [];
static Map<String, dynamic> timeDetails = ;
static Map<String, dynamic> userDetails = ;

  checkExists(docuID) async 
    return await firestore()
        .collection('environments')
        .doc(docuID)
        .get()
        .then((val) 
      userDetails.addAll(val.data());
    ).whenComplete(() async 
        fs.DocumentSnapshot snapShot = await firestore()
            .collection('environments')
            .doc(docuID)
            .collection('Washing')
            .doc('monday')
            .get();
        if (snapShot == null || !snapShot.exists) 
          print('does not exist');
         else 
          await getData(docuID, 'Washing');
        
      setState(() );
    );
  

   getData(docuID, machineName) async 
    return await firestore()
        .collection('environments')
        .doc(docuID)
        .collection(machineName)
        .doc('monday')
        .get()
        .then((val) 
      timeDetails.addAll(val.data());
    ).whenComplete(() 
      object.add('Mo-$machineName-$timeDetails['timeslots'].values');
      print(object);
      setState(() );
    );
  

这也发生在debugPrint。有谁知道为什么会发生这种情况以及我该如何解决?对此的任何帮助将不胜感激!

【问题讨论】:

您能否打印列表的长度以验证列表是否实际被截断或只是被截断的打印输出? 当我print(timeDetails['timeslots'].values.length) 时,输出为 13,这将是整个列表 如果输出太长,printdebugPrint 都会截断输出。您可以找到一些解决方法here 我尝试了解决方法和 debugPrint 但都没有奏效,我只是添加了一个对我有用的答案,但感谢您的帮助!我很感激! 【参考方案1】:

Github 上提到的 workaround 和 debugPrint 都不适合我,但我设法通过将 .toList() 添加到我的 getData 函数来解决这个问题:

   getData(docuID, machineName) async 
    return await firestore()
        .collection('environments')
        .doc(docuID)
        .collection(machineName)
        .doc('monday')
        .get()
        .then((val) 
      timeDetails.addAll(val.data());
    ).whenComplete(() 
      //toList() is added here to .add
      object.add('Mo-$machineName-$timeDetails['timeslots'].values.toList()');
      print(object);
      setState(() );
    );
  

输出:

[Mo-Washing-[09:00-10:00, 10:00-11:00, 11:00-12:00, 12:00-13:00, 13:00-14:00, 14:00-15:00, 15:00-16:00, 16:00-17:00, 17:00-18:00, 18:00-19:00, 19:00-20:00, 20:00-21:00, 21:00-22:00]

【讨论】:

以上是关于Flutter web:从 Firestore 地图检索的值在添加到列表时被截断的主要内容,如果未能解决你的问题,请参考以下文章

无法从 Flutter Web 读取 Firestore 中的数据(适用于 iOS 和 android)

Flutter web:从 Firestore 地图检索的值在添加到列表时被截断

从 Flutter 移动应用程序调用 Firestore 是不是安全?

如何在 Flutter Web 上使用 StreamBuilder 和 Firestore?

无法使用 Flutter Web 访问 Cloud Firestore

Flutter Web - 获取 Firestore 集合