LoginSignup
2
1

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-05-16

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

参考

pubspec.yaml

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

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つのボタンを配置してるだけ。

```dart
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