簡體   English   中英

從 flutter 中從 firestore 獲取的列表中刪除元素

[英]Deleting an element from a list fetched form firestore in flutter

應用在刪除元素后顯示片刻錯誤,錯誤與如果小部件樹仍然存在的元素有關。 從 firebase 中刪除數據時,我嘗試調用另一個屏幕,但沒有幫助

這是我的數據在 firestore 中的結構圖片 1 ,
圖 2

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase/Screens/loading.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';

class serieslist extends StatefulWidget {
  const serieslist({Key? key}) : super(key: key);
  @override
  State<serieslist> createState() => _serieslistState();
}
class _serieslistState extends State<serieslist> {
  @override
  void initState(){
    super.initState();
    initialize();
  }
  var len = 0;
  void initialize() async {
    DocumentSnapshot snap = await FirebaseFirestore.instance.collection('Users')
        .doc(FirebaseAuth.instance.currentUser!.uid).collection('series').doc(FirebaseAuth.instance.currentUser!.uid)
        .get();
    setState(() {
      len = snap['Series'].length;
    });
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SingleChildScrollView(
        child: Column(
          children: [
            StreamBuilder(
                stream: FirebaseFirestore.instance.collection("Users").doc(FirebaseAuth.instance.currentUser!.uid).collection('series').snapshots(),
                builder: ( BuildContext context , snapshot) {
                  if (snapshot.data == null) {
                    return Center(
                      child: CircularProgressIndicator(),
                    );
                  }
                  return SizedBox(
                    height: 800,
                    child: ListView.builder(
                        itemCount: len,
                        itemBuilder: (context,index){
                          DocumentSnapshot data = snapshot.data!.docs[0];
                          final item = data['Series'][index]['series name'] ;
                          return Dismissible(
                            key: Key(item),
                            onDismissed: (direction) {
                              Navigator.push(
                                context,
                                MaterialPageRoute(builder: (context) =>  loading()),
                              );
                              setState(() {
                                  FirebaseFirestore.instance.collection('Users').doc(FirebaseAuth.instance.currentUser!.uid).collection("series").doc(FirebaseAuth.instance.currentUser!.uid).update({
                                    "Series" : FieldValue.arrayRemove([{
                                      "series name" : data['Series'][index]['series name']
                                    }])
                                  }).then((value) {initialize();
                                  Navigator.pop(context);
                                  });
                              }
                              );
                              ScaffoldMessenger.of(context)
                                  .showSnackBar(SnackBar(content: Text('$item dismissed')));
                            },
                            child: ListTile(
                              title: Text(item),
                            ),
                          );
                        }),
                  );
                }
            )
          ],
        ),
      ),
    );
  }
}

還有 add.remove() 方法,並為可關閉小部件提供唯一鍵。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM