我正在使用新的 FlutterFire API 更新旧的 Flutter 代码。我在其中一个函数中使用setDatawithmerge: true来更新保存在 Map 中的一些文档字段。我确实更改setData为set,但是新的 FlutterFire 插件出现错误,未定义“合并”。我在迁移文档中发现
setData/set 现在支持 SetOptions 来合并数据/字段(以前这个接受地图)
该文件参考还说:
/// If [SetOptions] are provided, the data will be merged into an existing
/// document instead of overwriting.
Future<void> set(Map<String, dynamic> data, [SetOptions options]) {
assert(data != null);
return _delegate.set(
_CodecUtility.replaceValueWithDelegatesInMap(data), options);
}
Run Code Online (Sandbox Code Playgroud)
在我的原始代码中,我在Map<String, dynamic>调用中保存新值changedvalues,然后使用setData(changedValues, merge:true)
那么,如何提供 SetOptions 以确保合并为真,并且文档中仅更新了 changedValues 中的字段?
在我的“办公室”集合中,我正在使用 GeoFlutterFire 包尝试查询 x 年和 y 年之间建造的所有办公室,提供特定服务且距离我办公室 z 英里以内。每个“办公室”文档都有一个“位置”地图,其中包含使用 GeoFirePoint 的 geohash 和地理点,以及“建造年份”和“服务”字段。我喜欢执行如下查询并获取文档并显示它们:
var collRef = firestore.collection('offices')
.where('service', isEqualTo: 'law')
.where('built', isLessThanOrEqualTo: y)
.where('built', isGreaterThanOrEqualTo: x);
geo.collection(collectionRef: collRef.reference())
.within(center: myOffice, radius: z, field: 'position', strictMode: true);
Run Code Online (Sandbox Code Playgroud)
但这是行不通的。我收到此查询无效的错误:
Unhandled Exception: PlatformException(invalid_query, FIRInvalidArgumentException, Invalid query. You have a where filter with an inequality (lessThan, lessThanOrEqual, greaterThan, or greaterThanOrEqual) on field 'built' and so you must also use 'built' as your first queryOrderedBy field, but your first queryOrderedBy is currently on field 'position.geohash' …Run Code Online (Sandbox Code Playgroud) 我有一个关于 Heroku 计费的问题。因此,每个帐户每月可获得 1,000 个免费 dyno 小时(如果我们添加信用卡信息)。从技术上讲,这对于 1 个应用程序来说已经足够了,但是如果有多个应用程序并且它们一直都处于清醒状态,那么我每月将超过 1,000 小时。你知道我将如何收取额外工作时间的费用吗?达到 1,000 小时后?
第二个问题。其他 dyno 计划(爱好、标准等)每月收费 7 美元、25 美元等。我知道这些付费帐户永远不会让您的应用程序休眠,并且有更多 RAM、免费 SSL 等,但使用定价仍然有效类似于免费计划(有 1,000 个免费测功小时,然后额外收费)。或者使用这些计划,我将不会被收取超过 7 美元、25 美元等的 dyno 小时使用费?