115 lines
3.5 KiB
Dart
115 lines
3.5 KiB
Dart
import 'package:cloud_firestore/cloud_firestore.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:firebase_auth/firebase_auth.dart';
|
|
import 'package:input_kwh/login.dart';
|
|
|
|
class RegistrationScreen extends StatefulWidget {
|
|
@override
|
|
_RegistrationScreenState createState() => _RegistrationScreenState();
|
|
}
|
|
|
|
class _RegistrationScreenState extends State<RegistrationScreen> {
|
|
final FirebaseAuth _auth = FirebaseAuth.instance;
|
|
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
|
|
|
|
late String _email, _password, _username;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
appBar: AppBar(
|
|
title: Text('Registration'),
|
|
),
|
|
body: Center(
|
|
child: Padding(
|
|
padding: const EdgeInsets.all(20.0),
|
|
child: Form(
|
|
key: _formKey,
|
|
child: Column(
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
children: [
|
|
TextFormField(
|
|
validator: (input) {
|
|
if (input!.isEmpty) {
|
|
return 'Please type an email';
|
|
}
|
|
return null;
|
|
},
|
|
onSaved: (input) => _email = input!,
|
|
decoration: InputDecoration(labelText: 'Email'),
|
|
),
|
|
TextFormField(
|
|
validator: (input) {
|
|
if (input!.length < 6) {
|
|
return 'Your password needs to be at least 6 characters';
|
|
}
|
|
return null;
|
|
},
|
|
onSaved: (input) => _password = input!,
|
|
decoration: InputDecoration(labelText: 'Password'),
|
|
obscureText: true,
|
|
),
|
|
TextFormField(
|
|
validator: (input) {
|
|
if (input!.isEmpty) {
|
|
return 'Please type an username';
|
|
}
|
|
return null;
|
|
},
|
|
onSaved: (input) => _username = input!,
|
|
decoration: InputDecoration(labelText: 'Username'),
|
|
),
|
|
SizedBox(height: 20),
|
|
ElevatedButton(
|
|
onPressed: signUp,
|
|
child: Text('Sign Up'),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
Future<void> signUp() async {
|
|
if (_formKey.currentState!.validate()) {
|
|
_formKey.currentState!.save();
|
|
try {
|
|
// Membuat pengguna baru di Firebase Authentication
|
|
UserCredential userCredential =
|
|
await _auth.createUserWithEmailAndPassword(
|
|
email: _email,
|
|
password: _password,
|
|
);
|
|
|
|
// Menyimpan data pengguna ke Firestore Firebase
|
|
await FirebaseFirestore.instance
|
|
.collection('akun')
|
|
.doc(userCredential.user!.uid)
|
|
.set({
|
|
'email': _email,
|
|
'password': _password,
|
|
'username': _username,
|
|
});
|
|
|
|
ScaffoldMessenger.of(context).showSnackBar(
|
|
SnackBar(
|
|
content: Text('Pengguna berhasil ditambahkan'),
|
|
),
|
|
);
|
|
|
|
// Jika registrasi berhasil, arahkan ke halaman login
|
|
Navigator.push(context, MaterialPageRoute(builder: (_) => Login()));
|
|
} catch (e) {
|
|
print('Error adding user: $e');
|
|
ScaffoldMessenger.of(context).showSnackBar(
|
|
SnackBar(
|
|
content: Text('Gagal menambahkan pengguna'),
|
|
),
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|