Я новичок ie, чтобы трепетать и пытаюсь реализовать приложение, используя базу данных Firebase в реальном времени и StreamBuilder для постоянного отображения данных, обновляющих значения, показанные на экране телефона. Моя проблема в том, что по какой-то причине поток вернет событие данных (snap.hasData = true) только в первый раз, когда я загружаю и запускаю основную часть в emultor, если я перезагружаю сценарий в горячем режиме, мой StreamBuilder
не будет build and snap.hasData == false. Я считаю, что код не так, потому что, как я уже говорил, соединение через поток инициализируется при первой установке и запуске приложения в эмуляторе
Вот мой код, initSate и сборка этого экрана.
@override
void initState() {
super.initState();
databaseReference
.child('growboxs')
.orderByChild('access')
.equalTo(widget.user)
.once()
.then( (DataSnapshot snapshot) {
String path2child = snapshot.value.toString();
path2child =
'growboxs/' + path2child.substring(1, 18) + '/dashboard';
reference2Dashboard = FirebaseDatabase.instance.reference().child(path2child);
progressController = AnimationController(
vsync: this, duration: Duration(milliseconds: 2000)); //5s
isLoading = true;
});
}
@override
Widget build(BuildContext context) {
return isLoading ?
StreamBuilder(
stream: reference2Dashboard.onValue,
builder: (context, snap) {
if (!snap.hasData) {
return Center(child: CircularProgressIndicator());
}
if (snap.hasData && !snap.hasError &&
snap.data.snapshot.value != null) {
DataSnapshot snapshot = snap.data.snapshot;
doble temperature = snapshot.value['Temperature'].toDouble();
/* keeps on getting values and updating Widget*/
.
.
.
) : Center(child: CircularProgressIndicator());//StreamBuilder
}//build