baligh/lib/screens/register_screen.dart
Abdullah Salah e3ea8335d1 First Commit
2024-12-26 09:05:13 +03:00

174 lines
5.7 KiB
Dart

import 'package:baligh/screens/home_screen.dart';
import 'package:baligh/widgets/app_toast.dart';
import 'package:baligh/widgets/custom_button.dart';
import 'package:baligh/widgets/custom_text_field.dart';
import 'package:bot_toast/bot_toast.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
class RegisterScreen extends StatefulWidget {
const RegisterScreen({super.key});
@override
State<RegisterScreen> createState() => _RegisterScreenState();
}
class _RegisterScreenState extends State<RegisterScreen> {
TextEditingController fullNameController = TextEditingController();
TextEditingController ageController = TextEditingController();
TextEditingController schoolNameController = TextEditingController();
TextEditingController stageController = TextEditingController();
TextEditingController addressController = TextEditingController();
TextEditingController nationalIdNumberController = TextEditingController();
bool isLoading = false;
@override
void dispose() {
fullNameController.dispose();
ageController.dispose();
schoolNameController.dispose();
stageController.dispose();
addressController.dispose();
nationalIdNumberController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Directionality(
textDirection: TextDirection.rtl,
child: Scaffold(
appBar: AppBar(),
body: SafeArea(
child: ListView(
padding: const EdgeInsets.all(15),
children: [
const SizedBox(
height: 30,
),
Text(
"انشاء حساب",
style: Theme.of(context).textTheme.headlineLarge,
),
const SizedBox(
height: 30,
),
CustomTextField(
controller: fullNameController,
labelText: "الاسم الثلاثي",
inputType: TextInputType.text),
const SizedBox(
height: 10,
),
CustomTextField(
controller: ageController,
labelText: "العمر",
inputType: TextInputType.number),
const SizedBox(
height: 10,
),
CustomTextField(
controller: schoolNameController,
labelText: "اسم المدرسة",
inputType: TextInputType.text),
const SizedBox(
height: 10,
),
CustomTextField(
controller: stageController,
labelText: "المرحلة الدراسية",
inputType: TextInputType.text),
const SizedBox(
height: 10,
),
CustomTextField(
controller: addressController,
labelText: "عنوان السكن",
inputType: TextInputType.text),
const SizedBox(
height: 10,
),
CustomTextField(
controller: nationalIdNumberController,
labelText: "رقم البطاقة الوطنية الموحدة",
inputType: TextInputType.number),
const SizedBox(
height: 10,
),
CustomButton(
label: "انشاء حساب",
isElevated: true,
onPressed: handleRegister,
isLoading: isLoading,
),
],
),
),
),
);
}
Future<void> handleRegister() async {
if (fullNameController.text.trim().isEmpty ||
ageController.text.trim().isEmpty ||
schoolNameController.text.trim().isEmpty ||
stageController.text.trim().isEmpty ||
addressController.text.trim().isEmpty ||
nationalIdNumberController.text.trim().isEmpty) {
BotToast.showCustomText(toastBuilder: (_) {
return const AppToast(text: "يجب ملئ جميع الحقول");
});
}
setState(() {
isLoading = true;
});
try {
final auth = FirebaseAuth.instance;
await auth.currentUser?.updateDisplayName(fullNameController.text.trim());
if (FirebaseAuth.instance.currentUser?.uid == null) {
setState(() {
isLoading = false;
});
BotToast.showCustomText(toastBuilder: (_) {
return const AppToast(text: "حدث خطأ ما");
});
}
await FirebaseFirestore.instance
.collection('users').doc(FirebaseAuth.instance.currentUser?.uid ?? "").set({
'uid': FirebaseAuth.instance.currentUser?.uid ?? "",
'name': fullNameController.text.trim(),
'phone': FirebaseAuth.instance.currentUser?.phoneNumber ?? "",
'age': int.parse(ageController.text.trim()),
'schoolName': schoolNameController.text.trim(),
'stage': stageController.text.trim(),
'address': addressController.text.trim(),
'nationalIdNumber': int.parse(nationalIdNumberController.text.trim()),
'createdAt': FieldValue.serverTimestamp(),
});
setState(() {
isLoading = false;
});
if (!mounted) return;
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(builder: (context) => const HomeScreen()),
(x) => false);
} catch (e) {
setState(() {
isLoading = false;
});
BotToast.showCustomText(toastBuilder: (_) {
return const AppToast(text: "حدث خطأ ما");
});
}
}
}