mutateParams method
(List<String> , List<String> , List<String> )
mutateParams(
- List<
_FieldInfo> fields, - ClassElement cls
Implementation
(List<String>, List<String>, List<String>) mutateParams(
List<_FieldInfo> fields,
ClassElement cls,
) {
List<String> imports = [];
List<String> params = [];
List<String> impl = [];
String cmt(String src, {String? comment}) {
if (comment == null) {
return src;
}
return "\n /// $comment\n $src";
}
for (_FieldInfo f in fields) {
bool accept = false;
if (isSafeField(f)) {
accept = true;
impl.add("if(${f.name} != null) '${f.name}': ${f.name}");
if (f.type == "int?" || f.type == "int") {
params.add(
cmt(
"int? delta${f.name.capitalize()}",
comment:
"Changes (increment/decrement) [${f.name}] by an amount atomically using FieldValue.increment() see https://cloud.google.com/firestore/docs/manage-data/add-data#increment_a_numeric_value.",
),
);
impl.add(
"if(delta${f.name.capitalize()} != null) '${f.name}': FieldValue.increment(delta${f.name.capitalize()})",
);
}
if (f.type == "double?" || f.type == "double") {
params.add(
cmt(
"double? delta${f.name.capitalize()}",
comment:
"Changes (increment/decrement) [${f.name}] by an amount atomically using FieldValue.increment() see https://cloud.google.com/firestore/docs/manage-data/add-data#increment_a_numeric_value.",
),
);
impl.add(
"if(delta${f.name.capitalize()} != null) '${f.name}': FieldValue.increment(delta${f.name.capitalize()})",
);
}
} else {
if (f.type == "DateTime" || f.type == "DateTime?") {
accept = true;
impl.add(
"if(${f.name} != null) '${f.name}': ${f.name}.toIso8601String()",
);
} else if (_isEnum(f.dartType)) {
accept = true;
impl.add("if(${f.name} != null) '${f.name}': ${f.name}.name");
} else if (f.type.startsWith("List<") || f.type.startsWith("Set<")) {
DartType? itype = innerOfList(f.dartType);
if (itype == null) {
continue;
}
Uri iuri = importForType(itype, cls.library); // helper below
imports.add("import '$iuri';");
params.add(
cmt(
"${f.type.endsWith("?") ? f.type : "${f.type}?"} add${f.name.capitalize()}",
comment:
"Adds multiple [${itype.name}] to the [${f.name}] field atomically using FieldValue.arrayUnion(). See https://cloud.google.com/firestore/docs/manage-data/add-data#update_elements_in_an_array",
),
);
params.add(
cmt(
"${f.type.endsWith("?") ? f.type : "${f.type}?"} remove${f.name.capitalize()}",
comment:
"Removes one or more [${itype.name}] to the [${f.name}] field atomically using FieldValue.arrayRemove(). See https://cloud.google.com/firestore/docs/manage-data/add-data#update_elements_in_an_array",
),
);
impl.add(
"if(add${f.name.capitalize()} != null && add${f.name.capitalize()}.isNotEmpty) '${f.name}': FieldValue.arrayUnion(add${f.name.capitalize()}.map((v) => v${mapVX(itype)}).toList())",
);
impl.add(
"if(remove${f.name.capitalize()} != null && remove${f.name.capitalize()}.isNotEmpty) '${f.name}': FieldValue.arrayRemove(remove${f.name.capitalize()}.map((v) => v${mapVX(itype)}).toList())",
);
impl.add(
"if(${f.name} != null) '${f.name}': ${f.name}.map((v) => v${mapVX(itype)}).toList()",
);
accept = true;
} else if (!f.type.startsWith("Map<")) {
accept = true;
impl.add("if(${f.name} != null) '${f.name}': ${f.name}.toMap()");
}
}
if (accept) {
params.add(
cmt(
'${f.type.endsWith("?") ? f.type : "${f.type}?"} ${f.name}',
comment:
"Replaces the value of [${f.name}] with a new value atomically.",
),
);
imports.add('import "${importForType(f.dartType, cls.library)}";');
}
params.add(
cmt(
'bool delete${f.name.capitalize()} = false',
comment:
"Removes the [${f.name}] field from the document atomically using FieldValue.delete(). See https://cloud.google.com/firestore/docs/manage-data/delete-data#fields",
),
);
impl.add(
"if(delete${f.name.capitalize()}) '${f.name}': FieldValue.delete()",
);
}
return (imports.toSet().toList(), params, impl);
}