我已经看到了关于同一主题的各种问题,并意识到在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检查。
3条答案
按热度按时间flseospp1#
当你使用
RaisedButton
的时候,我建议你更新flutter版本。现在为了获得当前用户,你不需要使用FutureBuilder,但是确保初始化主方法上的Firebase。您将使用
FirebaseAuth.instance.currentUser
获取当前用户,它可以返回null,这是我做的修改
snvhrwxg2#
仅添加
await FirebaseAuth.instance!.signOut();
或await FirebaseAuth!.instance.signOut();
这不完全是错误,flutter和dart的最新版本引入了空值检查器,因此无论何时获取值,您都可能需要添加!
或?
,并且当您初始化空白变量时,您可能需要添加late
或?
。您可以从此处https://dart.dev/null-safety了解更多信息。如果您希望删除此功能,只需将您的在
pubspec.yaml
中lg40wkob3#
像这样检查需要检查null,
有关详细信息,请参阅文档
https://firebase.google.com/docs/auth/flutter/manage-users