Flutter 3.22.1 iOS端UniqueKey.toString()生成异常求助
解决方案
问题原因
Flutter 3.22.1版本中,iOS端UniqueKey的toString()方法实现发生变更,不再返回原有的#xxxx格式字符串,而是输出默认的Instance of 'UniqueKey',Android端的实现未受此影响。
最小改动修复方案
以下几种方式可以在几乎不改动原有逻辑的前提下解决问题:
方案1:利用UniqueKey内部的value属性生成键
UniqueKey内置一个唯一的value对象,通过它的标识生成键能保证唯一性:
final UniqueKey uKey = UniqueKey(); // 方式1:使用value的toString结果 final String keyString = uKey.value.toString(); // 方式2:用哈希值生成和原格式接近的键 // final String keyString = '#${uKey.value.hashCode}'; DocumentReference documentReferencer = _mainCollection.doc(userUid).collection('teams').doc(keyString);
方案2:直接使用UniqueKey的哈希值
如果不需要严格匹配原格式,直接取UniqueKey的哈希值也能满足唯一要求:
final String uKey = UniqueKey().hashCode.toString(); DocumentReference documentReferencer = _mainCollection.doc(userUid).collection('teams').doc(uKey);
方案3:生成与原格式完全一致的键
若需要保留原有的#xxxx格式,可手动拼接字符串:
final String uKey = '#${UniqueKey().hashCode}'; DocumentReference documentReferencer = _mainCollection.doc(userUid).collection('teams').doc(uKey);
备选方案(改动较大)
如果后续计划替换生成逻辑,也可以让Firebase自动生成文档ID,无需手动处理:
DocumentReference documentReferencer = _mainCollection.doc(userUid).collection('teams').doc(); // 生成的ID可通过documentReferencer.id获取
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

