При использовании нескольких потоков setData для записи в базу данных Firebase разрешается только последний поток. Например:
Future registerWithEmailAndPassword(String email, String password) async {
try {
AuthResult result = await _auth.createUserWithEmailAndPassword(email: email, password: password);
FirebaseUser user = result.user;
await Firestore.instance.collection('stores').document(user.uid).setData({'String1': 'My First String', 'String2': 'My Second String', 'String3': 'My Third String'});
await Firestore.instance.collection('stores').document(user.uid).setData({'String4': 'My Fourth String', 'String5': 'My Fifth String', 'String6': 'My Sixth String'});
return userFromFirebaseUser(user);
} catch(e) {
print('REGISTER EnP ERROR: ' + e.toString());
return null;
}
}
Результаты в базе данных Firebase, показывающие следующее, когда я создаю нового пользователя:
String4: "My Fourth String"
String5: "My Fifth String"
String6: "My Sixth String"
Потребуется возможность записи в базу данных таким образом, каждая запись должна «ждать» завершения, прежде чем двигаться дальше, но это не похоже на то, что происходит.
(EDIT) Для barbecu:
Фактический код состоит в том, что вместо записи напрямую с помощью setData I передавать данные через классы. Так что вместо:
await Firestore.instance.collection('stores').document(user.uid).setData({'String1': 'My First String', 'String2': 'My Second String', 'String3': 'My Third String'});
await Firestore.instance.collection('stores').document(user.uid).setData({'String4': 'My Fourth String', 'String5': 'My Fifth String', 'String6': 'My Sixth String'});
это фактически написано как:
await DatabaseService1(uid: user.uid).updateUserData(variable1, variable2, variable3);
await DatabaseService2(uid: user.uid).updateUserData(variable4, variable5, variable6);
Итак, когда дело доходит до решения пакетного типа, я не совсем уверен, как написать синтаксис того, как чтобы вызвать эти классы в пакет, а затем запустить его.