From 819b3aafe41af59695a658aec80f5ffbed2492cd Mon Sep 17 00:00:00 2001 From: marcoabat Date: Sat, 5 Aug 2023 01:49:40 +0200 Subject: [PATCH] simple login --- lib/main.dart | 25 +++++++++++++++++++++++-- lib/pages/login_page.dart | 20 ++++++++++++-------- lib/services/dbhelper.dart | 13 +++++++++++++ 3 files changed, 48 insertions(+), 10 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 40bc182..fe767fd 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,18 +1,31 @@ +import 'package:briessenchecker/services/dbhelper.dart'; import 'package:flutter/material.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart'; +import 'package:gotrue/src/types/auth_state.dart'; +import 'package:supabase_flutter/supabase_flutter.dart'; import 'pages/login_page.dart'; void main() async { await dotenv.load(fileName: 'secrets.env'); + await DbHelper.init(); runApp(const MyApp()); } -class MyApp extends StatelessWidget { +class MyApp extends StatefulWidget { const MyApp({super.key}); + @override + State createState() => _MyAppState(); +} + +class _MyAppState extends State { + bool isLoggedIn = false; @override Widget build(BuildContext context) { + String initialRoute = + isLoggedIn ? LoginPage.routeName : LoginPage.routeName; + DbHelper.authChangeEventStream.listen(_onAuthEvent); return MaterialApp( title: 'Briessenchecker', theme: ThemeData.dark( @@ -20,10 +33,18 @@ class MyApp extends StatelessWidget { ).copyWith( colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), ), - initialRoute: LoginPage.routeName, + initialRoute: initialRoute, routes: { LoginPage.routeName: (context) => const LoginPage(), }, ); } + + void _onAuthEvent(AuthState event) { + if (event.event == AuthChangeEvent.signedIn) { + setState(() => isLoggedIn = true); + } else if (event.event == AuthChangeEvent.signedOut) { + setState(() => isLoggedIn = false); + } + } } diff --git a/lib/pages/login_page.dart b/lib/pages/login_page.dart index 122a8fa..b3a6191 100644 --- a/lib/pages/login_page.dart +++ b/lib/pages/login_page.dart @@ -1,3 +1,4 @@ +import 'package:briessenchecker/services/dbhelper.dart'; import 'package:flutter/material.dart'; class LoginPage extends StatelessWidget { @@ -6,9 +7,8 @@ class LoginPage extends StatelessWidget { @override Widget build(BuildContext context) { - TextEditingController usernameController = TextEditingController(); - TextEditingController passwordController = TextEditingController(); - + final TextEditingController _emailController = TextEditingController(); + final TextEditingController _passwordController = TextEditingController(); return Scaffold( body: Form( child: Column( @@ -16,20 +16,24 @@ class LoginPage extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ TextFormField( - controller: usernameController, - decoration: const InputDecoration(label: Text('Username')), + controller: _emailController, + decoration: const InputDecoration(label: Text('Email')), ), TextFormField( - controller: passwordController, + controller: _passwordController, decoration: const InputDecoration(label: Text('Password')), ), FloatingActionButton.extended( - onPressed: _loginSubmitted, label: const Text('Login')) + onPressed: () => _loginSubmitted( + _emailController.text, _passwordController.text), + label: const Text('Login')) ], ), ), ); } - void _loginSubmitted() {} + void _loginSubmitted(String email, String password) { + DbHelper.login(email, password); + } } diff --git a/lib/services/dbhelper.dart b/lib/services/dbhelper.dart index 0b88fcf..354aa70 100644 --- a/lib/services/dbhelper.dart +++ b/lib/services/dbhelper.dart @@ -3,10 +3,23 @@ import 'package:supabase_flutter/supabase_flutter.dart'; class DbHelper { static late final SupabaseClient _client; + static Future init() async { await Supabase.initialize( url: dotenv.env['SUPABASE_URL'] ?? '', anonKey: dotenv.env['SUPABASE_ANON'] ?? ''); _client = Supabase.instance.client; } + + static Future login(String email, String password) async { + email = 'sites@skup.in'; + password = 'pass'; + await _client.auth.signInWithPassword( + email: email, + password: password, + ); + } + + static Stream get authChangeEventStream => + _client.auth.onAuthStateChange; }