Flutter Firebase UI集成插件firebase_ui的使用
Firebase UI 在 Flutter 中的使用
Firebase UI 概述
firebase_ui
是一个帮助快速实现 Firebase 认证的库。它提供了常见的身份提供商(如 Facebook、Google、Twitter 和电子邮件)的用户界面。
注意:此插件使用 firebase_auth
,您必须按照 这里 的说明进行配置。
您可以查看 firebase_ui 示例。
使用步骤
1. 添加依赖
在 pubspec.yaml
文件中添加以下依赖:
dependencies:
firebase_auth: ^3.3.0
firebase_ui: ^0.1.0
运行 flutter pub get
来安装依赖。
2. 配置 Firebase
确保您已经在 Firebase 控制台中正确配置了您的项目,并添加了 Android 和 iOS 平台。具体步骤可以参考官方文档 这里。
3. 创建示例应用
以下是一个完整的示例代码,展示如何使用 firebase_ui
实现登录和注销功能。
示例代码
import 'dart:async';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:firebase_ui/flutter_firebase_ui.dart';
import 'package:firebase_ui/l10n/localization.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Firebase UI Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
FFULocalizations.delegate, // Firebase UI 提供的本地化支持
],
supportedLocales: [
const Locale('fr', 'FR'),
const Locale('en', 'US'),
const Locale('de', 'DE'),
const Locale('pt', 'BR'),
const Locale('es', 'MX'),
],
home: MyHomePage(title: 'Flutter Firebase UI Demo'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
[@override](/user/override)
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final FirebaseAuth _auth = FirebaseAuth.instance;
StreamSubscription<FirebaseUser> _listener;
FirebaseUser _currentUser;
[@override](/user/override)
void initState() {
super.initState();
_checkCurrentUser();
}
[@override](/user/override)
void dispose() {
_listener.cancel();
super.dispose();
}
[@override](/user/override)
Widget build(BuildContext context) {
if (_currentUser == null) {
return SignInScreen(
title: "Demo",
header: Padding(
padding: const EdgeInsets.symmetric(vertical: 16.0),
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Text("Demo"),
),
),
showBar: true,
horizontalPadding: 12,
bottomPadding: 5,
avoidBottomInset: true,
color: Color(0xFF363636),
providers: [
ProvidersTypes.google,
ProvidersTypes.facebook,
ProvidersTypes.twitter,
ProvidersTypes.email
],
twitterConsumerKey: "",
twitterConsumerSecret: "",
);
} else {
return HomeScreen(user: _currentUser);
}
}
void _checkCurrentUser() async {
_currentUser = await _auth.currentUser();
_currentUser?.getIdToken(refresh: true);
_listener = _auth.onAuthStateChanged.listen((FirebaseUser user) {
setState(() {
_currentUser = user;
});
});
}
}
class HomeScreen extends StatelessWidget {
final FirebaseUser user;
HomeScreen({this.user});
[@override](/user/override)
Widget build(BuildContext context) => Scaffold(
appBar: AppBar(
title: Text("Bienvenue"),
elevation: 4.0,
),
body: Container(
padding: const EdgeInsets.all(16.0),
decoration: BoxDecoration(color: Colors.amber),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text("Welcome,"),
],
),
SizedBox(height: 8.0),
Text(user.displayName ?? user.email),
SizedBox(height: 32.0),
RaisedButton(
child: Text("Déconnexion"),
onPressed: _logout,
)
],
),
),
);
void _logout() {
signOutProviders(); // 调用 Firebase UI 提供的登出方法
}
}
更多关于Flutter Firebase UI集成插件firebase_ui的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter Firebase UI集成插件firebase_ui的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
firebase_ui
是一个 Flutter 插件,旨在简化与 Firebase 的集成,特别是与 Firebase Authentication 和 Firestore 的集成。它提供了一组预构建的 UI 组件,可以帮助你快速实现用户认证、数据展示等功能。
以下是如何使用 firebase_ui
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 firebase_ui
和 firebase_core
依赖:
dependencies:
flutter:
sdk: flutter
firebase_core: latest_version
firebase_ui_auth: latest_version
firebase_ui_firestore: latest_version
然后运行 flutter pub get
来安装依赖。
2. 初始化 Firebase
在你的 main.dart
文件中初始化 Firebase:
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Firebase UI Example',
home: HomeScreen(),
);
}
}
3. 使用 Firebase UI 进行用户认证
firebase_ui_auth
提供了预构建的登录和注册界面。你可以使用 SignInScreen
和 RegisterScreen
来快速实现用户认证。
import 'package:firebase_ui_auth/firebase_ui_auth.dart';
import 'package:flutter/material.dart';
class HomeScreen extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Firebase UI Example'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => SignInScreen(
providers: [EmailAuthProvider()],
actions: [
AuthStateChangeAction<SignedIn>((context, state) {
Navigator.pushReplacementNamed(context, '/profile');
}),
],
),
),
);
},
child: Text('Sign In'),
),
),
);
}
}
4. 使用 Firebase UI 展示 Firestore 数据
firebase_ui_firestore
提供了 FirestoreListView
和 FirestoreGridView
等组件,用于展示 Firestore 数据。
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_ui_firestore/firebase_ui_firestore.dart';
import 'package:flutter/material.dart';
class ProfileScreen extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Profile'),
),
body: FirestoreListView<Map<String, dynamic>>(
query: FirebaseFirestore.instance.collection('users'),
itemBuilder: (context, snapshot) {
final user = snapshot.data();
return ListTile(
title: Text(user['name']),
subtitle: Text(user['email']),
);
},
),
);
}
}
5. 处理认证状态
你可以使用 AuthStateListener
来监听用户的认证状态,并根据状态跳转到不同的页面。
import 'package:firebase_ui_auth/firebase_ui_auth.dart';
import 'package:flutter/material.dart';
class AuthWrapper extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return AuthStateListener(
listener: (oldState, newState, context) {
if (newState is SignedIn) {
Navigator.pushReplacementNamed(context, '/profile');
} else if (newState is SignedOut) {
Navigator.pushReplacementNamed(context, '/signin');
}
},
child: HomeScreen(),
);
}
}
6. 配置路由
最后,你可以在 MaterialApp
中配置路由,以便在不同的认证状态之间切换。
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Firebase UI Example',
initialRoute: '/',
routes: {
'/': (context) => AuthWrapper(),
'/signin': (context) => SignInScreen(
providers: [EmailAuthProvider()],
),
'/profile': (context) => ProfileScreen(),
},
);
}
}