如何在监听开关中只执行一次函数



我有一个函数在一个开关里面,在一个监听,我希望这个函数只执行一次(这是一个警告对话框,我想要显示的情况下返回为真(它是函数fun234();在案例中StatusRequisicao.REQUISICAO。问题是,当我执行代码时,对话框显示多次

_adicionarListenerRequisicao({String? idUsuario, String? nome,String? About, String? mood, String? Interests, String? likes, String? urlImagemRecuperadaBackground, String? urlImagem, String? idDestinatario, String? Destinatario, String? Remetente,String? idRequisicao})async{
FirebaseAuth auth2 = FirebaseAuth.instance;
FirebaseFirestore db = FirebaseFirestore.instance;
QuerySnapshot querySnapshot4 = await db.collection("requisicao_ativa").where("id_destinatario", isEqualTo: auth2.currentUser!.uid).get();
setState((){
allData = querySnapshot4.docs.map((doc) => doc.data()).toList();
});
String idRequisicao = _dadosRequisicao!["id"] == null ? ' ' : _dadosRequisicao!["id"];
await db.collection("requisicoes")
.doc(idRequisicao)
.snapshots().listen((snapshot) {
if(snapshot.data() != null){
Map<String, dynamic> dados = snapshot.data() as Map<String,dynamic>;
String status = dados["status"];
switch (status){
case StatusRequisicao.AGUARDANDO:
break;
case StatusRequisicao.REQUISICAO:
fun234(idUsuario: idDestinatario,idRequisicao: idRequisicao,nome: nome, About: About, mood: mood, Interests: Interests, likes: likes, urlImagemRecuperadaBackground: urlImagemRecuperadaBackground, urlImagem: urlImagem, idDestinatario: idDestinatario);
break;
case StatusRequisicao.CONVERSANDO:
break;
}
}
});
}

Using take method of Stream

Stream.periodic(
const Duration(seconds: 1),
(i) => i,
).take(1).listen((event) {/* do something once */});

最新更新