我想将用户的名字添加为包含'firstName‘和'lastName’的地图。我已经有了用户模型和名称模型,下面是代码:
name_model.dart
class Name {
final String firstName;
final String lastName;
Name({
required this.firstName,
required this.lastName,
});
Map<String, dynamic> toMap() {
return {
'firstName': firstName,
'lastName': lastName,
};
}
Name.fromMap(Map<String, dynamic> nameMap)
: firstName = nameMap['firstName'],
lastName = nameMap['lastName'];
}user_model.dart
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:ukk_backup/models/name_model.dart';
class User {
final String? docId;
final String email;
final String password;
final String phoneNumber;
final Name name;
User({
this.docId,
required this.email,
required this.password,
required this.phoneNumber,
required this.name,
});
Map<String, dynamic> toMap() => {
'docId': docId,
'email': email,
'password': password,
'phoneNumber': phoneNumber,
'name': name.toMap(),
};
User.fromDocumentSnapshot(DocumentSnapshot<Map<String, dynamic>> doc)
: docId = doc.id,
email = doc['email'],
password = doc['password'],
phoneNumber = doc['phoneNumber'],
name = Name.fromMap(doc['name']);
}当我按下“注册”按钮时,我希望将所有数据保存在云防火墙中,包括带有映射类型的名称。这是onPressed
onPressed: (() async {
if (_formKey.currentState!.validate()) {
DatabaseService service = DatabaseService();
User user = User(
email: emailController.text,
password: passwordController.text,
phoneNumber: phoneNumberController.text,
name: , //what to type?
);
setState(() {
_isLoading = true;
});
await service.addUser(user);
setState(() {
_isLoading = false;
});
}
}),如果您发现我的一些代码不正确,或者您找到了解决方案,请告诉我。谢谢。
编辑:
database_services.dart
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:ukk_backup/models/user_model.dart';
class DatabaseService {
final FirebaseFirestore _firestore = FirebaseFirestore.instance;
addUser(User userData) async {
await _firestore.collection('users').add(userData.toMap());
}
updateUser(User userData) async {
await _firestore
.collection('users')
.doc(userData.docId)
.update(userData.toMap());
}
Future<void> deleteUser(String documentId) async {
await _firestore.collection('users').doc(documentId).delete();
}
Future<List<User>> retrieveUser() async {
QuerySnapshot<Map<String, dynamic>> snapshot =
await _firestore.collection('users').get();
return snapshot.docs
.map((docSnapshot) => User.fromDocumentSnapshot(docSnapshot))
.toList();
}
}发布于 2022-03-31 11:35:09
我先误解了你的问题。在我看来,你的DataBaseService课程没问题。因此,如果我是对的,您唯一的问题就是不知道如何将名称添加到UserObject中。如果这是你问题的实质,那就很简单了:
onPressed: (() async {
if (_formKey.currentState!.validate()) {
DatabaseService service = DatabaseService();
User user = User(
email: emailController.text,
password: passwordController.text,
phoneNumber: phoneNumberController.text,
name: Name(firstName: firstNameController.text, lastName: lastNameController.text),
);
setState(() {
_isLoading = true;
});
await service.addUser(user);
setState(() {
_isLoading = false;
});
}
}),https://stackoverflow.com/questions/71680112
复制相似问题