【发布时间】:2021-01-11 18:27:10
【问题描述】:
当用户登录时,我正在从 appBar 中的 firebase 检索用户名。我成功检索了它。但是当用户未登录时。我收到“uid”为空的错误。我相信 错误在我的 initUser() 中。但我似乎无法修复它!
E/flutter (16741): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] 未处理的异常:NoSuchMethodError:getter 'uid' 被调用为 null。 E/颤振(16741):接收器:空 E/flutter (16741):尝试调用:uid
class MainScreen extends StatefulWidget {
final bool isAdmin;
const MainScreen({Key key, this.isAdmin}) : super(key: key);
@override
_MainScreenState createState() => _MainScreenState(this.isAdmin);
}
class _MainScreenState extends State<MainScreen> {
bool isPressed = false;
bool userLoggedIn =false;
//var _userName;
// Future<FirebaseUser> getUser() {
// return _auth.currentUser();
// }
Future<String> currentUser() async {
user = await _auth.currentUser();
return user != null ? user.uid : null;
}
FirebaseUser user;
@override
void initState() {
super.initState();
initUser();
}
String userid;
initUser() async {
user = await _auth.currentUser();
userid = user.uid;
setState(() {});
}
bool isAdmin = true;
final FirebaseAuth _auth = FirebaseAuth.instance;
//final authData = snapshot.data;
_MainScreenState(this.isAdmin);
@override
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
]);
CurrentUser _currentUser = Provider.of<CurrentUser>(context, listen: false);
return Scaffold(
//backgroundColor: Colors.grey,
resizeToAvoidBottomPadding: false,
appBar: AppBar(
flexibleSpace: Container(
decoration: BoxDecoration(
gradient: LinearGradient(
colors: [Colors.cyan, Colors.yellow], stops: [0.5, 1.0],
),
),
),
//title: Text('Property Host'),
centerTitle: true,
actions: <Widget>[
Expanded(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[
//Image.asset('assets/index.jpg', fit: BoxFit.cover,height:16,width:16),
Container(
margin: new EdgeInsets.only(left: 50),
child: Text('Property Host',style: TextStyle(fontWeight: FontWeight.bold,fontSize: 19),)),
user!=null ? StreamBuilder(stream: Firestore.instance.collection('users').where("uid", isEqualTo: userid).snapshots(),
// ignore: missing_return
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.data == null)
return CircularProgressIndicator();
//final userDocument = snapshot.data;
//final title= snapshot.data.userocument['displayName']);
//CircularProgressIndicator();
return Expanded(
child: ListView.builder(
itemCount: snapshot.data.documents.length,
// ignore: missing_return
itemBuilder: (BuildContext context, int index) {
print(user.uid);
return user != null
? Container(
margin: EdgeInsets.only(top: 17, left: 40),
child: Text(
snapshot.data.documents.elementAt(index)['displayName']),
)
: IconButton(
icon: Icon(Icons.person),
// ignore: missing_return
onPressed: () {
Navigator.pushNamed(context, '/LoginScreen');
},
);
}
),
);
}
【问题讨论】:
-
答案就在您的问题中:“但是当用户未登录时。我收到错误提示 'uid' 为空。”
标签: firebase flutter firebase-authentication