function
, переданный методу listen
, будет выполняться всякий раз, когда значение обновляется, но остальная часть кода выполняется только один раз. Итак, если вы хотите, чтобы Text
в контейнере обновлялось каждый раз при обновлении значения - используйте StreamBuilder
.
@override
Widget build(BuildContext context) {
return Container(
child: StreamBuilder(
stream: Firestore.instance.collection("dados_app").snapshots(),
builder: (context, snapshot) {
if(!snapshot.hasData) {
return Text('Loading...');
}
// update _totalGeradoApp
var totalGeradoApp;
var docs = (snapshot.data as QuerySnapshot).documents;
for(var item in docs) {
var dados = item.data;
totalGeradoApp = dados["total_gerado_app"];
}
_totalGeradoApp = totalGeradoApp;
// return Text Widget with updated text
return Text("$_totalGeradoApp");
),
);
}
Итак, в вашем коде listen
er добавляется к stream
, и сразу же выполняется следующий код, где Container
создается с _totalGeradoApp
, которое изначально было "0"
. Каждый раз при обновлении значения _totalGeradoApp
обновляется, а текст в Container
- нет. При использовании StreamBuilder
виджет Text
также обновляется всякий раз, когда доступно новое значение.