Flutter简化登录流程插件flutter_login_simple的使用
Flutter简化登录流程插件flutter_login_simple的使用
flutter_login_simple
是一个用于简化基于电子邮件的 Firebase 身份验证登录流程的基本插件。它负责处理用户界面和后台的 Firebase 身份验证。如果用户已经登录,将会调用 success-login
回调函数。
安装
在你的 pubspec.yaml
文件中添加以下依赖项:
dependencies:
flutter_login_simple: ^版本号
然后运行 flutter pub get
来获取依赖项。
运行示例
示例目录包含一个完整的 Flutter 应用程序。在运行之前,请确保添加 Firebase 配置文件到 lib/firebase_options.dart
中。
确保在 Firebase 控制台中启用了电子邮件身份验证功能,这是常见的错误点。
基本用法
首先,初始化 Firebase 核心模块:
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:flutter_login_simple/main.dart';
import 'package:flutter_login_simple/usersessiondata.dart';
import 'package:flutter_login_simple_demo/firebase_options.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
runApp(const MyApp());
}
然后定义应用主体:
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return const MaterialApp(
debugShowCheckedModeBanner: false,
home: StartPage(),
);
}
}
接着,在 StartPage
类中配置登录界面:
class StartPage extends StatelessWidget {
const StartPage({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
// 登录成功后的回调函数
void onLoginSuccess(UserSessionData user) {
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(
builder: (BuildContext context) => LoginSuccessPage(user)),
ModalRoute.withName('/')
);
}
// 用于显示的Logo
Image logo = Image.network(
'https://storage.googleapis.com/cms-storage-bucket/c823e53b3a1a7b0d36a9.png',
);
// 显示的条款和条件
String htmlToc = '<h1>条款和条件</h1>';
// 显示的隐私政策
String htmlPrivacy = '<h1>隐私政策</h1>';
// 是否强制验证电子邮件
bool requireEmailVerification = true;
// 配置选项
var config = FlutterLoginConfiguration(
logo,
onLoginSuccess,
htmlToc,
htmlPrivacy,
requireEmailVerification,
);
return LoginStarter(config);
}
}
配置选项
FlutterLoginConfiguration
类的配置选项如下:
class FlutterLoginConfiguration {
Image logo;
Function onLoginSuccess;
String htmlToc;
String htmlPrivacy;
bool disableLogin;
bool disableSignUp;
bool disablePasswordReset;
FlutterLoginConfiguration(
this.logo, this.onLoginSuccess, this.htmlToc, this.htmlPrivacy,
{this.disableLogin = false,
this.disableSignUp = false,
this.disablePasswordReset = false});
}
访问返回的 UserSessionData
登录成功后,可以访问返回的 UserSessionData
对象:
void onLoginSuccess(UserSessionData user) {
print(user.uid);
print(user.email ?? '未提供');
print(user.displayName ?? '未提供');
print(user.emailVerified.toString());
print(user.isAnonymous.toString());
print(user.phoneNumber ?? '未提供');
print(user.photoURL ?? '未提供');
// 注销用户
user.logoutUser();
// 删除用户
bool isSuccess = user.deleteUser();
// 获取原始的 Firebase 用户对象
var firebaseUser = user.firebaseUser();
}
Bug 和请求
如果您遇到任何问题,请随时在 GitHub 上提交问题。Pull 请求也是受欢迎的。
许可证
该项目由 MIT 许可证授权。详细的许可证文件可以在 GitHub 上找到。
示例
完整的示例代码如下:
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:flutter_login_simple/main.dart';
import 'package:flutter_login_simple/usersessiondata.dart';
import 'package:flutter_login_simple_demo/firebase_options.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return const MaterialApp(
debugShowCheckedModeBanner: false,
home: StartPage(),
);
}
}
class StartPage extends StatelessWidget {
const StartPage({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
// 登录成功后的回调函数
void onLoginSuccess(UserSessionData user) {
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(
builder: (BuildContext context) => LoginSuccessPage(user)),
ModalRoute.withName('/')
);
}
// 用于显示的Logo
Image logo = Image.network(
'https://storage.googleapis.com/cms-storage-bucket/c823e53b3a1a7b0d36a9.png',
);
// 显示的条款和条件
String htmlToc = '<h1>条款和条件</h1>';
// 显示的隐私政策
String htmlPrivacy = '<h1>隐私政策</h1>';
// 是否强制验证电子邮件
bool requireEmailVerification = true;
// 配置选项
var config = FlutterLoginConfiguration(
logo,
onLoginSuccess,
htmlToc,
htmlPrivacy,
requireEmailVerification,
);
return LoginStarter(config);
}
}
/// 显示返回的数据
class LoginSuccessPage extends StatelessWidget {
final UserSessionData user;
const LoginSuccessPage(this.user, {super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
const Text('登录成功!'),
const SizedBox(height: 16),
//
// 显示用户数据
//
Text('uid - ${user.uid}'),
Text('email - ${user.email ?? '未提供'}'),
Text('displayName - ${user.displayName ?? '未提供'}'),
Text('emailVerified - ${user.emailVerified}'),
Text('isAnonymous - ${user.isAnonymous}'),
Text('phoneNumber - ${user.phoneNumber ?? '未提供'}'),
Text('photoURL - ${user.photoURL ?? '未提供'}'),
const SizedBox(height: 16),
//
// 注销用户和删除用户
//
ElevatedButton(
onPressed: () async {
await user.logoutUser();
// 忽略:使用同步方式
await _showDialog('用户已注销', context);
// 忽略:使用同步方式
_goHome(context);
},
child: const Text('注销')),
const SizedBox(height: 16),
ElevatedButton(
onPressed: () async {
if (await user.deleteUser()) {
// 忽略:使用同步方式
await _showDialog('用户已删除', context);
// 忽略:使用同步方式
_goHome(context);
}
},
child: const Text('删除')),
],
)));
}
// 辅助方法
Future<void> _showDialog(String title, BuildContext context) {
return showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(title: Text(title));
},
);
}
// 辅助方法
_goHome(BuildContext context) {
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(builder: (context) => const StartPage()),
// (Route<dynamic> route) => false
ModalRoute.withName('/'));
}
}
更多关于Flutter简化登录流程插件flutter_login_simple的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter简化登录流程插件flutter_login_simple的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用flutter_login_simple
插件来简化登录流程的示例代码。首先,确保你已经在pubspec.yaml
文件中添加了该插件的依赖:
dependencies:
flutter:
sdk: flutter
flutter_login_simple: ^x.y.z # 请将x.y.z替换为最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,你可以按照以下步骤在Flutter应用中实现登录功能:
- 导入必要的包
在你的Dart文件中(例如main.dart
),导入flutter_login_simple
包:
import 'package:flutter/material.dart';
import 'package:flutter_login_simple/flutter_login_simple.dart';
- 创建登录界面
使用FlutterLoginSimple
小部件来创建登录界面:
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Login Simple Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: LoginScreen(),
);
}
}
class LoginScreen extends StatefulWidget {
@override
_LoginScreenState createState() => _LoginScreenState();
}
class _LoginScreenState extends State<LoginScreen> {
final FlutterLoginSimple _flutterLoginSimple = FlutterLoginSimple(
// 配置你的登录参数
title: "登录",
subTitle: "请输入您的凭据",
loginButtonTitle: "登录",
registerButtonTitle: "注册",
forgotPasswordButtonTitle: "忘记密码?",
loginFields: [
LoginField(
name: "email",
hintText: "邮箱",
icon: Icons.email,
validator: (value) {
if (value.isEmpty || !value.contains("@")) {
return "请输入有效的邮箱地址";
}
return null;
},
),
LoginField(
name: "password",
hintText: "密码",
icon: Icons.lock,
obscureText: true,
validator: (value) {
if (value.isEmpty || value.length < 6) {
return "密码必须至少6个字符";
}
return null;
},
),
],
onLogin: (credentials) async {
// 在这里处理登录逻辑,例如发送请求到服务器
// credentials是一个包含所有登录字段的Map
print("登录凭据: ${credentials}");
// 假设登录成功,返回用户信息
FlutterLoginSimpleResult result = FlutterLoginSimpleResult(
success: true,
message: "登录成功",
user: {
"email": credentials["email"],
"token": "dummy_token_12345", // 示例token
},
);
return result;
},
onRegister: (credentials) async {
// 在这里处理注册逻辑
print("注册凭据: ${credentials}");
// 假设注册成功,返回用户信息
FlutterLoginSimpleResult result = FlutterLoginSimpleResult(
success: true,
message: "注册成功",
user: {
"email": credentials["email"],
"token": "dummy_token_54321", // 示例token
},
);
return result;
},
onForgotPassword: (email) async {
// 在这里处理忘记密码逻辑
print("忘记密码请求: $email");
// 假设请求成功
FlutterLoginSimpleResult result = FlutterLoginSimpleResult(
success: true,
message: "密码重置请求已发送",
);
return result;
},
);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("登录示例"),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: _flutterLoginSimple.build(),
),
);
}
}
在这个示例中,我们创建了一个简单的登录界面,包括邮箱和密码字段,以及登录、注册和忘记密码按钮。我们定义了验证规则来确保用户输入有效的邮箱和密码。当用户点击登录或注册按钮时,onLogin
或onRegister
回调函数将被调用,你可以在这里实现你的登录或注册逻辑。
请注意,这个示例中的登录和注册逻辑是模拟的,并没有实际与服务器进行交互。在实际应用中,你需要将这些回调替换为与你的后端服务进行通信的代码。