如何解决价值提供者首次返回null
我有以下应用,其中我使用FirebaseUser
提供了MultiProvider
的流。
void main() => runApp(App());
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
StreamProvider<Position>(
create: (_) => LocationService().location,),StreamProvider<FirebaseUser>(
create: (_) => AuthenticationService().user,],child: MaterialApp(
debugShowCheckedModeBanner: false,title: "title",theme: ThemeData(
primarySwatch: Colors.indigo,accentColor: Colors.indigoAccent,home: HomeScreen(),);
}
}
流的生成如下:
class AuthenticationService {
Stream<FirebaseUser> get user {
return FirebaseAuth.instance.onAuthStateChanged;
}
}
当用户使用Firebase
登录并在HomeScreen
中访问流时,我第一次获得的值为null
。从第二次开始,它运行良好。
class HomeScreenState extends State<HomeScreen> {
FirebaseUser u;
@override
void initState() {
u = Provider.of<FirebaseUser>(context,listen: false);
print(u);
super.initState();
}
}
如何确保Provider.of
返回一个有效值(即,仅当用户实际上未登录时才返回null
,而在登录时返回一个non-null
值)或某个值undefined
值的种类(如果尚不知道)?
解决方法
在使用multiprovider和Provider.of<FirebaseUser>().
时,我也遇到了类似的问题
首次provider.of返回null,然后如果用户已登录,则返回有效用户。
作为一种解决方法,我在下面做
@override
void initState() {
_initialiseFirebase();
super.initState();
}
Future _initialiseFirebase() async {
try {
await Firebase.initializeApp();
sub = FirebaseAuth.instance.authStateChanges().listen((user) {
// listener is called on registered. So we need to skip calling viewmodel for first time.
if (_authListenerRegistered) _viewmodel.verifyAuth(user);
_authListenerRegistered = true;
});
} catch (e) {
setState(() {
_error = true;
});
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。