使用称为Sembast的Flutter软件包。
这两个命令之间的区别是什么?
store.record(key).put(db, dataMap)
和
store.record(key).add(db, dataMap)
特别是关于存在现有数据时的行为。
他们会覆盖吗?
“ merge”参数如何在put
方法中起作用?
还有其他区别,如果您还有其他指针。
谢谢。
答案 0 :(得分:2)
每个sembast文档
/// Create the record if it does not exist.
///
/// Returns the key if inserted, null otherwise.
Future<K> add(DatabaseClient databaseClient, V value) async
/// Save a record, create if needed.
///
/// if [merge] is true and the field exists, data is merged
///
/// Returns the updated value.
Future<V> put(DatabaseClient databaseClient, V value, {bool merge}) async
因此,基本上添加不会覆盖记录,而放置会
编辑:
if (merge == true) {
record = txnGetRecordSync(txn, key);
//if (record != null) {
// Always merge to get rid of FieldValue.delete if any
value = mergeValue(record?.value, value, allowDotsInKeys: true);
//}
} else {
// Simple clone the calue
value = cloneValue(value);
}
和
/// Merge an existing value with a new value, Map only!
dynamic mergeValue(dynamic existingValue, dynamic newValue,
因此,合并仅适用于地图,如果按您说的那样起作用,否则将创建对象的副本,因此其中不存在的字段将消失。