User? user = FirebaseAuth.instance.currentUser;
onPressed: () {
final games = Games(
id: user!.uid,
pc: pcController.text.trim(),
board: boardController.text.trim(),
real: realController.text.trim());
createGame(games);
},
Future createGame(Games games) async {
final json = games.toJson();
await docUser.set(json);
}
下面是我的代码,用户在几个文本字段中输入数据,并将它们保存在Firestore的一个名为“games”的文件中。
class Games {
String id;
final String pc;
final String board;
final String real;
Games(
{required this.pc,
required this.board,
required this.real,
this.id = ''});
Map<String, dynamic> toJson() => {
'pc': pc,
'id': id,
'board': board,
'real': real,
};
static Games fromJson(Map<String, dynamic> json) => Games(
pc: json['pc'],
board: json['board'],
real: json['real'],
id: json['id'],
);
}
我创建的游戏类
List<String> docGameIDs = [];
User? user = FirebaseAuth.instance.currentUser;
getGamesId() async {
await FirebaseFirestore.instance
.collection('games')
.where('id', isEqualTo: user?.uid)
.get()
.then((snapshot) {
docGameIDs = [];
for (var element in snapshot.docs) {
docGameIDs.add(element.reference.id);
}
});
}
FutureBuilder(
future: getGamesId(),
builder: (context, snapshot) {
return ListView.builder(
itemCount: docGameIDs.length,
itemBuilder: (context, index) {
return Container(
child:
GetGames(documentId: docGameIDs[index]),
);
},
);
},
),
最后,我从Firestore获取数据的代码。
class GetGames extends StatelessWidget {
final String documentId;
const GetGames({super.key, required this.documentId});
@override
Widget build(BuildContext context) {
CollectionReference users = FirebaseFirestore.instance.collection('games');
return FutureBuilder<DocumentSnapshot>(
future: users.doc(documentId).get(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
Map<String, dynamic> data =
snapshot.data!.data() as Map<String, dynamic>;
return Center(
child: Text(
'${data['pc']}',
),
);
}
return const Text('');
},
);
}
}
GetGames小程序
如图所示,我在Games类中定义的文件中创建的id值与文件自动分配的id不相同。然而,我在第一段代码中使用了id = user!.uid
的定义,因此这些id是相同的。这样,在文件中创建的id将不再与文件的id相同,而是用户的UID。
但是要让第三个代码中的.where('id', isEqualTo: user?.uid)
代码工作,id和uid必须与图像中看到的相同。简而言之,我如何将自动分配的短id打印为文件中定义的uid(XyyjAZ7FZ8PtWw0vfL7YWXIJAGg2)?
1条答案
按热度按时间kcwpcxri1#
如果你需要一个自己选择的文档ID,而不是随机生成的ID(t7iq...DNzU),那么你必须创建一个包含该ID的引用。所以在代码中,它将是: