Flutter中firebase_ui_auth的RegisterScreen无法触发AuthStateChangeAction事件
Firebase UI Auth RegisterScreen中AuthStateChangeAction无法触发的问题
问题说明
使用firebase_ui_auth的RegisterScreen完成用户注册时,配置的AuthStateChangeAction<SignedIn>事件始终无法触发,但原生FirebaseAuth.instance.authStateChanges()监听可以正常捕获状态变化;同时在SignInScreen登录场景下,AuthStateChangeAction能按预期执行。
复现代码
import 'package:firebase_auth/firebase_auth.dart' hide EmailAuthProvider; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_ui_auth/firebase_ui_auth.dart'; import 'package:flutter/material.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( home: const MyHomePage(), ); } } class MyHomePage extends StatefulWidget { const MyHomePage({super.key}); @override State<MyHomePage> createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(), body: RegisterScreen( providers: [EmailAuthProvider()], actions: [ AuthStateChangeAction<SignedIn>((context, state) { print('AuthStateChangeAction()'); }), ], ), floatingActionButton: IconButton( icon: const Icon(Icons.close), onPressed: () async { print('FirebaseAuth.instance.signOut()'); await FirebaseAuth.instance.signOut(); }, ), ); } }
替代解决方案
可以通过监听原生FirebaseAuth的状态变化来替代AuthStateChangeAction,在页面的initState方法中添加如下代码:
@override void initState() { super.initState(); FirebaseAuth.instance.authStateChanges().listen((user) { print('FirebaseAuth.instance.authStateChanges()'); // 在此处理注册成功后的业务逻辑 }); }
内容的提问来源于stack exchange,提问作者Tymoteusz Chmielewski
相关产品推荐
相关产品推荐

