如何解决需要帮助从 Cloud Firestore 访问当前用户的信息并将信息包含在我的应用程序中
这是我想要访问并包含从 Firestore 登录用户数据的用户
class CategorySelector extends StatefulWidget {
@override
_CategorySelectorState createState() => _CategorySelectorState();
}
class _CategorySelectorState extends State<CategorySelector> {
Future<Widget> _getImage(BuildContext context,String imageName) async{
Image image;
await FireStorageService.loadImage(context,imageName).then((value){
image = Image.network(value.toString(),fit: BoxFit.cover,);
});
return image;
}
@override
Widget build(BuildContext context) {
return Container(
height: 100.0,width: double.infinity,child: Row(
crossAxisAlignment: CrossAxisAlignment.stretch,mainAxisAlignment: MainAxisAlignment.spaceBetween,children: <Widget>[
Container(
width: 80.0,height: 80.0,margin: EdgeInsets.only(left: 10.0),decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20.0),boxShadow: [
BoxShadow(
//color: Color.fromRGBO(143,148,251,.2),color: Colors.black12,blurRadius: 5.0,offset: Offset(8,8)
)
]
),child: ClipRRect(
borderRadius: BorderRadius.circular(20.0),child: FutureBuilder(
future: _getImage(context,"Screenshot_2020-12-12-07-27-13-73.png"),builder: (context,snapshot){
//if(snapshot.connectionState == ConnectionState.done){
return Container(
width: 80.0,child: snapshot.data,);
//}
},),/*child: Image(
image: AssetImage(user.imageUrl),*/
),Column(
mainAxisAlignment: MainAxisAlignment.center,crossAxisAlignment: CrossAxisAlignment.start,children: <Widget>[
Text('Welcome,',style: TextStyle(
fontFamily: 'Roboto',color: Colors.grey,fontSize: 20.0,Text('hi',color: Colors.black54,fontWeight: FontWeight.bold,],Container(
margin: EdgeInsets.only(right: 10.0),width: 80.0,child: Image(
image: AssetImage('assets/images/logo.png'),);
}
}
class FireStorageService extends ChangeNotifier{
FireStorageService();
static Future<dynamic> loadImage(BuildContext context,String image) async {
return await FirebaseStorage.instance.ref().child(image).getDownloadURL();
}
}
我为用户身份验证创建了这个类
class AuthenticationService {
final FirebaseAuth _auth = FirebaseAuth.instance;
//user registration with email and password
Future<User> createNewUser(String email,String password,String imageUrl) async {
try{
UserCredential result = await _auth
.createUserWithEmailAndPassword(email: email,password: password);
User user = result.user;
print('auth ser $imageUrl');
if(user != null) {
await DatabaseManager().createUserData(user.email,imageUrl,user.uid);
return user;
}
return null;
}catch(e){
return null;
}
}
//user sign in with email and password
Future loginUser(String email,String password) async {
try{
UserCredential result = await _auth.signInWithEmailAndPassword(email: email,password: password);
return result.user;
}catch(e){
print(e.toString());
return null;
}
}
*//i think this function will help me to access current user's information,but it did not help*
Future<User> getCurrentUser()async{
User user = _auth.currentUser;
return user;
}
}
这是我包含所有数据库操作的地方。
class DatabaseManager {
final CollectionReference users = FirebaseFirestore.instance.collection('users');
Future<void> createUserData( String email,String imageUrl,String uid) async{
return await users.doc(uid).set({
'id': uid,'email': email,'user_name': email.substring(0,email.lastIndexOf("@")),'img_url': imageUrl
});
}
}
这是我的用户模型
import 'package:flutter/foundation.dart';
class User {
int id;
String name;
String email;
String imageUrl;
String password;
User({
@required this.id,@required this.name,@required this.imageUrl,@required this.email,@required this.password,});
User.fromMap(Map<String,dynamic> json){
this.id = json['id'];
this.name = json['name'];
this.imageUrl = json['img_url'];
this.email = json['email'];
this.password = json['password'];
}
}
我真的不知道如何从 firebase 检索登录用户的信息。 我想从 firestore 访问存储在 firebase 存储中的图像和用户名,并通过 class categorySelector 显示在我的应用中。 非常感谢您的帮助。这就是我构建用户集合的方式。
解决方法
如果您使用 Firebase Auth,您可以访问简单的数据,例如姓名、电子邮件和电话号码等,您可以使用
FirebaseAuth.instance.currentUser
否则,如果您想访问 Firestore 中的数据,我建议您阅读 documentation 并自行学习,而不是获取有关如何操作的一次性代码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。