Flutterでgoogleにログインする

毎日Flutter。
今日はFirebaseで認証をします。

Pubはこれ(firebase_auth)ですね。

google_sign_inを追加する

まずはgoogle_sign_inを追加します。
pubspec.yamlに下記追記して、flutter packages get

dependencies:
  flutter:
    sdk: flutter
  image_picker:
  google_sign_in: ^4.0.1+1 # new!
  firebase_storage:

main.dartimportを追記します。

import 'package:google_sign_in/google_sign_in.dart';

firebase_authを追加する

build.gradleclasspathを追記するのは前回やったので省略。
pubspec.yamlmain.dartにそれぞれ下記追記します。pubspec変更後はflutter packages get

dependencies:
  flutter:
    sdk: flutter
  image_picker:
  google_sign_in: ^4.0.1+1
  firebase_auth: # new!
  firebase_storage:
import 'package:firebase_auth/firebase_auth.dart';

ログイン画面の追加

main.dartに下記を追記し、MyAppクラスからMyGoogleLoginPage()を呼び出すように変更します。

class MyGoogleLoginPage extends StatefulWidget {
  @override
  _MyGoogleLoginPageState createState() => _MyGoogleLoginPageState();
}

class _MyGoogleLoginPageState extends State<MyGoogleLoginPage>{
  final GoogleSignIn _googleSignIn = GoogleSignIn();
  final FirebaseAuth _auth = FirebaseAuth.instance;

  Future<FirebaseUser> _handleSignIn() async {
    final GoogleSignInAccount googleUser = await _googleSignIn.signIn();
    final GoogleSignInAuthentication googleAuth = await googleUser.authentication;

    final AuthCredential credential = GoogleAuthProvider.getCredential(
      accessToken: googleAuth.accessToken,
      idToken: googleAuth.idToken,
    );

    final FirebaseUser user = await _auth.signInWithCredential(credential);
    print("signed in " + user.displayName);
    return user;
  }

  @override
  Widget build(BuildContext context){
    return Scaffold(
      appBar: AppBar(
        title: Text('none'),
      ),
      body: Center(
        child: Column(
          children: <Widget>[
            SizedBox(height: 24.0),
            FlatButton(
              child: Text('SignIn'),
              onPressed: () => _handleSignIn()
                .then((FirebaseUser user) => print(user))
                .catchError((e) => print(e))
            ),
          ],
        ),
      ),
    );
  }
}

googleにログインができるようになりました!