[Day22] Flutter - Infrastructure Authentication (part6)

前言

Hi, 我是鱼板伯爵今天要把登入的Repository写好备用,教学内容只会撷取片段程序码,建议大家搭配完整程序码来练习。

完整程序码

安装

google_sign_in: ^5.0.5
firebase_auth: ^3.0.1
firebase_core: ^1.4.0

Google 登入

在登入时会有三个功能,第一个是按按钮的时候触发的google登入和第二个登出,第三个则是在开启app时检查有没有登入过,有的话就可以跳过登入画面,如果还不知道Google登入怎麽设定的可以到Day16 - Google登入教学

abstract class AuthRepositoryImpl {
  Future<bool> signInWithGoogle();
  Future<void> signOut();
  Future<bool> isSignedIn();
}

class AuthRepository implements AuthRepositoryImpl {
  final FirebaseAuth _firebaseAuth;
  final GoogleSignIn _googleSignIn;

  AuthRepository()
      : _firebaseAuth = FirebaseAuth.instance,
        _googleSignIn = GoogleSignIn();

  @override
  Future<bool> signInWithGoogle() async {
    final GoogleSignInAccount? googleUser = await _googleSignIn.signIn();
    if (googleUser == null) {
      return false;
    }
    final GoogleSignInAuthentication googleAuth =
        await googleUser.authentication;
    final AuthCredential credential = GoogleAuthProvider.credential(
      accessToken: googleAuth.accessToken,
      idToken: googleAuth.idToken,
    );
    await _firebaseAuth.signInWithCredential(credential);

    return true;
  }

  @override
  Future<void> signOut() async {
    Future.wait([
      _firebaseAuth.signOut(),
      _googleSignIn.signOut(),
    ]);
  }

  @override
  Future<bool> isSignedIn() async {
    try {
      final User? currentUser = _firebaseAuth.currentUser;
      if (currentUser != null) {
        return true;
      } else {
        return false;
      }
    } catch (_) {
      return false;
    }
  }
}


<<:  DAY07 - API架构分享

>>:  [第七只羊] 迷雾森林舞会前夕 建立使用者关联

买菸赔菸 - 零股买卖

import shioaji as sj api = sj.Shioaji() accounts =...

Day_13 : 让 Vite 来开启你的Vue 之 Option API 与 Mixins

Hi Dai Gei Ho~ 我是Winnie~ 在昨天的文章中,我们有简单的提到 Composit...

[Day24] Rocket Web 框架 (Part 1)

今天要讲的是 Rocket 那我先简述一下什麽是 Rocket Rocket 是一个致力於实现 快速...

【Side Project】 (老板)订单清单UX功能实作

我们接续上一篇完成一些未完成的功能。 完成按钮 & 返回按钮 这两个按钮在整个篇章中,属於比...

来了解hyperviser

Hyperviser源起 (虚拟机, Virtual Machine),好像是这几十年才听到的新名词...