import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:google_sign_in/google_sign_in.dart'; import 'package:http/http.dart' as http; import 'navigation_controller_page.dart'; import 'package:pvt15/pages/add_user_credentials_page.dart'; import 'package:pvt15/services/auth/auth_service.dart'; class GoogleSignInPage extends StatefulWidget { const GoogleSignInPage({super.key}); @override State createState() => _GoogleSignInPageState(); } class _GoogleSignInPageState extends State { GoogleSignIn signInCredentials = GoogleSignIn( scopes: ['email', 'profile', 'openid'], serverClientId: "63395519979-robk2jog8rd89mi68466259r5arqufm1.apps.googleusercontent.com", hostedDomain: '', ); final AuthService authService = AuthService(); Future doesUserExist(String? googleID) async { if (googleID == null || googleID.isEmpty) { return false; } final url = Uri.parse('https://group-1-15.pvt.dsv.su.se/api/users/$googleID'); print(url); try { final response = await http.get(url); print("response.statusCode: ${response.statusCode}"); if (response.statusCode == 200) { final jsonData = jsonDecode(response.body); print('Användare från backend: $jsonData'); return true; } else if (response.statusCode == 404) { print('Hittade ingen användare'); return false; } else { print('Fel vid anrop till backend: ${response.statusCode} Body: ${response.body}'); throw Exception('Fel vid anrop till backend: ${response.statusCode} Body: ${response.body}'); } } catch (e) { print('Ett fel inträffade vid anrop till backend: $e'); throw Exception('Ett fel inträffade vid anrop till backend: $e'); } } void googleSignIn() async { try { final GoogleSignInAccount? googleUser = await signInCredentials.signIn(); if (googleUser != null) { final GoogleSignInAuthentication googleAuth = await googleUser.authentication; //final String? accessToken = googleAuth.accessToken; final String? idToken = googleAuth.idToken; print('Google User: $googleUser'); print("idToken: $idToken"); if (idToken != null) { final response = await http.post( Uri.parse('https://group-1-15.pvt.dsv.su.se/api/auth/google/login'), // Ersätt med din backend-URL headers: { 'Content-Type': 'application/json; charset=UTF-8', }, body: jsonEncode({ 'idToken': idToken, } ), ); if (response.statusCode == 200) { // Hantera lyckat svar från backend final responseData = jsonDecode(response.body); final String applicationAccessToken = responseData['accessToken']; final String applicationRefreshToken = responseData['refreshToken']; final String? username = responseData['username']; print('Responsebody: $responseData'); // Spara dina applikationsspecifika tokens säkert (t.ex., med flutter_secure_storage) await authService.saveTokens(applicationAccessToken, applicationRefreshToken); print(username); //print('Inloggning lyckades!'); if (username == null) { //navigera till addUserCredentialPage print('Navigera till addUserCredentialsPage'); Navigator.push( context, MaterialPageRoute(builder: (context) => AddUserCredentialPage(user: googleUser)), ); } else{ //Navigera till WheelPage Navigator.push( context, MaterialPageRoute(builder: (context) => NavigationControllerPage(user: googleUser)), ); } } else { // Hantera fel från backend (t.ex., ogiltigt idToken) print('Inloggning misslyckades med status: ${response.statusCode}'); print('Body: ${response.body}'); } } else { print('Inget ID-token att skicka till backend.'); } } else { //Gör någon error och navigera inte någonstans print('Inloggning avbröts av användaren.'); } } catch (e) { //Gör någon error och navigera inte någonstans print('Fel vid Google Sign-In: $e'); } } @override Widget build(BuildContext context) { return Scaffold( body: Container( decoration: const BoxDecoration( gradient: LinearGradient( begin: Alignment.topCenter, end: Alignment.bottomCenter, colors: [Color(0xFFA800DB), Color(0xFFFF31E0)], ), ), child: Center( // Wrappa Column med Center child: Column( mainAxisSize: MainAxisSize.min, children: [ const SizedBox(height: 16), Row( mainAxisSize: MainAxisSize.min, children: [ Text( 'Hop', textAlign: TextAlign.center, style: TextStyle( color: const Color(0xFFFF5394), fontSize: 60, fontFamily: 'Poppins', fontWeight: FontWeight.w700, height: 0.27, letterSpacing: 0.50, shadows: const [Shadow(offset: Offset(0, 6), blurRadius: 8, color: Color(0x3F000000))], ), ), const SizedBox(width: 0.50), Text( 'Spot', style: TextStyle( color: const Color(0xFFFFC83B), fontSize: 60, fontFamily: 'Poppins', fontWeight: FontWeight.w700, height: 0.27, letterSpacing: 0.50, shadows: const [Shadow(offset: Offset(0, 6), blurRadius: 8, color: Color(0x3F000000))], ), ), ], ), const SizedBox(height: 150), Image( image: AssetImage("assets/images/KMLogga.png"), // Lägg till sökvägen till din bild här height: 180, // Justera höjden efter behov ), const SizedBox(height: 60), ElevatedButton( onPressed: () { googleSignIn(); }, style: ElevatedButton.styleFrom( padding: EdgeInsets.zero, side: BorderSide.none, ), child: SizedBox( // Använd SizedBox för att styra bildens storlek inuti knappen width: 302, // Gör bilden så bred som möjligt height: 70, // Ange en lämplig höjd för knappen och bilden child: Image.asset( "assets/images/signInGoogleButton.png", fit: BoxFit.cover, // Fyller utrymmet, kan behöva justeras beroende på bildens proportioner ), ), ), ], ), ), ), ); } }