Flutter认证界面插件flutter_auth_ui的使用
Flutter认证界面插件flutter_auth_ui的使用
flutter_auth_ui
是一个非官方的 FirebaseUI 包,旨在为 Flutter 提供对 Android、iOS 和 Web 的支持。它允许用户通过电子邮件、电话号码、Google 账户等进行登录。
开始使用
该插件是基于 Android/iOS/Web 原生插件封装的。在使用之前,请确保已经按照文档设置了您的 Firebase 项目:
- iOS: FirebaseUI for iOS
- Android: FirebaseUI for Android
- Web: FirebaseUI for Web
使用方法
下面是一个完整的示例代码,展示了如何使用 flutter_auth_ui
插件来创建一个包含多种登录方式的应用程序:
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:flutter_auth_ui/flutter_auth_ui.dart';
import 'firebase_options.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData.light().copyWith(
materialTapTargetSize: MaterialTapTargetSize.padded,
),
home: const MyPage(),
);
}
}
class MyPage extends StatelessWidget {
const MyPage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: Center(
child: Column(
children: [
FilledButton(
onPressed: () async {
final messenger = ScaffoldMessenger.of(context);
final providers = [
AuthUiProvider.anonymous,
AuthUiProvider.email,
AuthUiProvider.phone,
AuthUiProvider.apple,
AuthUiProvider.github,
AuthUiProvider.google,
AuthUiProvider.microsoft,
AuthUiProvider.yahoo,
];
final result = await FlutterAuthUi.startUi(
items: providers,
tosAndPrivacyPolicy: const TosAndPrivacyPolicy(
tosUrl: "https://www.google.com",
privacyPolicyUrl: "https://www.google.com",
),
androidOption: const AndroidOption(
enableSmartLock: false, // default true
showLogo: true, // default false
overrideTheme: true, // default false
),
emailAuthOption: const EmailAuthOption(
requireDisplayName: true, // default true
enableMailLink: false, // default false
handleURL: '',
androidPackageName: '',
androidMinimumVersion: '',
),
);
messenger.showSnackBar(
SnackBar(
content: Text(
result ? 'Success sign-in' : 'Failed sign-in',
),
),
);
},
child: const Text('Sign in'),
),
FilledButton.tonal(
onPressed: () async {
final messenger = ScaffoldMessenger.of(context);
await FlutterAuthUi.signOut();
messenger.showSnackBar(
const SnackBar(
content: Text('Success sign-out'),
),
);
},
child: const Text('Sign out'),
),
OutlinedButton(
onPressed: () async {
final user = FirebaseAuth.instance.currentUser;
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
user == null
? 'No user is signed in'
: '${user.uid} is signed in',
),
),
);
},
child: const Text('Check sign-in status'),
),
],
),
),
);
}
}
需求
- Flutter 3.13.0 或更高版本
- firebase_auth 5.0.0 或更高版本
Android 特定需求
- minSdkVersion 21
- compileSdkVersion 34
iOS 特定需求
- iOS 13 或更高版本
相关链接
小贴士
EmailLink
为了实现 EmailLink 登录,您需要提前准备;请先查阅 Firebase 文档。
Android
要处理动态链接,在 onCreate
和 onNewIntent
方法中添加 FlutterAuthUiPlugin.catchEmailLink
(如果您不使用 EmailLink,则不需要添加)。
import android.content.Intent;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.dr1009.app.flutter_auth_ui.FlutterAuthUiPlugin;
import io.flutter.embedding.android.FlutterActivity;
public class MainActivity extends FlutterActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 检查 intent
FlutterAuthUiPlugin.catchEmailLink(this, getIntent());
}
@Override
protected void onNewIntent(@NonNull Intent intent) {
super.onNewIntent(intent);
// 检查 intent
FlutterAuthUiPlugin.catchEmailLink(this, intent);
}
}
国际化
Android
无需特殊设置即可支持。
iOS
请参考 更新 iOS 应用包。
Web
请参考 安装选项 1:CDN - 国际化小部件。
更改 Android 上的 AppBar 标题
将字符串值作为 app_name
或 fui_default_toolbar_title
添加到应用程序的 strings.xml
文件中。行为取决于 FirebaseUI-Android。
显示 Logo (Android)
- 将您的 Logo 资源文件添加到
android/app/src/main/res/drawable/flutter_auth_ui_logo.xml
或android/app/src/main/res/drawable-{m~xxxhdpi}/flutter_auth_ui_logo.png
- 启用
AndroidOption.showLogo
更改 AppBar 和链接颜色 (Android)
- 在
android/app/src/main/res/values/style.xml
中添加flutter_auth_ui_style
样式。 - 启用
AndroidOption.overrideTheme
希望这些信息能帮助您更好地理解和使用 flutter_auth_ui
插件!如果有任何问题或需要进一步的帮助,请随时提问。
更多关于Flutter认证界面插件flutter_auth_ui的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter认证界面插件flutter_auth_ui的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何使用 flutter_auth_ui
插件来创建认证界面的示例代码。这个插件可以简化实现登录和注册界面的过程。以下是一个基本的实现示例,展示如何使用 flutter_auth_ui
来实现用户认证界面。
首先,确保你已经在 pubspec.yaml
文件中添加了 flutter_auth_ui
依赖:
dependencies:
flutter:
sdk: flutter
flutter_auth_ui: ^latest_version # 请替换为最新版本号
然后运行 flutter pub get
来安装依赖。
接下来,你可以在你的 Flutter 应用中使用 flutter_auth_ui
来创建认证界面。以下是一个简单的示例:
import 'package:flutter/material.dart';
import 'package:flutter_auth_ui/flutter_auth_ui.dart';
import 'package:firebase_auth/firebase_auth.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Auth UI Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: AuthScreen(),
);
}
}
class AuthScreen extends StatelessWidget {
final FirebaseAuth _auth = FirebaseAuth.instance;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Authentication'),
),
body: AuthUI(
// 配置 Firebase 认证服务
firebaseAuth: _auth,
// 配置 UI
signInOptions: [
EmailSignInOption(),
PhoneSignInOption(
// 配置电话认证选项
phoneNumberVerifierBuilderFactory: () => PhoneAuthProvider.verifierBuilderFactory,
),
// 你可以添加更多认证选项,如 GoogleSignInOption(), AppleSignInOption() 等
],
// 配置主题
theme: AuthThemeData(
// 自定义主题
backgroundColor: Colors.white,
primaryColor: Colors.blue,
textStyle: TextStyle(fontSize: 18),
),
// 自定义动作按钮
actions: [
AuthActionWidget(
icon: Icons.password,
title: 'Forgot Password?',
onPressed: () {
// 处理忘记密码逻辑
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('Forgot password functionality not implemented')));
},
),
],
// 自定义完成后路由
onAuthenticated: (credential) {
// 用户认证成功后的逻辑
return MaterialPageRoute(builder: (context) => HomeScreen());
},
),
);
}
}
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Home Screen'),
),
body: Center(
child: Text('Welcome to the Home Screen!'),
),
);
}
}
说明:
- 依赖配置:确保在
pubspec.yaml
中添加了flutter_auth_ui
和firebase_auth
依赖。 - Firebase Auth 实例:在
AuthScreen
中创建了一个FirebaseAuth
实例。 - AuthUI 配置:
signInOptions
:配置支持的登录选项,这里示例中使用了 Email 和 Phone 认证。theme
:自定义认证界面的主题。actions
:添加自定义动作按钮,例如“忘记密码”。onAuthenticated
:用户认证成功后的回调,这里示例中导航到HomeScreen
。
- 导航到首页:认证成功后,导航到一个简单的
HomeScreen
。
请确保你已经正确配置了 Firebase 项目,并在你的应用中初始化了 Firebase。这个示例代码提供了一个基本的认证界面实现,你可以根据需要进行进一步的自定义和扩展。