2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Flutter+FirebaseでGoogleアカウントでログイン

2
Last updated at Posted at 2021-05-16

情報は色々あるけど、すんなり動かなかったのでメモ

参考

pubspec.yaml

バージョンは最終的に以下のような感じで、ログインだけならcoreとcloud_firestoreはいらないはず。


dependencies:
  flutter:
    sdk: flutter
  firebase_auth: ^0.14.0+5
  google_sign_in: ^4.0.14
  firebase_core: ^0.4.0+9
  cloud_firestore: ^0.12.9+5

main.dart

1画面にログインボタンとログアウトボタンとカレントユーザをコンソールにプリントする3つのボタンを配置してるだけ。

import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:google_sign_in/google_sign_in.dart';
import 'dart:developer';

Future<void> main() async {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      // アプリ名
      title: 'LoginDemo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: LoginPage(),
    );
  }
}

// ログイン画面用Widget
class LoginPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              child: Text('ログイン'),
              onPressed: () => {signInWithGoogle()},
            ),
            ElevatedButton(
              child: Text('ログアウト'),
              onPressed: () => {signOut()},
            ),
            ElevatedButton(
              child: Text('カレントユーザー'),
              onPressed: () => {currentUser()},
            ),
          ],
        ),
      ),
    );
  }

  // ログイン処理
  Future<void> signInWithGoogle() async {
    FirebaseUser user = await FirebaseAuth.instance.currentUser();
    if (user != null) return user;

    debugPrint("signInWithGoogle");
    final GoogleSignInAccount googleUser = await GoogleSignIn().signIn();
    final GoogleSignInAuthentication googleAuth =
        await googleUser.authentication;

    // Create a new credential
    final AuthCredential credential = GoogleAuthProvider.getCredential(
      accessToken: googleAuth.accessToken,
      idToken: googleAuth.idToken,
    );
    //ログイン
    return await FirebaseAuth.instance.signInWithCredential(credential);

  }

  // ログアウト
  Future<void> signOut() async {
    debugPrint("signOut");
    await FirebaseAuth.instance.signOut();
  }
  // カレントユーザー
  Future<void> currentUser() async {
    debugPrint("currentUser");
    FirebaseUser user = await FirebaseAuth.instance.currentUser();
    inspect(user);
  }
} //class


こんな感じ。1回認証すればとりあえずはcurrentUserが取れる。
アプリ全体としてデータの保存などにログイン必須なら、アプリの頭で判定する所を用意すれば良いか。
バックアップに使う程度なら...その時だけログインすればいいね。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?