我是新的颤振和火力基地,并试图显示当前用户的数据,已登录。我自己尝试过各种方法,比如将当前用户的电子邮件存储在字符串变量上,并将其与他们的电子邮件键进行比较,但无法找到如何做到这一点。
是否有一种方法可以将快照作为仅登录用户数据的输出?

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;
}发布于 2022-06-25 14:33:31
如果您有用户的电子邮件地址,您可以使用一个查询来选择在其Email属性中具有该值的节点:
future: dbRef.orderByChild("Email").equalTo("hiba@gmail.com").once(),或者,如果您有一个带有电子邮件地址的变量userEmail:
future: dbRef.orderByChild("Email").equalTo(userEmail).once(),还请参阅实时数据库中有关排序和过滤数据的Firebase文档。
https://stackoverflow.com/questions/72754659
复制相似问题