所以我正在为大学做一个项目,我需要为教师和学生制作一个应用程序,所以我尝试使其基于角色的注册,这样它就可以很好地排序,但代码没有记录我的数据我能够进行身份验证,但无法存储在 firestore 中
代码
import 'package:prepup/authentication_service.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
class ExpertReg extends StatefulWidget {
const ExpertReg({Key? key}) : super(key: key);
@override
State<ExpertReg> createState() => _ExpertRegState();
}
/////////////////////////////////////////
class _ExpertRegState extends State<ExpertReg> {
final AuthService _authService = AuthService(); // Initialize AuthService
//
//////////////////////////////////////////
bool _obscureText = true;
String? _selectedGender;
DateTime? _selectedDate;
TextEditingController _dobController = TextEditingController();
GlobalKey<FormState> formState = GlobalKey<FormState>();
late final TextEditingController _email;
late final TextEditingController _password;
@override
void initState() {
_email = TextEditingController();
_password = TextEditingController();
super.initState();
}
@override
void dispose() {
_email.dispose();
_password.dispose();
super.dispose();
}
void _selectDate(BuildContext context) async {
final DateTime? picked = await showDatePicker(
context: context,
initialDate: DateTime.now(),
firstDate: DateTime(1900),
lastDate: DateTime.now(),
);
if (picked != null && picked != _selectedDate) {
setState(() {
_selectedDate = picked;
_dobController.text = "${_selectedDate!.day}/${_selectedDate!.month}/${_selectedDate!.year}";
});
}
}
////////***************************************
void _registerUser() async {
final email = _email.text;
final password = _password.text;
final role = 'expert'; // based on your logic
try {
// Register the user with Firebase Authentication
final UserCredential userCredential = await FirebaseAuth.instance.createUserWithEmailAndPassword(
email: email,
password: password,
);
// Get the newly registered user's ID
final String userId = userCredential.user!.uid;
// Create a document in Firestore for the new user
await FirebaseFirestore.instance.collection('Customers').doc(userId).set({
'email': email,
'role': role,
// Add other user data as needed
});
// Handle navigation or display messages after registration
Navigator.of(context).pushReplacementNamed('HomePage');
} catch (e) {
// Handle registration errors
print('Error registering user: $e');
// Display an error message to the user or handle it in another way
}
}
所以我尝试了另一种方法,即使用一个全新的类创建一个全新的 dart 文件,并在学生(客户)和老师(专家)的注册页面中调用该类,但它仍然不起作用有人知道吗我怎样才能将数据记录到 firestore 数据库中???
规则
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// This rule allows anyone with your Firestore database reference to view, edit,
// and delete all data in your Firestore database. It is useful for getting
// started, but it is configured to expire after 30 days because it
// leaves your app open to attackers. At that time, all client
// requests to your Firestore database will be denied.
//
// Make sure to write security rules for your app before that time, or else
// all client requests to your Firestore database will be denied until you Update
// your rules
match /{document=**} {
allow read, write: if request.time < timestamp.date(2024, 4, 28);
}
}
}
确保您的 Firebase 项目已正确配置为与 Firestore 配合使用。仔细检查您是否已在 Firebase 项目中启用 Firestore 以及您的应用是否已正确链接到此 Firebase 项目。
首先使用您想要的名称创建一个集合,即使用任何虚拟数据创建
Customers
,然后尝试调用_registerUser()
。