可以使用Flutter将字符串与Firebase实时DB的钥匙值进行比较吗?
我是Flutter和Firebase的新手,正在尝试显示登录的当前用户的数据。我自己尝试了各种方式,例如将当前用户电子邮件存储在字符串变量上,并将其与他们的电子邮件密钥进行比较,但无法弄清楚如何做。
有没有办法将快照作为仅登录的用户数据的输出?
import 'package:firebase_database/firebase_database.dart';
import 'package:firebase_database/ui/firebase_animated_list.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:helloworld/tictactoe.dart';
import 'package:helloworld/numbergame.dart';
import 'package:helloworld/profile.dart';
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return const MaterialApp(
// Remove the debug banner
debugShowCheckedModeBanner: false,
title: 'Search',
home: Search(),
);
}
}
class Search extends StatefulWidget {
const Search({Key? key}) : super(key: key);
static const String id = 'search';
@override
_SearchState createState() => _SearchState();
}
class _SearchState extends State<Search> with AutomaticKeepAliveClientMixin {
final dbRef = FirebaseDatabase.instance.ref().child("insertdata");
List<Map<dynamic, dynamic>> lists = [];
final _auth = FirebaseAuth.instance;
late String? userEmail;
void getCurrentUserEmail() async {
final user = await _auth.currentUser;
userEmail = user!.email;
}
void initState() {
super.initState();
getCurrentUserEmail();
}
@override
Widget build(BuildContext context) {
super.build(context);
//btmnavbar
return Scaffold(
resizeToAvoidBottomInset: false,
body: FutureBuilder<DatabaseEvent>(
future: dbRef.once(),
builder: (context, AsyncSnapshot<DatabaseEvent> snapshot) {
if (snapshot.hasData) {
lists.clear();
Map<dynamic, dynamic> values = snapshot.data!.snapshot.value as Map<dynamic, dynamic>;
values.forEach((key, values) {
lists.add(values);
});
return new ListView.builder(
shrinkWrap: true,
itemCount: lists.length,
itemBuilder: (BuildContext context, int index) {
return Card(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text("Name: " + lists[index]["Email"]),
Text("Age: " + lists[index]["First Name"]),
Text("Type: " + lists[index]["Last Name"]),
],
),
);
});
}
return CircularProgressIndicator();
}),
);
}
@override
// TODO: implement wantKeepAlive
bool get wantKeepAlive => true;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您有用户的电子邮件地址,则可以使用查询在其
电子邮件
属性中仅选择具有该值的节点,或者如果您有变量
useremail
其中的电子邮件地址:另请参阅来自实时数据库。
If you have the user's email address, you can use a query to select just the nodes with that value in their
Email
property with:Or if you have a variable
userEmail
with the email address in it:Also see the Firebase documentation on ordering and filtering data from the Realtime Database.