En este artículo, podemos aprender cómo cerrar la sesión del usuario desde una aplicación de flutter. Este artículo es una continuación del artículo que explica cómo crear la IU de inicio de sesión de Google y su autenticación. Se recomienda verificar lo mismo antes de seguir adelante.
Ahora implementaremos la función Cerrar sesión para la aplicación flutter.
Implementación:
Siga los pasos a continuación para implementar la función de cierre de sesión en Flutter:
Paso 1: Simplemente abra su archivo homePage.dart .
Paso 2: en Scaffold , llame al widget de botón de acción flotante, además de la propiedad presionada llamada función signOut .
Paso 3: En propiedad secundaria , tenemos que darle al Icono de cerrar sesión, un color de fondo es Verde.
Estamos listos para irnos. Ahora definamos la función signOut que necesitamos.
Paso 4: ahora, en primer lugar, haga que la instancia de firebaseAuth sea ‘auth ‘.
Paso 5: arriba de @override , simplemente defina la función. Esta función será asíncrona . Ahora, mediante el uso de auth, llame al método incorporado signOut() .
Paso 6: Después de eso, simplemente llamamos al navegador para presionar la pantalla de registro.
Ahora nuestro archivo homepage.dart actualizado:
Dart
import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/material.dart'; import 'package:googlesign/signup.dart'; class HomePage extends StatefulWidget { @override _HomePageState createState() => _HomePageState(); } class _HomePageState extends State<HomePage> { final FirebaseAuth auth = FirebaseAuth.instance; //signout function signOut() async { await auth.signOut(); Navigator.pushReplacement( context, MaterialPageRoute(builder: (context) => SignInScreen())); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( centerTitle: true, backgroundColor: Colors.green, title: Text("GEEKS FOR GEEKS"), ), // floating Action Button using for signout , floatingActionButton: FloatingActionButton( onPressed: () { signOut(); }, child: Icon(Icons.logout_rounded), backgroundColor: Colors.green, ), body: Center( child: Text("Home page"), ), ); } }
Si pulsamos el botón, salimos de la aplicación y pasamos a la pantalla de inicio de sesión. Pero hay un problema si volvemos a abrir la aplicación sin cerrar sesión, no navegamos directamente a la página de inicio, tenemos que volver a iniciar sesión en la aplicación. Este es el gran problema.
Ahora resolvamos esto, si creamos una variable bool «islogin» y la convertimos en verdadera cuando realmente iniciamos sesión , y la convertimos en falsa cuando cerramos la sesión de la aplicación. Ahora podemos verificar el valor de islogin durante la inicialización de la aplicación. Si islogin es verdadero , vamos a la pantalla de inicio, de lo contrario, a la pantalla de inicio de sesión . Podemos almacenar el valor en sharedPrerferences .
Hagámoslo ahora:
add shared_preferences: ^2.0.6 in pubspec yaml file.
Paso 7: Cree un nuevo archivo shared.dart e importe la biblioteca de paquetes.
Paso 8: Haga una clase «Compartir» y haga dos funciones para guardar datos y leer datos respectivamente.
Dart
import 'package:shared_preferences/shared_preferences.dart'; class Shared { static String loginSharedPreference = "LOGGEDINKEY"; // save data static Future<bool> saveLoginSharedPreference(islogin) async { SharedPreferences prefs = await SharedPreferences.getInstance(); return await prefs.setBool(loginSharedPreference, islogin); } //fetch data static Future getUserSharedPrefernces() async { SharedPreferences preferences = await SharedPreferences.getInstance(); return preferences.getBool(loginSharedPreference); } }
Ahora abra su archivo main.dart y realice los siguientes cambios.
Dart
import 'package:flutter/material.dart'; import 'package:googlesign/homepage.dart'; import 'package:googlesign/share.dart'; import 'package:googlesign/signup.dart'; import 'package:firebase_core/firebase_core.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); // initializing the firebase app runApp(GoogleSignIn()); // calling runApp } // google signin stateful widget class GoogleSignIn extends StatefulWidget { GoogleSignIn({Key? key}) : super(key: key); @override _GoogleSignInState createState() => _GoogleSignInState(); } class _GoogleSignInState extends State<GoogleSignIn> { var islogin; checkUserLoginState() async { await Shared.getUserSharedPrefernces().then((value) { setState(() { islogin = value; }); }); } @override void initState() { checkUserLoginState(); super.initState(); } @override Widget build(BuildContext context) { return MaterialApp( title: 'GEEKS FOR GEEKS', debugShowCheckedModeBanner: false, // debug banner false that is show on corner theme: ThemeData( primarySwatch: Colors.cyan, // color to our app ), home: islogin != null ? islogin ? HomePage() : SignInScreen() : SignInScreen(), ); } }
Producción :