[英]Displaying user data fields from a firestore document in a flutter app
我是 Flutter 和 firebase/firestore 的新手,我正在設計我的第一個應用程序。
我編寫此方法是為了從 firestore 獲取當前登錄用戶的文檔:
getPatientData() async {
return FirebaseFirestore.instance
.collection('Users')
.doc('PatientData')
.collection('Patients')
.doc(FirebaseAuth.instance.currentUser!.uid);
}
我有這個非常基本的 ListView 填充了我想用用戶記錄中的字段填充的 TextFormFields:
ListView(
children: [
Container(
padding: const EdgeInsets.all(10),
child: TextFormField(
decoration: InputDecoration(
labelText: 'Full Name',
enabledBorder: OutlineInputBorder(
borderSide:
const BorderSide(color: Colors.green, width: 2.0),
borderRadius: BorderRadius.circular(15.0)),
focusedBorder: OutlineInputBorder(
borderSide: const BorderSide(color: Colors.green, width: 2.0),
borderRadius: BorderRadius.circular(15.0),
),
),
),
),
Container(
padding: const EdgeInsets.all(10),
child: TextFormField(
decoration: InputDecoration(
labelText: 'Email',
enabledBorder: OutlineInputBorder(
borderSide:
const BorderSide(color: Colors.green, width: 2.0),
borderRadius: BorderRadius.circular(15.0)),
focusedBorder: OutlineInputBorder(
borderSide: const BorderSide(color: Colors.green, width: 2.0),
borderRadius: BorderRadius.circular(15.0),
),
),
),
),
Container(
padding: const EdgeInsets.all(10),
child: TextFormField(
decoration: InputDecoration(
labelText: 'Password',
enabledBorder: OutlineInputBorder(
borderSide:
const BorderSide(color: Colors.green, width: 2.0),
borderRadius: BorderRadius.circular(15.0)),
focusedBorder: OutlineInputBorder(
borderSide: const BorderSide(color: Colors.green, width: 2.0),
borderRadius: BorderRadius.circular(15.0),
),
),
),
),
Container(
padding: const EdgeInsets.all(10),
child: TextFormField(
decoration: InputDecoration(
labelText: 'Phone Number',
enabledBorder: OutlineInputBorder(
borderSide:
const BorderSide(color: Colors.green, width: 2.0),
borderRadius: BorderRadius.circular(15.0)),
focusedBorder: OutlineInputBorder(
borderSide: const BorderSide(color: Colors.green, width: 2.0),
borderRadius: BorderRadius.circular(15.0),
),
),
),
),
],
)
但我不知道如何訪問使用 getUserData() 方法檢索到的文檔中的字段,以便在 TextFormFields 中顯示它們。
我用'package:firebase_auth/firebase_auth.dart'設計了auth函數。 當客戶登錄您的應用程序時,您可以使用“User(firebase_auth)”來獲取登錄的帳戶信息。
import 'package:flutter/material.dart';
import 'package:trashcollectionday/utilities/constants.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
final _firestore = FirebaseFirestore.instance;
late User loggedInUser;
class ChatScreen extends StatefulWidget {
static const String id = 'chat_screen';
@override
_ChatScreenState createState() => _ChatScreenState();
}
class _ChatScreenState extends State<ChatScreen> {
final messageTextController = TextEditingController();
final _auth = FirebaseAuth.instance;
late String messageText;
@override
void initState() {
// TODO: implement initState
super.initState();
getCurrentUser();
}
void getCurrentUser() async{
try {
final user = await _auth.currentUser!;
if (user != null) {
loggedInUser = user;
// print(loggedInUser.email);
}
}
catch(e) {
print(e);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
leading: null,
actions: <Widget>[
IconButton(
icon: Icon(Icons.close),
onPressed: () {
messagesStream();
// _auth.signOut();
// Navigator.pop(context);
//Implement logout functionality
}),
],
title: Text('⚡️Chat'),
backgroundColor: Colors.lightBlueAccent,
),
body: SafeArea(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
MessageStream(),
Container(
decoration: kMessageContainerDecoration,
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Expanded(
child: TextField(
controller: messageTextController,
onChanged: (value) {
messageText = value;
//Do something with the user input.
},
decoration: kMessageTextFieldDecoration,
),
),
FlatButton(
onPressed: () {
messageTextController.clear();
_firestore.collection('messages').add(
{
'text': messageText,
'sender': loggedInUser.email,
}
);
print("sent");
//Implement send functionality.
},
child: Text(
'Send',
style: kSendButtonTextStyle,
),
),
],
),
),
],
),
),
);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.