Flutter запись текста в FirebaseFirestore и отображение новой записи при смене состояния
Что не так с кодом? данные записываются в Firebase, но не отображается новая запись после добавления, приходится возвращаться на предыдущее окно и запускать View заново, после этого новая запись отображается.
Функция добавления записи firebase_cloud_storage.dart
class FirebaseCloudStorage {
final travel = FirebaseFirestore.instance.collection('travel');
Future<void> addNewTravelday({
required String travelId,
required String textDay,
}) async {
return travel.doc(travelId as String).update({traveldayFieldName: FieldValue.arrayUnion([textDay])});
}
}
Файл travel_page.dart в котором отображается ListView.builder и находится TextField с кнопкой добавления
class TravelPageView extends StatefulWidget {
TravelPageView(
{Key? key,
required this.travelByIdView,
required this.stringTravelByIdModel})
: super(key: key);
final CloudTravel travelByIdView;
final String stringTravelByIdModel;
final firebaseCloudStorage = FirebaseCloudStorage();
@override
State<TravelPageView> createState() => _TravelPageViewState();
}
class _TravelPageViewState extends State<TravelPageView> {
var newDayText;
@override
void initState() {
super.initState();
newDayText;
widget.travelByIdView.travelday; // List<dynamic>
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('AppBar'),
),
body: SingleChildScrollView(
child: Column(
children: [
Container(
height: 500,
child: ListView.builder(
padding: EdgeInsets.symmetric(vertical: 10),
physics: NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemCount: widget.travelByIdView.travelday.length,
itemBuilder: (BuildContext context, int index) {
return Container(
child: Text(
"${widget.travelByIdView.travelday.elementAt(index)}")
);
},
),
),
Column(
children: [
TextField(
onChanged: (String value) {
newDayText = value;
},
),
SizedBox(
width: double.infinity,
child: ElevatedButton(
onPressed: () {
setState(() {
widget.firebaseCloudStorage.addNewTravelday(
travelId: widget.stringTravelByIdModel,
textDay: newDayText);
});
},
child: Text('Добавить запись'),
),
),
],
),
],
),
),
);
}
}
Всё более менее работает но при нажатии на ElevatedButton, вызывается setState, в котором отрабатывает функция записи текста в базу, сам стейт не обновляется, новая запись не отображается в ListView.