Вы можете сохранить результат метода _onDaySelected
в переменной вашего класса состояний:
class _RoosterTestState extends State<RoosterTest>
with TickerProviderStateMixin {
String stringOfSelectedDay='defaultValue';
[...]
Не забудьте при первом запуске приложения предоставить stringOfSelectedDay
сзначение по умолчанию. Что должен вернуть ваш MessagesStream
, когда _onDaySelected еще не было вызвано? Может быть, сегодняшняя дата?
Итак, в методе вы можете сохранить его следующим образом:
void _onDaySelected(DateTime day, List events) {
String currentDay = formatter.format(day).toString();
setState(() {
stringOfSelectedDay = currentDay;
});
print('$currentDay');
}
Вы должны использовать setState, чтобы перестроить MessagesStream после того, как день изменился.
После этого вы должны сделать, чтобы ваш класс MessagesStream имел окончательную переменную, чтобы он строил поток на его основе, и конструктор, который дает ему его значение:
class MessagesStream extends StatelessWidget {
final String date;
MessagesStream(this.date); //Constructor
@override
Widget build(BuildContext context) {
return StreamBuilder<QuerySnapshot>(
stream: _firestore
.collection('days')
.document(date) // Using the final variable here
.collection('hours')
.snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData)
return CircularProgressIndicator(
backgroundColor: Colors.lightBlueAccent,
);
return _buildList(context, snapshot.data.documents);
},
);
}
Поскольку вы использовали setState
, этоВиджет будет отражать различные вызовы метода _onDaySelected
.
Наконец, когда вы вызываете свой Виджет для создания, передайте переменную соответственно:
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
mainAxisSize: MainAxisSize.max,
children: <Widget>[
_buildTableCalendar(),
const SizedBox(
height: 8.0,
),
MessagesStream(stringOfSelectedDay), //Using the new constructor you've made.
],
),
);
}