📜  Flutter – 实现注销用户

📅  最后修改于: 2022-05-13 01:55:44.938000             🧑  作者: Mango

Flutter – 实现注销用户

在本文中,我们可以学习如何从Flutter应用程序中flutter用户。本文是解释制作google signIn UI 及其身份验证的文章的续篇。建议在继续之前检查相同的内容。

现在我们将为flutter应用程序实现 Sign out 功能。

执行:

按照以下步骤在Flutter中实现注销功能:

第 1 步:只需打开您的主页。dart文件。

第 2 步:Scaffold中,调用floatingActionButton小部件,进一步的onpressed属性称为signOut函数。

第三步:属性中,我们要给出注销的图标,背景颜色是绿色。

我们可以走了。现在让我们定义我们需要的signOut函数。

第 4 步:现在首先将firebaseAuth实例设为“auth ”。

第 5 步:@override上方,只需定义函数。此函数将是async 。现在通过使用 auth 调用signOut()内置方法。

第6步:之后,我们只需调用导航器推送注册屏幕。

现在我们更新了主页。dart文件:

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 {
  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"),
      ),
    );
  }
}


Dart
import 'package:shared_preferences/shared_preferences.dart';
  
class Shared {
  static String loginSharedPreference = "LOGGEDINKEY";
  
  // save data
  
  static Future 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);
  }
}


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 {
  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(),
    );
  }
}


如果我们按下按钮,我们会退出应用程序并移动到登录屏幕。但是如果我们在没有注销的情况下再次打开应用程序会出现问题,我们不直接导航到主页,我们必须再次登录应用程序。这是个大问题。

现在让我们解决这个问题,如果我们创建一个布尔变量“islogin” 并在我们实际登录时使其为,在我们注销应用程序时使其为假。现在我们可以在应用程序的初始化过程中检查islogin值,如果islogin,我们将转到主屏幕,否则进入登录屏幕。我们可以将值存储在sharedPerferences中。

让我们现在就这样做:

add  shared_preferences: ^2.0.6  in pubspec yaml file.

第 7 步:创建一个新文件共享。 dart,并导入包库。

第八步:制作一个“Share”类,分别制作保存数据和读取数据的两个函数。

Dart

import 'package:shared_preferences/shared_preferences.dart';
  
class Shared {
  static String loginSharedPreference = "LOGGEDINKEY";
  
  // save data
  
  static Future 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);
  }
}

现在打开你的主。 dart文件,并进行以下更改。

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 {
  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(),
    );
  }
}

输出 :