[google_sign_in] Adopt code excerpts in README (#5521)

Improves README example and updates it to use code excerpts.

Part of [flutter/flutter#102679](https://github.com/flutter/flutter/issues/102679)
This commit is contained in:
Michael McGuiness
2023-12-13 11:07:53 -08:00
committed by GitHub
parent a0fadd00c2
commit 12b3d59d18
5 changed files with 35 additions and 17 deletions

View File

@ -1,3 +1,7 @@
## 6.2.1
* Improves README example and updates it to use code excerpts.
## 6.2.0
* Adds support for macOS.

View File

@ -68,20 +68,19 @@ To use this plugin, follow the
### Use the plugin
Add the following import to your Dart code:
```dart
import 'package:google_sign_in/google_sign_in.dart';
```
Initialize `GoogleSignIn` with the scopes you want:
<?code-excerpt "example/lib/main.dart (Initialize)"?>
```dart
GoogleSignIn _googleSignIn = GoogleSignIn(
scopes: [
const List<String> scopes = <String>[
'email',
'https://www.googleapis.com/auth/contacts.readonly',
],
];
GoogleSignIn _googleSignIn = GoogleSignIn(
// Optional clientId
// clientId: 'your-client_id.apps.googleusercontent.com',
scopes: scopes,
);
```
@ -89,6 +88,7 @@ GoogleSignIn _googleSignIn = GoogleSignIn(
You can now use the `GoogleSignIn` class to authenticate in your Dart code, e.g.
<?code-excerpt "example/lib/main.dart (SignIn)"?>
```dart
Future<void> _handleSignIn() async {
try {
@ -122,8 +122,14 @@ Applications must be able to:
There's a new method that enables the checks above, `canAccessScopes`:
<?code-excerpt "example/lib/main.dart (CanAccessScopes)"?>
```dart
final bool isAuthorized = await _googleSignIn.canAccessScopes(scopes);
// In mobile, being authenticated means being authorized...
bool isAuthorized = account != null;
// However, on web...
if (kIsWeb && account != null) {
isAuthorized = await _googleSignIn.canAccessScopes(scopes);
}
```
_(Only implemented in the web platform, from version 6.1.0 of this package)_
@ -134,14 +140,13 @@ If an app determines that the user hasn't granted the scopes it requires, it
should initiate an Authorization request. (Remember that in the web platform,
this request **must be initiated from an user interaction**, like a button press).
<?code-excerpt "example/lib/main.dart (RequestScopes)" plaster="none"?>
```dart
Future<void> _handleAuthorizeScopes() async {
final bool isAuthorized = await _googleSignIn.requestScopes(scopes);
if (isAuthorized) {
// Do things that only authorized users can do!
_handleGetContact(_currentUser!);
unawaited(_handleGetContact(_currentUser!));
}
}
```
The `requestScopes` returns a `boolean` value that is `true` if the user has

View File

@ -15,6 +15,7 @@ import 'package:http/http.dart' as http;
import 'src/sign_in_button.dart';
/// The scopes required by this application.
// #docregion Initialize
const List<String> scopes = <String>[
'email',
'https://www.googleapis.com/auth/contacts.readonly',
@ -25,6 +26,7 @@ GoogleSignIn _googleSignIn = GoogleSignIn(
// clientId: 'your-client_id.apps.googleusercontent.com',
scopes: scopes,
);
// #enddocregion Initialize
void main() {
runApp(
@ -55,12 +57,14 @@ class _SignInDemoState extends State<SignInDemo> {
_googleSignIn.onCurrentUserChanged
.listen((GoogleSignInAccount? account) async {
// #docregion CanAccessScopes
// In mobile, being authenticated means being authorized...
bool isAuthorized = account != null;
// However, in the web...
// However, on web...
if (kIsWeb && account != null) {
isAuthorized = await _googleSignIn.canAccessScopes(scopes);
}
// #enddocregion CanAccessScopes
setState(() {
_currentUser = account;
@ -136,6 +140,7 @@ class _SignInDemoState extends State<SignInDemo> {
//
// On the web, the on-click handler of the Sign In button is owned by the JS
// SDK, so this method can be considered mobile only.
// #docregion SignIn
Future<void> _handleSignIn() async {
try {
await _googleSignIn.signIn();
@ -143,6 +148,7 @@ class _SignInDemoState extends State<SignInDemo> {
print(error);
}
}
// #enddocregion SignIn
// Prompts the user to authorize `scopes`.
//
@ -150,14 +156,18 @@ class _SignInDemoState extends State<SignInDemo> {
// and Authorization at the same time (like the web).
//
// On the web, this must be called from an user interaction (button click).
// #docregion RequestScopes
Future<void> _handleAuthorizeScopes() async {
final bool isAuthorized = await _googleSignIn.requestScopes(scopes);
// #enddocregion RequestScopes
setState(() {
_isAuthorized = isAuthorized;
});
// #docregion RequestScopes
if (isAuthorized) {
unawaited(_handleGetContact(_currentUser!));
}
// #enddocregion RequestScopes
}
Future<void> _handleSignOut() => _googleSignIn.disconnect();

View File

@ -3,7 +3,7 @@ description: Flutter plugin for Google Sign-In, a secure authentication system
for signing in with a Google account.
repository: https://github.com/flutter/packages/tree/main/packages/google_sign_in/google_sign_in
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+google_sign_in%22
version: 6.2.0
version: 6.2.1
environment:
sdk: ">=3.2.0 <4.0.0"

View File

@ -8,7 +8,6 @@
- espresso
- extension_google_sign_in_as_googleapis_auth
- go_router_builder
- google_sign_in/google_sign_in
- image_picker_for_web
- in_app_purchase/in_app_purchase
- ios_platform_images