【发布时间】:2021-10-24 13:05:49
【问题描述】:
我有一个类,我从用户那里获取电子邮件数据。它基本上是一个文本字段,所以我不会发布文本字段代码。获得电子邮件和密码数据后,我会检查这些数据是否在我的 Firestore 数据库中。如果是,我想将此电子邮件数据传递给我的其他班级,以便我获得有关客户的其他信息。
这是当我单击按钮时尝试检查用户是否存在的代码。这是我的 LoginScreen() 类的 Material Button 的 onPressed 操作。如果用户已经存在于我的 FirebaseAuth 中,我只收到来自用户的电子邮件,并希望将此电子邮件数据传递给我的 CustomerInfo 类。此外,CustomerScreen 类用于在屏幕上显示所有客户信息。成功获取数据表单数据库后,我会添加一些代码来推送客户信息。
try {
final user = await _auth.signInWithEmailAndPassword(
email: email!, password: password!);
if (user != null) {
CustomerInfo(email: email);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => CustomerScreen()));
}
} catch (e) {
print(e);
}
我还有另一个类,我正在尝试获取客户数据。
class CustomerInfo {
String? email;
String? name;
String? surname;
String? avatarLink;
int? balance;
CollectionReference customers =
FirebaseFirestore.instance.collection('customers');
CustomerInfo({this.email});
Future getCustomerData() async {
print("Email: $email");
await customers.where('email', isEqualTo: email).get().then((value) {
value.docs.forEach((result) {
name = result['name'];
surname = result['surname'];
balance = result['balance'];
avatarLink = result['image'];
});
});
}
}
还有 CustomerInfo 类:
import 'package:banking_app_firebase/constants.dart';
import 'package:banking_app_firebase/networking.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'login_screen.dart';
class CustomerScreen extends StatefulWidget {
const CustomerScreen({Key? key}) : super(key: key);
@override
_CustomerScreenState createState() => _CustomerScreenState();
}
class _CustomerScreenState extends State<CustomerScreen> {
String? name;
String? surname;
int? balance;
String? image;
void getData() async {
CustomerInfo customerInfo = CustomerInfo();
await customerInfo.getCustomerData();
name = customerInfo.name;
print("Name: $name");
}
@override
void initState() {
// TODO: implement initState
super.initState();
getData();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBar(
backgroundColor: Colors.white,
iconTheme: IconThemeData(
color: Colors.black,
),
title: Text(
"Account Summary",
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold,
color: Colors.black,
),
),
actions: [
Container(
padding: EdgeInsets.only(right: 10),
child: Row(
children: [
Icon(
CupertinoIcons.bell,
color: Colors.black,
),
SizedBox(
width: 10,
),
CircleAvatar(
backgroundImage: NetworkImage(
"https://cdn.pixabay.com/photo/2016/03/23/04/01/woman-1274056_960_720.jpg"),
),
],
),
),
],
elevation: 0,
),
body: Container(
child: Column(
children: [
Align(
alignment: Alignment.topLeft,
child: Text(
"Deneme",
style: kInfoTextDecoration,
),
),
Align(
alignment: Alignment.topLeft,
child: Text(
"Deneme",
style: kInfoTextDecoration,
),
),
],
),
),
);
}
}
如何将电子邮件数据传递给我的 CustomerInfo 类,以便我可以使用 getCustomerData()?使用 CustomerInfo(email:email) 不起作用。
【问题讨论】:
-
您可以使用 FirebaseAuth 的实例来获取 currentUser。然后您可以使用
currentUser.getEmail();从 currentUser 获取电子邮件 -
@KshitijDhakal 嘿。我可以在我的基类中收到电子邮件。我想做的只是将此电子邮件数据传递给另一个类。
-
FirebaseAuth.getInstance() 返回单例。所以你应该可以在任何类中使用。
-
@KshitijDhakal 这不是给我一个不必要的 API 调用吗?我只想简单地将已使用的电子邮件数据发送到另一个班级。但我会试试这个。
-
你为什么要创建一个
CustomerInfo(email: email)' in the first code sample (inside thetry` 块?您没有将实例保存到变量中,因此您只是创建了一个CustomerInfo()而从不使用它。
标签: firebase flutter dart google-cloud-firestore