首页 > 解决方案 > 由于异步功能而更新我的 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

标签: google-cloud-firestore

解决方案


推荐阅读