future:FirebaseAuth.instance.currentUser(),抛出错误,需要替代方法

vsnjm48y  于 2023-01-18  发布在  其他
关注(0)|答案(3)|浏览(106)

我已经看到了关于同一主题的各种问题,并意识到在FirebaseAuth中更新后,“currentUser”与未来不一致

import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  Future<void> _logout() async {
    try {
      await FirebaseAuth.instance.signOut();
    } catch (e) {
      print(e.toString());
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Phone Auth Demo"),
        backgroundColor: Colors.cyan,
      ),
      body: FutureBuilder(
        future: FirebaseAuth.instance.currentUser(),
        builder: (context, snapshot) {
         final firebaseUser = snapshot.data;
          return snapshot.hasData
              ? Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              crossAxisAlignment: CrossAxisAlignment.center,
              children: [
                Text(
                  "SignIn Success 😊",
                  style: TextStyle(
                    color: Colors.green,
                    fontWeight: FontWeight.bold,
                    fontSize: 30,
                  ),
                ),
                SizedBox(
                  height: 20,
                ),
                Text("UserId:${firebaseUser.uid}"),
                SizedBox(
                  height: 20,
                ),
                Text(
                    "Registered Phone Number: ${firebaseUser.phoneNumber}"),
                SizedBox(
                  height: 20,
                ),
                RaisedButton(
                  onPressed: _logout,
                  child: Text(
                    "LogOut",
                    style: TextStyle(color: Colors.white),
                  ),
                  color: Colors.cyan,
                )
              ],
            ),
          )
              : CircularProgressIndicator();
        },
      ),
    );
  }
}

将来:FirebaseAuth.示例.当前用户(),

  • 这一行是错误。它显示以下错误:
  • 无法无条件调用该函数,因为它可以为“null”。(文档)请尝试添加null检查('!')。

此外,有一些错误的uid和phoneNumber

  • 我有这个错误:
  • 无法无条件访问属性“phoneNumber”,因为接收方可以为“null”。(文档)请尝试使访问条件化(使用“?.”)或向目标(“!”)添加null检查。
flseospp

flseospp1#

当你使用RaisedButton的时候,我建议你更新flutter版本。现在为了获得当前用户,你不需要使用FutureBuilder,但是确保初始化主方法上的Firebase。
您将使用FirebaseAuth.instance.currentUser获取当前用户,它可以返回null,
这是我做的修改

class _HomePageState extends State<HomePage> {
  Future<void> _logout() async {
    try {
      await FirebaseAuth.instance.signOut();
    } catch (e) {
      print(e.toString());
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text("Phone Auth Demo"),
          backgroundColor: Colors.cyan,
        ),
        body: FirebaseAuth.instance.currentUser != null
            ? Center(
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  crossAxisAlignment: CrossAxisAlignment.center,
                  children: [
                    Text(
                      "SignIn Success 😊",
                      style: TextStyle(
                        color: Colors.green,
                        fontWeight: FontWeight.bold,
                        fontSize: 30,
                      ),
                    ),
                    SizedBox(
                      height: 20,
                    ),
                    Text("UserId:${FirebaseAuth.instance.currentUser?.uid}"),
                    SizedBox(
                      height: 20,
                    ),
                    Text(
                        "Registered Phone Number: ${FirebaseAuth.instance.currentUser?.phoneNumber}"),
                    SizedBox(
                      height: 20,
                    ),
                    ElevatedButton(
                      onPressed: _logout,
                      child: Text(
                        "LogOut",
                        style: TextStyle(color: Colors.white),
                      ),
                    )
                  ],
                ),
              )
            : CircularProgressIndicator());
  }
}
snvhrwxg

snvhrwxg2#

仅添加await FirebaseAuth.instance!.signOut();await FirebaseAuth!.instance.signOut();这不完全是错误,flutter和dart的最新版本引入了空值检查器,因此无论何时获取值,您都可能需要添加!?,并且当您初始化空白变量时,您可能需要添加late?。您可以从此处https://dart.dev/null-safety了解更多信息。如果您希望删除此功能,只需将您的

environment:
  sdk: ">=2.11.0 <3.0.0"

pubspec.yaml

lg40wkob

lg40wkob3#

像这样检查需要检查null,

if (FirebaseAuth.instance.currentUser != null) {
  print(FirebaseAuth.instance.currentUser?.uid);
}

有关详细信息,请参阅文档
https://firebase.google.com/docs/auth/flutter/manage-users

相关问题