【问题标题】:Flutter/Dart How to transform user uid from firebase in a variable?Flutter / Dart如何将用户uid从firebase转换为变量?
【发布时间】:2021-03-09 16:54:57
【问题描述】:

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

在 null 上调用了 getter 'uid'。 接收方:空 尝试调用:uid

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

我的主页:

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...');
        },},);}}

我的登录按钮

RaisedButton(
              onPressed: () {
                context.read<AuthenticationService>().signIn(
                      email: emailController.text.trim(),
                      password: passwordController.text.trim(),
                    );
              },
              child: Text("Sign in"),
            ),

我的 main.dart

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(...

我的认证服务页面

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);
    } 
  }

【问题讨论】:

    标签: firebase flutter dart firebase-authentication uid


    【解决方案1】:

    尝试使用 authStateChanges()

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

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

    【讨论】:

    • 感谢您的回答,但还是一样!
    【解决方案2】:

    流可以发出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...');
            },},);}}
    

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 1970-01-01
      • 2021-09-08
      • 2023-04-07
      • 2020-10-10
      • 2018-12-13
      • 2021-08-19
      • 2022-01-08
      • 1970-01-01
      相关资源
      最近更新 更多