Flutter创建含List of Lists的Firestore Document时应用闪退无报错
问题原因说明
这个问题不属于Firebase的缺陷,Cloud Firestore 原生不支持直接存储嵌套数组(列表的列表)结构是闪退的核心原因:
Firestore 对数组类型的元素有明确限制,仅支持字符串、数字、布尔值、null、时间戳、地理位置、文档引用、单层Map这几类基础数据作为数组元素,嵌套数组不在支持范围内。你提交的代码传入了嵌套数组结构,Flutter端Firestore SDK未做上层异常捕获,直接触发了底层原生侧的崩溃,因此不会输出Dart层的错误日志。
可行的替代实现方案
你可以根据业务查询需求选择以下任意一种方案适配:
- 方案1:将嵌套数组转换为Map结构存储,读取后再还原为数组
await FirebaseFirestore.instance.collection("Test").add({ "test": { "0": ["1", "2"], "1": ["3"], "2": ["4"] } }); // 读取时执行 List.from(testMap.values) 即可还原为嵌套数组 - 方案2:将每一层子数组封装为Map对象,存入外层数组
await FirebaseFirestore.instance.collection("Test").add({ "test": [ {"list": ["1", "2"]}, {"list": ["3"]}, {"list": ["4"]} ] }); - 方案3:不需要对嵌套数组内元素做Firestore侧查询时,直接序列化为JSON字符串存储
import 'dart:convert'; await FirebaseFirestore.instance.collection("Test").add({ "test": jsonEncode([ ["1", "2"], ["3"], ["4"] ]) }); // 读取时执行 jsonDecode(testStr) 即可还原为嵌套数组
内容的提问来源于stack exchange,提问作者Jonas
相关产品推荐
相关产品推荐

