FaucetHubv2/lib/welcome.dart
2023-06-14 14:34:44 +05:30

292 lines
8.8 KiB
Dart

import 'package:fhub/backend/DataManager.dart';
import 'package:fhub/backend/Dialogs.dart';
import 'package:fhub/backend/login_mgr.dart';
import 'package:fhub/home.dart';
import 'package:fhub/src/CustomWidgets.dart';
import 'package:flutter/material.dart';
import 'package:google_sign_in/google_sign_in.dart';
import 'backend/DebugHelper.dart';
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key});
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int counter = -1;
bool loginLoading = false;
@override
void initState() {
// TODO: implement initState
super.initState();
kickstartAnimations();
init();
}
void init() async{
if(await DataManager.Init() == false){
return;
}
if(await LoginManager.AutoLogin() == 0){
loadHome();
}else{
counter=0;
setState(() {
});
}
}
void kickstartAnimations() async {
await Future.delayed(const Duration(milliseconds: 500));
setState(() {
op1 = 1;
op2 = 1;
op3 = 1;
});
}
void loadHome(){
Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (context) =>
Home()), (Route<dynamic> route) => false);
}
@override
Widget build(BuildContext context) {
final screenHeight = MediaQuery
.of(context)
.size
.height;
final screenWidth = MediaQuery
.of(context)
.size
.width;
return Scaffold(
backgroundColor: Colors.black,
extendBody: true,
body: CustomBody(
onAnimEnd: () {
setState(() {});
},
context: context,
child: CurrentScreen(),
));
}
Widget CurrentScreen() {
switch (counter) {
case -1:
return Header(child: const Center(child:Text("Loading...")));
break;
case 1:
return LoginPage();
break;
default:
return LandingPage();
break;
}
}
Widget LandingPage() {
return Header(child: Container(
// color: Colors.black12,
child: Column(
mainAxisAlignment: MainAxisAlignment.end,
children: [
const Padding(
padding: EdgeInsets.symmetric(horizontal: 80.0),
child: Text(
"Start Earning Crypto by playing games",
style: TextStyle(fontSize: 18),
textAlign: TextAlign.center,
),
),
const SizedBox(height: 100),
NeonButton(
onPressed: () {
setState(() {
counter = 1;
});
},
text: "Get Started",
trailing: const Icon(
Icons.arrow_circle_right_outlined,
size: 30,
)),
const SizedBox(height: 120),
],
),
),);
}
bool isLogin = true;
TextEditingController usernameController = TextEditingController();
TextEditingController passwordController = TextEditingController();
Widget LoginPage() {
return Header(child: loginLoading ? const Center(child: Text("Loading...")) : Column(mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text("Let's Get you ${isLogin ? "Logged-In" : "Registered"}!",
style: TextStyle(fontSize: 20)),
const SizedBox(height: 30,),
Row(mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(Icons.person), SizedBox(width: 15,),
SizedBox(width: 250,
child: TextField(controller: usernameController,
decoration: InputDecoration(hintText: "Username"),),)
],),
Row(mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(Icons.key),
SizedBox(width: 15,),
SizedBox(width: 250,
child: TextField(controller:passwordController,obscureText: true,
decoration: InputDecoration(hintText: "Password"),),)
],),
const SizedBox(height: 20,),
NeonButton(height: 40,
width: 200,
onPressed: () async{
if(usernameController.text.length < 3){
Dialogs.showAlertDialog(context, "Invalid Input", "Username must be longer than 3 characters");
return;
}
if(passwordController.text.length < 3){
Dialogs.showAlertDialog(context, "Invalid Input", "Password must be longer than 3 characters");
return;
}
if(passwordController.text.contains(" ") || usernameController.text.contains(" ")){
Dialogs.showAlertDialog(context, "Invalid Input", "Neither the username nor password can contain spaces");
return;
}
setState(() {
loginLoading = true;
});
if(isLogin){
int loginResult = await LoginManager.Login(usernameController.text, passwordController.text);
if(loginResult == 0){
loadHome();
}else if(loginResult == 5){
Dialogs.showAlertDialog(context, "Login Failed", "Incorrect username or password");
}else{
Dialogs.showAlertDialog(context, "Login Failed", "Error code : $loginResult");
}
}else{
int regResult = await LoginManager.Register(usernameController.text, passwordController.text);
if(regResult == 0){
loadHome();
}else if(regResult == 5){
Dialogs.showAlertDialog(context, "Register Failed", "Username Already exists, Please try again with a different username");
}else{
Dialogs.showAlertDialog(context, "Register Failed", "Error code : $regResult");
}
}
setState(() {
loginLoading = false;
});
},
text: isLogin ? "Login" : "Register"),
const SizedBox(height: 10,),
InkWell(
child: Text(isLogin
? "Don't have an account? Register here"
: "Already have an Account? Login here",
style: TextStyle(color: Colors.blue)), onTap: () {
setState(() {
isLogin = !isLogin;
});
},),
const Padding(
padding: EdgeInsets.all(25.0),
child: Center(child: Text("OR")),
),
Row(
mainAxisAlignment: MainAxisAlignment.center, children: [
NeonButton(onPressed: () {
// Dialogs.showAlertDialog(context, "Test", "This is a test message");
SignWithGoogle();
},
text: "Sign with Google",
colors: [Colors.green, Colors.teal],
fontSize: 18,
height: 45,
heading: Icon(Icons.g_mobiledata, size: 40,))
],)
]));
}
Widget Header({required Widget child, MainAxisAlignment alignment = MainAxisAlignment.start}) {
return Column(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: alignment,
children: [
const SizedBox(height: 50,),
AnimatedSize(
duration: const Duration(seconds: 1),
curve: Curves.fastLinearToSlowEaseIn,
child: SizedBox(
height: (counter == 1) ? 180 : 250,
child: Center(
child: Image.asset(
'images/fhub_logo.png',
filterQuality: FilterQuality.medium,
),
),
),
),
Expanded(child: child)
],
);
}
Future<void> SignWithGoogle() async {
setState(() {
loginLoading = true;
});
GoogleSignIn _googleSignIn = GoogleSignIn(
scopes: [
'email',
'https://www.googleapis.com/auth/contacts.readonly',
],
);
try {
GoogleSignInAccount? account = await _googleSignIn.signIn();
String email = account!.email;
Debug.LogResponse(email);
int registerResult = await LoginManager.GoogleLogin(email);
if(registerResult == 0){
loadHome();
}else if(registerResult == 1){
Dialogs.showAlertDialog(context, "Failed", "Servers are unreachable. Please check internet connection and try again.");
}else if(registerResult == 5){
Dialogs.showAlertDialog(context, "Failed", "Couldn't Login with this google account");
}
} catch (error) {
print(error);
print("google sign in failed");
}
setState(() {
loginLoading = false;
});
}
}