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 createState() => _MyHomePageState(); } class _MyHomePageState extends State { 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 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 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; }); } }