google-cloud-firestore - 由于异步功能而更新我的 ListView 时出现问题
问题描述
在这里,我在使用 Setstate 更新我的 listView 时遇到问题。事实上,我认为它来自我的异步函数,它阻止了实时更新我的 listView。我加入我的课程以获得更多理解提前感谢您的帮助
类 DELETE_DESCRIPTION:
import 'package:cloud_firestore/cloud_firestore.dart';
class DeleteDescription {
final String city;
final String citee;
final int value;
CollectionReference cities = FirebaseFirestore.instance.collection('city');
DeleteDescription(this.city, this.citee, this.value) {
deleteDescription();
}
Future<void> deleteDescription() async {
final snapshot =
await cities.doc(city).collection("citee").doc(citee).get();
final list = snapshot["Description"];
list.removeAt(value);
await cities
.doc(city)
.collection("citee")
.doc(citee)
.set({"Description": list})
.then((values) => print("Description deleted"))
.catchError(
(error) => print("Impossible de supprimer les données : $error"));
}
}
主要课程
import 'package:ampc_93/fonction/firebase_crud/delete_description.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
class ReadDescription extends StatefulWidget {
final String titreCity;
final String titreCitee;
ReadDescription(this.titreCity, this.titreCitee);
@override
_ReadDescriptionState createState() => _ReadDescriptionState();
}
class _ReadDescriptionState extends State<ReadDescription> {
@override
Widget build(BuildContext context) {
CollectionReference cities = FirebaseFirestore.instance.collection("city");
return FutureBuilder<DocumentSnapshot>(
future: cities
.doc(widget.titreCity)
.collection("citee")
.doc(widget.titreCitee)
.get(),
builder: (context, snapshot) {
if (snapshot.hasError) {
return Text("Something went wrong");
}
if (snapshot.hasData && !snapshot.data!.exists) {
return Text("Documents does not exist");
}
if (snapshot.connectionState == ConnectionState.done) {
var data = snapshot.data!.data() as Map<String, dynamic>;
if (data["Description"] == null) {
return Text("");
} else {
return ListView.separated(
itemBuilder: (context, index) {
return ListTile(
title: Text(
data["Description"][index]["Identite"],
textAlign: TextAlign.justify,
),
subtitle: Text(
data["Description"][index]["Role"],
textAlign: TextAlign.justify,
style: TextStyle(
decoration: TextDecoration.underline,
color: Colors.red),
),
leading: Icon(Icons.person),
trailing: IconButton(
onPressed: () {
setState(() {
DeleteDescription(
widget.titreCity, widget.titreCitee, index);
});
},
icon: Icon(Icons.delete_forever),
color: Colors.red[300],
));
},
separatorBuilder: (context, index) => Divider(),
itemCount: data["Description"].length);
}
}
return Text("Loading");
},
);
}
}
Merci encore pour le coup de main
解决方案
推荐阅读
- autodesk-forge - 如何根据设置的字体大小设置标记文本大小放大时标记大小太大?
- javascript - 部署快速应用程序时出现错误 R10(启动超时)
- php - 在 WooCommerce 订单编辑页面中仅显示一个的产品运输类别
- javascript - 是否通过信令服务器强制共享冰包
- python - MNIST 数据集的负数
- facebook-graph-api - localStorage,令牌是否必须字符串?
- verilog - 行为建模在 testbench.test 中不是有效的左值
- c - 如何在 C 中分别读取标志和文件名?(基于 WC 实用程序)
- r - 在R中将数字转换为日期格式?
- firebase - 如何访问 Document Snapshot 元素?