Flutter谷歌登录简化插件lazy_sign_in_google的使用
Flutter谷歌登录简化插件lazy_sign_in_google的使用
google_sign_in 封装在 lazy_sign_in 接口中。
功能特性
类名 | 文件 | 描述 |
---|---|---|
[lazy.SignInGoogle] | lazy_sign_in_google.dart | 支持在网页或应用中进行Google登录。这是对package:google_sign_in 的封装 |
安装
flutter pub add lazy_sign_in_google
使用方法
网页/应用
对于网页,提供Google OAuth Web Application客户端ID。
对于独立应用,提供Google OAuth Chrome Application客户端ID。
import 'package:lazy_sign_in_google/lazy_sign_in_google.dart' as lazy;
const String clientId = '你的Google Chrome/Web应用客户端ID';
final lazy.SignInBase globalLazySignIn = lazy.SignInGoogle(clientId: clientId);
统一接口/API
Widget buttonSignIn = TextButton(
onPressed: () => globalLazySignIn.signIn(),
child: const Text('Sign-In'),
);
Widget buttonSignOut = TextButton(
onPressed: () => globalLazySignIn.signOut(),
child: const Text('Sign-Out'),
);
Chrome/Firefox扩展
示例
示例文件夹
完整仓库
https://github.com/J-Siu/flutter_lazy/example/lazy_sign_in_example/
你将需要根据实际情况提供自己的clientId
。
示例代码
import 'package:flutter/material.dart';
// 这里只是一个占位符
import 'package:lazy_sign_in/lazy_sign_in.dart' as lazy;
final lazy.SignIn globalLazySignIn = lazy.SignInDummy(clientId: clientId);
// // 解除注释以使用Chrome/Firefox扩展
// import 'package:lazy_sign_in_extension/lazy_sign_in_extension.dart' as lazy;
// final lazy.SignIn globalLazySignIn = lazy.SignInExt(clientId: clientId);
// // 解除注释以用于Web/应用
// import 'package:lazy_sign_in_google/lazy_sign_in_google.dart' as lazy;
// final lazy.SignIn globalLazySignIn = lazy.SignInGoogle(clientId: clientId);
/// - Chrome扩展
/// - 使用Google OAuth **Chrome Application**客户端ID。
/// - 更新OAuth凭证应用程序ID与扩展ID
/// - Firefox扩展
/// - 使用Google OAuth **Web Application**客户端ID。
/// - 更新OAuth凭证授权重定向URI
/// 可通过[redirectUrl]获得
/// - Web
/// - 使用Google OAuth **Web Application**客户端ID。
/// - 更新OAuth凭证授权JavaScript源
/// - 独立应用
/// - 使用Google OAuth **Chrome Application**客户端ID。
/// - 更新OAuth凭证应用程序ID
const String clientId = '你的Google OAuth客户端ID';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
final String title = 'LazySignIn 示例';
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: title,
home: MyHomePage(title: title),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
String _photoUrl = '';
[@override](/user/override)
void initState() {
super.initState();
globalLazySignIn.isSignedIn.addListener(() => _signInHandler());
}
[@override](/user/override)
void dispose() {
globalLazySignIn.isSignedIn.removeListener(() => _signInHandler());
super.dispose();
}
[@override](/user/override)
Widget build(BuildContext context) {
Widget avatar() {
if (_photoUrl.isNotEmpty) {
return SizedBox(
height: 60,
width: 60,
child: Image.network(_photoUrl),
);
} else {
return const SizedBox();
}
}
Widget buttonSignIn = TextButton(
onPressed: () => globalLazySignIn.signIn(),
child: const Text('Sign-In'),
);
Widget buttonSignOut = TextButton(
onPressed: () => globalLazySignIn.signOut(),
child: const Text('Sign-Out'),
);
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
buttonSignIn,
buttonSignOut,
avatar(),
],
),
),
);
}
// 当令牌发生变化时触发此方法
_signInHandler() {
setState(() {
_photoUrl = globalLazySignIn.photoUrl;
});
}
}
更多关于Flutter谷歌登录简化插件lazy_sign_in_google的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter谷歌登录简化插件lazy_sign_in_google的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用lazy_sign_in_google
插件来实现谷歌登录的一个简化示例。
首先,确保你已经在pubspec.yaml
文件中添加了lazy_sign_in_google
依赖:
dependencies:
flutter:
sdk: flutter
lazy_sign_in_google: ^最新版本号 # 请替换为当前最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,按照以下步骤配置和实现谷歌登录功能:
1. 配置Google Sign-In
在Google Cloud Console中创建一个新的项目,并启用Google Sign-In API。然后,创建一个OAuth 2.0客户端ID,选择“Web应用”类型(Flutter应用实际上会使用这个配置)。记录下生成的CLIENT_ID
。
2. 在android/app/src/main/AndroidManifest.xml
中添加必要的权限和配置
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.yourapp">
<!-- 添加Internet权限 -->
<uses-permission android:name="android.permission.INTERNET"/>
<application
... >
<!-- 添加Google Sign-In配置 -->
<meta-data
android:name="com.google.android.gms.client.application_id"
android:value="@string/default_web_client_id"/>
<!-- 其他配置 -->
</application>
</manifest>
在android/app/src/main/res/values/strings.xml
中添加:
<resources>
<string name="default_web_client_id">你的CLIENT_ID</string>
</resources>
3. 在ios/Runner/Info.plist
中添加URL Scheme
添加以下内容,替换REVERSED_CLIENT_ID
为你的CLIENT_ID的反向域名部分(例如,如果你的CLIENT_ID是1234567890-abcdefghijklmnopqrstuvwxyz.apps.googleusercontent.com
,那么REVERSED_CLIENT_ID
就是com.googleusercontent.apps.1234567890-abcdefghijklmnopqrstuvwxyz
):
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>你的REVERSED_CLIENT_ID</string>
</array>
</dict>
</array>
<key>GoogleService-Info.plist</key>
<dict>
<key>CONFIGURED</key>
<true/>
</dict>
并确保你已经将下载的GoogleService-Info.plist
文件添加到ios/Runner
目录中。
4. 实现谷歌登录功能
在你的Flutter代码中,你可以这样使用lazy_sign_in_google
插件:
import 'package:flutter/material.dart';
import 'package:lazy_sign_in_google/lazy_sign_in_google.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: GoogleSignInPage(),
);
}
}
class GoogleSignInPage extends StatefulWidget {
@override
_GoogleSignInPageState createState() => _GoogleSignInPageState();
}
class _GoogleSignInPageState extends State<GoogleSignInPage> {
final LazySignInGoogle _lazySignInGoogle = LazySignInGoogle();
bool isSignedIn = false;
String? userEmail;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Google Sign In Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
if (!isSignedIn)
ElevatedButton(
onPressed: () async {
try {
final result = await _lazySignInGoogle.signIn();
if (result != null) {
setState(() {
isSignedIn = true;
userEmail = result.email;
});
}
} catch (e) {
print('Error signing in: $e');
}
},
child: Text('Sign In with Google'),
),
if (isSignedIn)
Text('Signed in as: $userEmail'),
],
),
),
);
}
}
在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个按钮用于触发谷歌登录流程。一旦用户成功登录,应用会显示用户的电子邮件地址。
请注意,这只是一个基础示例,实际项目中可能需要处理更多的错误情况、用户数据的管理、UI的定制等。