TKK_E32230254/lib/register_guru.dart

125 lines
3.5 KiB
Dart

import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
class RegisterGuru extends StatefulWidget {
const RegisterGuru({super.key});
@override
State<RegisterGuru> createState() => _RegisterGuruState();
}
class _RegisterGuruState extends State<RegisterGuru> {
final nama = TextEditingController();
final email = TextEditingController();
final password = TextEditingController();
bool isLoading = false;
Future<void> register() async {
if (nama.text.isEmpty ||
email.text.isEmpty ||
password.text.isEmpty) return;
setState(() => isLoading = true);
try {
final userCred =
await FirebaseAuth.instance.createUserWithEmailAndPassword(
email: email.text,
password: password.text,
);
await FirebaseFirestore.instance
.collection('users')
.doc(userCred.user!.uid)
.set({
'role': 'guru',
'nama': nama.text,
});
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Register berhasil')),
);
Navigator.pop(context);
} catch (e) {
ScaffoldMessenger.of(context)
.showSnackBar(const SnackBar(content: Text('Register gagal')));
}
setState(() => isLoading = false);
}
Widget input(controller, String hint, {bool pass = false}) {
return Container(
margin: const EdgeInsets.only(bottom: 15),
child: TextField(
controller: controller,
obscureText: pass,
decoration: InputDecoration(
hintText: hint,
filled: true,
fillColor: Colors.grey[100],
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(15),
borderSide: BorderSide.none,
),
),
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.blue,
appBar: AppBar(
title: const Text('Register Guru'),
backgroundColor: Colors.transparent,
elevation: 0,
),
body: Center(
child: Padding(
padding: const EdgeInsets.all(20),
child: Container(
padding: const EdgeInsets.all(20),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20),
color: Colors.white,
),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
const Icon(Icons.person_add, size: 60, color: Colors.blue),
const SizedBox(height: 10),
input(nama, 'Nama Guru'),
input(email, 'Email'),
input(password, 'Password', pass: true),
const SizedBox(height: 10),
SizedBox(
width: double.infinity,
child: ElevatedButton(
onPressed: isLoading ? null : register,
style: ElevatedButton.styleFrom(
padding: const EdgeInsets.all(15),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
),
child: isLoading
? const CircularProgressIndicator(color: Colors.white)
: const Text('Register'),
),
)
],
),
),
),
),
);
}
}