# #firebase #flutter #google-cloud-firestore #flutter-test
Вопрос:
Я хочу отредактировать следующую пару ключей в Cloud Firestore:
Для этого я создал кнопку, которая вызывает следующую функцию:
void select(key) {
if (key == 'Stufe 1') {
stufenService.editStufe('Stufe', 1);
}
if (key == 'Stufe 2') {
stufenService.editStufe('Stufe', 2);
}
if (key == 'Stufe 3') {
stufenService.editStufe('Stufe', 3);
}
if (key == 'Stufe 4') {
stufenService.editStufe('Stufe', 4);
}
if (key == 'Stufe 5') {
stufenService.editStufe('Stufe', 5);
}
if (key == 'Stufe 6') {
stufenService.editStufe('Stufe', 6);
} print(key);
}
Это точный код stufenService.editStufe(строка, int):
final CollectionReference userTodos =
FirebaseFirestore.instance.collection('userTodos');
Future editStufe(String Stufe, int i) async{
return await userTodos.doc(userID).update({Stufe: i});
}
}
Когда я нажимаю кнопку с вызовом «выбрать», в консоли печатается только клавиша.
В Cloud Firestore ничего не меняется.
Я думаю, что ошибка где-то здесь:
final CollectionReference userTodos =
FirebaseFirestore.instance.collection('userTodos');
Future editStufe(String Stufe, int i) async{
return await userTodos.doc(userID).update({Stufe: i});
}
}
Я надеюсь, что я предоставил все необходимые данные, чтобы проблема могла быть решена. Если нет, просто напишите мне, и я постараюсь выслать вам необходимый материал.
Ответ №1:
Просматривая Google и внешнюю документацию, вы можете использовать следующий пример кода для обновления пары ключей на Cloud Firestore
:
Это пример кода того, как обновить пару ключей с помощью ‘ update
:
const usuariosRef = db.collection(‘userTodos’);
//userTodosRef.doc(‘ID’)
userTodosRef
.doc(‘81Acc0wgLegYMSTTrCWLRQhzjA2’)
.update({
stufe = 1
});
This is an example code of how to update your key pair using ‘`set`’:
const usuariosRef = db.collection(‘userTodos’);
//userTodosRef.doc(‘ID’)
userTodosRef
.doc(‘81Acc0wgLegYMSTTrCWLRQhzjA2’)
.set({
stufe = 1
});
Разница между ними заключается в том, что «обновить» изменяет только значение, которое вы хотите обновить, «установить» удаляет все данные и обновляет их с добавленной стоимостью.
Вот документ, который может помочь вам с рекомендациями, которые вы можете выполнить с вашими данными: https://googleapis.dev/nodejs/firestore/latest/DocumentReference.html#update
Комментарии:
1. Спасибо вам за ваш ответ! Я просто не понимаю часть вашего объяснения:
const usuariosRef = db.collection(‘userTodos’);
Вы больше не используете usuarioRef. И должен ли я использовать:FirebaseFirestore.instance.collection('userTodos');
вместо этого? база данных не инициализируется в моем коде.2. Кроме того,
stufe = 1
подчеркнуто красным цветом. Ошибка:The argument type 'Set<int>' can't be assigned to the parameter type 'Map<String, Object?>'.
3. Вызов набора с идентификатором, который уже существует в коллекции, заменит все данные документа. Вы также можете указать параметр SetOption(merge: true)) в запросе и объединить существующий документ с данными, переданными в набор( )
CollectionReference users = FirebaseFirestore.instance.collection('users'); Future<void> addUser() { return users // existing document in 'users' collection: "ABC123" .doc('ABC123') .set({ 'full_name': "Mary Jane", 'age': 18 }, SetOptions(merge: true),
4. Если вы хотите обновить документ вместо этого, используйте набор методов обновления
CollectionReference users = FirebaseFirestore.instance.collection('users'); Future<void> updateUser() { return users .doc('ABC123') .update({'company': 'Stokes and Sons'}) .then((value) => print("User Updated")) .catchError((error) => print("Failed to update user: $error")); }
и примеры обновления, вы можете отредактировать свой код, не забудьте обновить идентификатор .doc с идентификатором: 81Acc0wgLegYMSTTrCWLRQhzjA25. На первый взгляд кажется, что это работает. Я создаю следующее будущее в «StufenService»:
Future<void> updateUser(String text, int i){ return users .doc('8lAcc0wgLegYMST5TrCWLRQhzjA2') .update({text : i}) .then((value) => print("User Updated")) .catchError((error) => print("Failed to update user: $error"));}
И для функции кнопки я использовал этот код:void select(key){ if (key == 'Stufe 1') { stufenService.updateUser('Stufe', 1); }
Консоль также выводит Обновленные данные пользователя. Но документ в firebase остается в «Stufe»: 0