Firebase 删除颤振列表视图中的Firestore数据

Firebase 删除颤振列表视图中的Firestore数据,firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,我有一个常规的列表视图,可以从Firestore获取一些数据,下面是它的代码: body: StreamBuilder( stream: FirebaseFirestore.instance.collection('orders').snapshots(), builder: (context, snapshot) { if (!snapshot.hasData) return Center( child:

我有一个常规的列表视图,可以从Firestore获取一些数据,下面是它的代码:

body: StreamBuilder(
      stream: FirebaseFirestore.instance.collection('orders').snapshots(),
      builder: (context, snapshot) {
        if (!snapshot.hasData)
          return Center(
            child:
                CircularProgressIndicator(), 
          );
        return ListView.builder(
       
          itemCount: snapshot.data.docs.length,
          itemBuilder: (context, index) {
            DocumentSnapshot ds = snapshot.data.docs[index];
  
            return Text(ds['name']);
现在,如果我想在其中的某个位置创建一个删除按钮,我会这样做:

FirebaseFirestore.instance.collection('orders').doc('ID SHOULD BE HERE').delete();
我遇到的问题是如何在此处找到列表互动程序的文档ID,以便将其自动从数据库中删除?代码中的ID应该是一些命令,可以找到它的ID,如下面的屏幕截图所示:

DocumentSnapshot包含一个名为id的属性,该属性将为此快照返回文档的给定id。因此,您可以执行以下操作:

itemBuilder: (context, index) {
  DocumentSnapshot ds = snapshot.data.docs[index];
  print(ds.id);
  return Text(ds['name']);
FirebaseFirestore.instance.collection('orders').doc(ds.id).delete();
然后根据id将其删除,请执行以下操作:

itemBuilder: (context, index) {
  DocumentSnapshot ds = snapshot.data.docs[index];
  print(ds.id);
  return Text(ds['name']);
FirebaseFirestore.instance.collection('orders').doc(ds.id).delete();
DocumentSnapshot包含一个名为id的属性,该属性将为此快照返回文档的给定id。因此,您可以执行以下操作:

itemBuilder: (context, index) {
  DocumentSnapshot ds = snapshot.data.docs[index];
  print(ds.id);
  return Text(ds['name']);
FirebaseFirestore.instance.collection('orders').doc(ds.id).delete();
然后根据id将其删除,请执行以下操作:

itemBuilder: (context, index) {
  DocumentSnapshot ds = snapshot.data.docs[index];
  print(ds.id);
  return Text(ds['name']);
FirebaseFirestore.instance.collection('orders').doc(ds.id).delete();

通过在本地模型中保存文档中的参考id,并在所需的操作集上使用参考id

我提供了删除数据的实时示例

class Employee {
  Employee(this.employeeID, this.employeeName, this.branch, this.designation, this.location,
      this.salary,
      {this.reference});

  double employeeID;

  String employeeName;

  String designation;

  String branch;

  String location;

  double salary;

  DocumentReference reference;

  factory Employee.fromSnapshot(DocumentSnapshot snapshot) {
    Employee newEmployee = Employee.fromJson(snapshot.data());
    newEmployee.reference = snapshot.reference;
    return newEmployee;
  }

  factory Employee.fromJson(Map<String, dynamic> json) =>
      _employeeFromJson(json);

  Map<String, dynamic> toJson() => _employeeToJson(this);

  @override
  String toString() => 'employeeName ${employeeName}';
}

Employee _employeeFromJson(Map<String, dynamic> data) {
  return Employee(
    data['employeeID'],
    data['employeeName'],
    data['branch'],
    data['designation'],
    data['location'],
    data['salary'],
  );
}

Map<String, dynamic> _employeeToJson(Employee instance) {
  return {
    'employeeID' : instance.employeeID,
    'employeeName': instance.employeeName,
    'branch': instance.branch,
    'designation': instance.designation,
    'location': instance.location,
    'salary': instance.salary,
  };
}
存储库

class EmployeeRepository{
  List<Employee> employees = [];

  final CollectionReference collection =
      FirebaseFirestore.instance.collection('employees');

  Stream<QuerySnapshot> getStream() {
    return collection.snapshots();
  }
  
  Future<DocumentReference> add(Employee employee) {
    var documentReference = collection.add(employee.toJson());
    return documentReference;
  }

  update(Employee employee) async {
    collection.doc(employee.reference.id).update(employee.toJson());
  }


  delete(Employee employee) async {
    collection.doc(employee.reference.id).delete();
  }

  fromSnapShot(DocumentSnapshot snapshot) => Employee.fromSnapshot(snapshot);

  Future<void> buildData(AsyncSnapshot snapshot) async {
    if (snapshot.data.documents.length == 0) {
      employees = [];
    }

    employees = await snapshot.data.documents.map<Employee>((doc) {
      return Employee.fromSnapshot(doc);
    }).toList(growable: false);
  }
}
列表视图生成器

@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: Text('Employees List'),
    ),
    body: Column(children: [
      StreamBuilder<QuerySnapshot>(
          stream: employeeRepository.getStream(),
          builder: (context, snapShot) {
            if (!snapShot.hasData ||
                snapShot.hasError ||
                snapShot.connectionState == ConnectionState.waiting) {
              return Container(
                child: Center(child: CircularProgressIndicator()),
              );
            }
            
              employeeRepository.buildData(snapShot);
              return ListView.builder(
                itemBuilder: (context, index) {
                  final employee = employeeRepository.employees[index];
                  return ListTile(
                    title: Text(employee.employeeName),
                    onLongPress: () {
                      showDialog<AlertDialog>(
                          context: context,
                          builder: (context) {
                            return AlertDialog(
                              actions: [
                                FlatButton(
                                    onPressed: () {},
                                    child: Text('Edit')),
                                FlatButton(
                                    onPressed: () {
                                      setState(() {
                                        employeeRepository
                                            .delete(employee);
                                        Navigator.pop(context);
                                      });
                                    },
                                    child: Text('Delete')),
                              ],
                              content: Text(employee.employeeName),
                            );
                          });
                    },
                  );
                },
              );
          }),
    ]),
  );
}

通过在本地模型中保存文档中的参考id,并在所需的操作集上使用参考id

我提供了删除数据的实时示例

class Employee {
  Employee(this.employeeID, this.employeeName, this.branch, this.designation, this.location,
      this.salary,
      {this.reference});

  double employeeID;

  String employeeName;

  String designation;

  String branch;

  String location;

  double salary;

  DocumentReference reference;

  factory Employee.fromSnapshot(DocumentSnapshot snapshot) {
    Employee newEmployee = Employee.fromJson(snapshot.data());
    newEmployee.reference = snapshot.reference;
    return newEmployee;
  }

  factory Employee.fromJson(Map<String, dynamic> json) =>
      _employeeFromJson(json);

  Map<String, dynamic> toJson() => _employeeToJson(this);

  @override
  String toString() => 'employeeName ${employeeName}';
}

Employee _employeeFromJson(Map<String, dynamic> data) {
  return Employee(
    data['employeeID'],
    data['employeeName'],
    data['branch'],
    data['designation'],
    data['location'],
    data['salary'],
  );
}

Map<String, dynamic> _employeeToJson(Employee instance) {
  return {
    'employeeID' : instance.employeeID,
    'employeeName': instance.employeeName,
    'branch': instance.branch,
    'designation': instance.designation,
    'location': instance.location,
    'salary': instance.salary,
  };
}
存储库

class EmployeeRepository{
  List<Employee> employees = [];

  final CollectionReference collection =
      FirebaseFirestore.instance.collection('employees');

  Stream<QuerySnapshot> getStream() {
    return collection.snapshots();
  }
  
  Future<DocumentReference> add(Employee employee) {
    var documentReference = collection.add(employee.toJson());
    return documentReference;
  }

  update(Employee employee) async {
    collection.doc(employee.reference.id).update(employee.toJson());
  }


  delete(Employee employee) async {
    collection.doc(employee.reference.id).delete();
  }

  fromSnapShot(DocumentSnapshot snapshot) => Employee.fromSnapshot(snapshot);

  Future<void> buildData(AsyncSnapshot snapshot) async {
    if (snapshot.data.documents.length == 0) {
      employees = [];
    }

    employees = await snapshot.data.documents.map<Employee>((doc) {
      return Employee.fromSnapshot(doc);
    }).toList(growable: false);
  }
}
列表视图生成器

@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: Text('Employees List'),
    ),
    body: Column(children: [
      StreamBuilder<QuerySnapshot>(
          stream: employeeRepository.getStream(),
          builder: (context, snapShot) {
            if (!snapShot.hasData ||
                snapShot.hasError ||
                snapShot.connectionState == ConnectionState.waiting) {
              return Container(
                child: Center(child: CircularProgressIndicator()),
              );
            }
            
              employeeRepository.buildData(snapShot);
              return ListView.builder(
                itemBuilder: (context, index) {
                  final employee = employeeRepository.employees[index];
                  return ListTile(
                    title: Text(employee.employeeName),
                    onLongPress: () {
                      showDialog<AlertDialog>(
                          context: context,
                          builder: (context) {
                            return AlertDialog(
                              actions: [
                                FlatButton(
                                    onPressed: () {},
                                    child: Text('Edit')),
                                FlatButton(
                                    onPressed: () {
                                      setState(() {
                                        employeeRepository
                                            .delete(employee);
                                        Navigator.pop(context);
                                      });
                                    },
                                    child: Text('Delete')),
                              ],
                              content: Text(employee.employeeName),
                            );
                          });
                    },
                  );
                },
              );
          }),
    ]),
  );
}

那么我会像这样删除它吗?FirebaseFirestore.instance.collection'orders.doc'ds['id']'。删除;实例。集合“订单”。docds.id.delete;那么我会像这样删除它吗?FirebaseFirestore.instance.collection'orders.doc'ds['id']'。删除;实例。集合“订单”。docds.id.delete;