【发布时间】:2020-05-11 15:19:15
【问题描述】:
我正在尝试连接两个 UID 以创建聊天室。一个 uid 是从 firebase 读取的,而另一个是从 FirebaseAuth.instance 读取的。
正在按应有的方式分配 clientUID,因为我将它传递到 Text 小部件上的另一个页面。然而,聊天室并没有在 firestore 树中创建,所以我认为这应该是因为讲师 uid。
也许我没有按应有的方式调用 FirebaseAuth.instance?
代码:
class ClientiPage extends StatefulWidget {
static const String id = 'CLIENTI';
@override
_ClientiPageState createState() => _ClientiPageState();
}
class _ClientiPageState extends State<ClientiPage> {
String chatRoomID;
String clientUID;
Firestore db = Firestore.instance;
String instructor;
void getInstructorId() async {
instructor = (await FirebaseAuth.instance.currentUser()).uid;
}
void saveChatRoom() {
getInstructorId();
DocumentReference chatroomIdRef = db.collection('instructori').document(instructor).collection("chatrooms").document(chatRoomID);
if (chatroomIdRef == null) {
db.collection('instructori').document(instructor).collection("chatrooms").document(chatRoomID);
}
}
void createChatRoom() {
getInstructorId();
chatRoomID = clientUID + instructor;
if(chatRoomID != null) {
saveChatRoom();
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ChatPage(
chatRoomID: chatRoomID,
clientUID: clientUID,
),
),
);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: StreamBuilder(
stream: db.collection('clienti').snapshots(),
builder: (context, snapshot) {
if (snapshot.data == null) {
return Center(
child: CircularProgressIndicator(),
);
} else {
return ListView.builder(
itemCount: snapshot.data.documents.length,
itemBuilder: (context, index) {
clientUID = snapshot.data.documents[index]["UID"];
return Column(
children: <Widget>[
Divider(
height: 10.0,
),
new ListTile(
onTap: createChatRoom,
title: new Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
new Text(
snapshot.data.documents[index]["numar_telefon"],
style: new TextStyle(
fontWeight: FontWeight.bold,
),
),
],
),
),
],
);
},
);
}
},
),
);
}
}
错误
The getter 'uid' was called on null.
Receiver: null
Tried calling: uid
【问题讨论】:
-
你怎么称呼这个
ClientiPage({Key key, this.instructor}) -
你的意思是我如何通过RegisterState的导师?
-
检查我的答案。我的意思是
ClientiPage被调用可能是这样的:ClientiPage(instructor: currentUser),那么你将什么作为值传递给instructor属性
标签: firebase flutter dart google-cloud-firestore firebase-authentication