[英]Deleting an element from a list fetched form firestore in flutter
應用在刪除元素后顯示片刻錯誤,錯誤與如果小部件樹仍然存在的元素有關。 從 firebase 中刪除數據時,我嘗試調用另一個屏幕,但沒有幫助
這是我的數據在 firestore 中的結構 ,
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.