test-login-with-google/lib/main.dart
2021-03-10 18:10:16 +07:00

227 lines
6.3 KiB
Dart

// Copyright 2019 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// ignore_for_file: public_member_api_docs
import 'dart:async';
import 'package:flutter_facebook_login/flutter_facebook_login.dart';
import 'package:flutter/material.dart';
import 'package:google_sign_in/google_sign_in.dart';
GoogleSignIn _googleSignIn = GoogleSignIn(
clientId: "1051330489903-on15f3rmq3a1830f2cb3d7ber0duueqh.apps.googleusercontent.com",
//clientId: "1051330489903-on15f3rmq3a1830f2cb3d7ber0duueqh.apps.googleusercontent.com"
);
void main() {
runApp(
MaterialApp(
title: 'Google Sign In',
home: SignInDemo(),
),
);
}
class SignInDemo extends StatefulWidget {
@override
State createState() => SignInDemoState();
}
class SignInDemoState extends State<SignInDemo> {
GoogleSignInAccount _currentUser;
String _contactText = '';
@override
void initState() {
super.initState();
_googleSignIn.onCurrentUserChanged.listen((GoogleSignInAccount account) {
setState(() {
_currentUser = account;
});
if (_currentUser != null) {
_handleGetContact(_currentUser);
}
});
_googleSignIn.signInSilently();
}
Future<void> _handleGetContact(GoogleSignInAccount user) async {
setState(() {
_contactText = "Loading contact info...";
});
// final http.Response response = await http.get(
// Uri.parse('https://people.googleapis.com/v1/people/me/connections'
// '?requestMask.includeField=person.names'),
// headers: await user.authHeaders,
// );
// if (response.statusCode != 200) {
// print("Success ------> 200");
// setState(() {
// _contactText = "People API gave a ${response.statusCode} "
// "response. Check logs for details.";
// });
// print('People API ${response.statusCode} response: ${response.body}');
// return;
// }
// final Map<String, dynamic> data = json.decode(response.body);
// print("data $data");
// final String namedContact = _pickFirstNamedContact(data);
// setState(() {
// if (namedContact != null) {
// _contactText = "I see you know $namedContact!";
// } else {
// _contactText = "No contacts to display.";
// }
// });
}
String _pickFirstNamedContact(Map<String, dynamic> data) {
final List<dynamic> connections = data['connections'];
final Map<String, dynamic> contact = connections?.firstWhere(
(dynamic contact) => contact['names'] != null,
orElse: () => null,
);
if (contact != null) {
final Map<String, dynamic> name = contact['names'].firstWhere(
(dynamic name) => name['displayName'] != null,
orElse: () => null,
);
if (name != null) {
return name['displayName'];
}
}
return null;
}
Future<void> _handleSignIn() async {
try {
await _googleSignIn.signIn().then((value){
print(value);
});
} catch (error) {
print(error);
}
}
Future<void> _handleSignOut() => _googleSignIn.disconnect();
Widget _buildBody() {
GoogleSignInAccount user = _currentUser;
if (user != null) {
return Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[
ListTile(
leading: GoogleUserCircleAvatar(
identity: user,
),
title: Text(user.displayName ?? ''),
subtitle: Text(user.email),
),
const Text("Signed in successfully."),
Text(_contactText),
ElevatedButton(
child: const Text('SIGN OUT'),
onPressed: _handleSignOut,
),
ElevatedButton(
child: const Text('REFRESH'),
onPressed: () => _handleGetContact(user),
),
],
);
} else {
return Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[
const Text("You are not currently signed in."),
ElevatedButton(
child: const Text('SIGN IN'),
onPressed: _handleSignIn,
),
],
);
}
}
//shower message for facebook
static final FacebookLogin facebookSignIn = new FacebookLogin();
String _message = 'Log in/out by pressing the buttons below.';
Future<Null> _login() async {
final FacebookLoginResult result =
await facebookSignIn.logIn(['email','public_profile']);
print(result.accessToken.token);
switch (result.status) {
case FacebookLoginStatus.loggedIn:
final FacebookAccessToken accessToken = result.accessToken;
_showMessages('''
Logged in!
Token: ${accessToken.token}
User id: ${accessToken.userId}
Expires: ${accessToken.expires}
Permissions: ${accessToken.permissions}
Declined permissions: ${accessToken.declinedPermissions}
''');
break;
case FacebookLoginStatus.cancelledByUser:
_showMessages('Login cancelled by the user.');
break;
case FacebookLoginStatus.error:
_showMessages('Something went wrong with the login process.\n'
'Here\'s the error Facebook gave us: ${result.errorMessage}');
break;
}
}
Future<Null> _logOut() async {
await facebookSignIn.logOut();
_showMessages('Logged out.');
}
void _showMessages(String message) {
setState(() {
_message = message;
});
}
void _showMessage(String message) {
setState(() {
_message = message;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Google Sign In'),
),
body: ConstrainedBox(
constraints: const BoxConstraints.expand(),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
_buildBody(),
Text(_message),
RaisedButton(
onPressed: _login,
child: Text('Log in'),
),
RaisedButton(
onPressed: _logOut,
child: new Text('Logout'),
),
],
),
));
}
}