Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
颤振/飞镖如何在变量中转换firebase中的用户uid?_Firebase_Flutter_Dart_Firebase Authentication_Uid - Fatal编程技术网

颤振/飞镖如何在变量中转换firebase中的用户uid?

颤振/飞镖如何在变量中转换firebase中的用户uid?,firebase,flutter,dart,firebase-authentication,uid,Firebase,Flutter,Dart,Firebase Authentication,Uid,我试图从Firebase获取uid并将其放入一个变量中,以便在另一个类中使用它,但到目前为止,我所做的最大努力是在主页中将该值显示为文本。当我尝试创建最终字符串riderId=snapshot.data.uid在主页中,它会打印错误: 对null调用了getter“uid”。 收件人:空 已尝试呼叫:uid 我已经在stackoverflow和youtube上的教程中看到了其他问题,但没有一个对我有用 我的主页: class HomePage extends StatelessWidget {

我试图从Firebase获取uid并将其放入一个变量中,以便在另一个类中使用它,但到目前为止,我所做的最大努力是在主页中将该值显示为文本。当我尝试创建
最终字符串riderId=snapshot.data.uid
在主页中,它会打印错误:

对null调用了getter“uid”。 收件人:空 已尝试呼叫:uid

我已经在stackoverflow和youtube上的教程中看到了其他问题,但没有一个对我有用

我的主页:

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // print(riderId);
    return StreamBuilder(
      stream: AuthenticationService().authStateChanges,
      builder: (BuildContext context, AsyncSnapshot<User> snapshot) {
        // final String riderId = snapshot.data.uid;
        if (snapshot.hasData) {
          return Center(
            child: Text(snapshot.data.uid),
          );
        } else {
          return Text('Loading...');
        },},);}}
类主页扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
//打印(riderId);
返回流生成器(
流:AuthenticationService().authStateChanges,
生成器:(BuildContext上下文,异步快照){
//最后一个字符串riderId=snapshot.data.uid;
if(snapshot.hasData){
返回中心(
子项:文本(snapshot.data.uid),
);
}否则{
返回文本('加载…');
},},);}}
我的登录按钮

RaisedButton(
              onPressed: () {
                context.read<AuthenticationService>().signIn(
                      email: emailController.text.trim(),
                      password: passwordController.text.trim(),
                    );
              },
              child: Text("Sign in"),
            ),
RaisedButton(
已按下:(){
context.read().sign(
电子邮件:emailController.text.trim(),
密码:passwordController.text.trim(),
);
},
子项:文本(“登录”),
),
我的主飞镖

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        Provider<AuthenticationService>(
          create: (_) => AuthenticationService(),
        ),
        StreamProvider(
          create: (context) =>
              context.read<AuthenticationService>().authStateChanges,
        )
      ],
      child: MaterialApp(...
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
回程多供应商(
供应商:[
提供者(
创建:()=>AuthenticationService(),
),
流提供者(
创建:(上下文)=>
context.read().authStateChanges,
)
],
孩子:MaterialApp(。。。
我的身份验证服务页面

class AuthenticationService {
  final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;

  Stream<User> get authStateChanges => _firebaseAuth.idTokenChanges();

  
  Future<UserModel> signIn({String email, String password}) async {
   
      var result = await _firebaseAuth.signInWithEmailAndPassword(
          email: email, password: password);
      return UserModel(result.user.uid);
    } 
  }
类身份验证服务{
final FirebaseAuth _FirebaseAuth=FirebaseAuth.instance;
Stream get-authStateChanges=>\u firebaseAuth.idTokenChanges();
未来登录({String email,String password})异步{
var result=await\u firebaseAuth.signiWithEmailAndPassword(
电子邮件:电子邮件,密码:密码);
返回UserModel(result.user.uid);
} 
}

尝试使用authStateChanges()

Stream get authStateChanges=>FirebaseAuth.instance.authStateChanges();

Stream get authStateChanges=>FirebaseAuth.instance.userChanges();

流可以作为第一个事件发出
null
。因此,在执行
null
检查或检查
snapshot.hasData
后,应始终访问
uid

  
  @override
  Widget build(BuildContext context) {
    // print(riderId);
    return StreamBuilder(
      stream: AuthenticationService().authStateChanges,
      builder: (BuildContext context, AsyncSnapshot<User> snapshot) {
        // final String riderId = snapshot.data.uid; // <~~ you'll always get an error in the first event if it's null
        if (snapshot.hasData) {
          final String riderId = snapshot.data.uid; // <~~ here should be fine
          return Center(
            child: Text(snapshot.data.uid),
          );
        } else {
          return Text('Loading...');
        },},);}}

@凌驾
小部件构建(构建上下文){
//打印(riderId);
返回流生成器(
流:AuthenticationService().authStateChanges,
生成器:(BuildContext上下文,异步快照){

//最后一个字符串riderId=snapshot.data.uid;//谢谢您的回答,但还是一样!
Stream<User> get authStateChanges => FirebaseAuth.instance.userChanges();
  
  @override
  Widget build(BuildContext context) {
    // print(riderId);
    return StreamBuilder(
      stream: AuthenticationService().authStateChanges,
      builder: (BuildContext context, AsyncSnapshot<User> snapshot) {
        // final String riderId = snapshot.data.uid; // <~~ you'll always get an error in the first event if it's null
        if (snapshot.hasData) {
          final String riderId = snapshot.data.uid; // <~~ here should be fine
          return Center(
            child: Text(snapshot.data.uid),
          );
        } else {
          return Text('Loading...');
        },},);}}