我是初學者,試圖用顫振學習 getx,這是我的控制器
class QuestionAnswers_Getx extends GetxController {
final _questionandanswers = <QA>[].obs;
List<QA> get questionandanswers => _questionandanswers;
@override
void onInit() {
super.onInit();
getall_questionandanswers();
Future.delayed(Duration.zero,()=>listen_firebase());
}
getall_questionandanswers() async {
await qaref.get().then((QuerySnapshot query){
_questionandanswers.addAll(query.docs.map((DocumentSnapshot doc) => doc_to_obj(doc)).toList());
});
}
listen_firebase() async {
await qaref.snapshots().listen((QuerySnapshot querySnapshot) {
querySnapshot.docChanges.forEach((DocumentChange doc) {
if(doc.type==DocumentChangeType.added){
_questionandanswers.add(doc_to_obj(doc.doc));
}else if(doc.type==DocumentChangeType.modified){
_questionandanswers[doc.newIndex] = doc_to_obj(doc.doc);
// print(_questionandanswers[doc.newIndex]);
}else if(doc.type==DocumentChangeType.removed){
print("getx--------------removed line");
}
});
});
}
}
這是我的 Obx 小部件,我想在其中使用控制器的資料。我在前幾頁中使用過 get.put 并在此處找到控制器
final qa_controller = Get.find<QuestionAnswers_Getx>();
Obx(() {
RxList<QA> myqa = <QA>[].obs;
myqa.addAll( qa_controller.questionandanswers.where((element)=>element.user_name=="Jaswant patil").toList() );
//here if i use print(myqa[0].answer) then it gives me old as well as new data for answer parameter
return ListView.builder(
scrollDirection: Axis.vertical,
shrinkWrap: true,
physics: ScrollPhysics(),
itemCount: myqa.length,
itemBuilder: (context,index){
return QAwidget(
answer: myqa[index].answer,
comment_count: myqa[index].comment_count,
upvotes: myqa[index].upvotes,
user_image_url:
"https://cdn.pixabay.com/photo/2020/02/24/06/33/crescent-4875339__340.jpg",
user_name: myqa[index].user_name,
user_occupation: myqa[index].user_occupation,
post_image_url: myqa[index].post_image_url,
category: myqa[index].category,
hasimage: myqa[index].hasimage,
question: myqa[index].question);
},
上面的 ListView 在 Ui 中正確顯示初始資料,但即使正在接收更新的資料,當資料更改時也不會顯示更新的 UI。但是當我交換頁面并再次回傳此頁面時,會顯示更新的資料,我認為需要在資料更改時呼叫 setState 但不知道把它放在哪里。
感謝您的回答,請原諒上述問題中存在的任何語法錯誤
uj5u.com熱心網友回復:
首先,嘗試使用 variablename.value.addAll 是行不通的你可以隨時重繪 變數,observables 有一個方法呼叫 refresh() 我認為
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/395310.html
上一篇:使用listviewbuilder時SliverAppBar不會折疊
下一篇:無法從方法“getUsers”回傳“StreamSubscription<DatabaseEvent>”型別的值,因為它的回傳型別為“Stream<List<User>&
