我的代码没有将数据记录到 firestore 数据库中

问题描述 投票:0回答:1

所以我正在为大学做一个项目,我需要为教师和学生制作一个应用程序,所以我尝试使其基于角色的注册,这样它就可以很好地排序,但代码没有记录我的数据我能够进行身份验证,但无法存储在 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);
        }
    }
}
android ios flutter dart project
1个回答
0
投票

确保您的 Firebase 项目已正确配置为与 Firestore 配合使用。仔细检查您是否已在 Firebase 项目中启用 Firestore 以及您的应用是否已正确链接到此 Firebase 项目。

首先使用您想要的名称创建一个集合,即使用任何虚拟数据创建

Customers
,然后尝试调用
_registerUser()

© www.soinside.com 2019 - 2024. All rights reserved.