【发布时间】:2020-09-01 08:19:52
【问题描述】:
我正在尝试使用 StreamProvider 让我的应用在用户登录时显示 Features 小部件。这是我的代码:
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'auth/auth.dart';
import 'features/features.dart';
void main() => runApp(
StreamProvider<FirebaseUser>(
create: (context) => FirebaseAuth.instance.onAuthStateChanged,
child: MaterialApp(home: MyApp()),
updateShouldNotify: (_, __) => true),
);
class MyApp extends StatelessWidget {
static reload(BuildContext context) {
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(builder: (context) => MyApp()),
(Route<dynamic> route) => false,
);
}
@override
Widget build(BuildContext context) {
var _user = Provider.of<FirebaseUser>(context);
print('USER ISSUED: ' + _user.toString());
if (_user == null) return SignInPage();
if (_user != null) return Features();
}
}
我必须创建reload() 方法,该方法由嵌套在SignInPage 下方的各种身份验证小部件(google、facebook、密码)调用,以更新MyApp 的显示。我原以为Provider.of<FirebaseUser> 会自动重建我的应用程序,而无需调用reload()。 Provider 确实有效。每当 FirebaseAuth 更新用户时,它都会打印 USER ISSUED: some_user...。为什么在user == null时不执行后面两行代码返回我的SignInPage,在用户登录成功时不返回Features页面?
我是 FlutterFire 的新手,但来自 AngularFire,我希望它能够顺利运行。
【问题讨论】:
标签: firebase flutter firebase-authentication flutter-provider