【发布时间】:2021-09-25 15:56:56
【问题描述】:
我有两个小部件:Home 和 EntryList。在Home 小部件中,我可以更改始终传递给EntryList 的值date,然后应该将其更新为Stream 小部件。
但是,当我更改 Date 值时,EntryList 小部件仍然显示初始日期的项目,而不是这个新日期
Home
class HomePage extends StatefulWidget {
const HomePage();
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
DateTime date = new DateTime.now();
void changeDate(int num) {
var newDate =
new DateTime(this.date.year, this.date.month, this.date.day + num);
setState(() {
date = newDate;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
// Change Date and display Date here
Row(
children: [
ElevatedButton(
onPressed: () {
changeDate(-1);
}),
Text(date.toString()),
ElevatedButton(
onPressed: () {
changeDate(1);
}),
]
),
// Our main child component EntryList and passing in date
Row(children: [EntryList(this.date)]),
]
)
)
}
}
EntryList
class EntryList extends StatefulWidget {
final DateTime date;
const EntryList(this.date);
@override
_EntryListState createState() => _EntryListState();
}
class _EntryListState extends State<EntriesList> {
Stream<QuerySnapshot> _entryStream; // my stream
void getEntries(snapshot) {
// code to get items - this works just fine
}
@override
// This is where we use the props in this widget. Not updating after changing parent date value
void initState() {
_entryStream = FirebaseFirestore.instance
.collection(widget.date)
.snapshots();
super.initState();
}
Widget build(BuildContext context) {
return (StreamBuilder(
stream: _entryStream,
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.hasError) {
return Text("Something went wrong");
}
if (snapshot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator();
}
return new ListView(
children: getEntries(snapshot),
);,
},
));
}
}
谁能告诉我为什么不更新?我认为这可能与使用 void dispose 有关,但我不确定如何在这种情况下使用它。
相关(但不是我的解决方案)链接: How to Set/Update State of StatefulWidget from other StatefulWidget in Flutter?
【问题讨论】:
标签: firebase flutter dart google-cloud-firestore flutter-streambuilder