gpt4 book ai didi

flutter - 为什么我的变量没有从Firestore接收正确的值?

转载 作者:行者123 更新时间:2023-12-03 04:20:05 25 4
gpt4 key购买 nike

我正在使用Flutter。我只需要从Firestore中获取一个值,然后为所有用户更新它即可。因此,我使用listen来保持值的更新。我收到一个变量中的值,但不能在listen方法之外使用它。

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

class PaginaGraficos extends StatefulWidget {
@override
_PaginaGraficosState createState() => _PaginaGraficosState();
}

class _PaginaGraficosState extends State<PaginaGraficos> {

@override
Widget build(BuildContext context) {

String _totalGeradoApp = "0";

_getTotalGeradoApp () {
Firestore.instance.collection("dados_app").snapshots().listen(
( snapshot ){
var totalGeradoApp;
for( DocumentSnapshot item in snapshot.documents ){
var dados = item.data;
totalGeradoApp = dados["total_gerado_app"];
print("totalGeradoApp: $totalGeradoApp");
}
_totalGeradoApp = totalGeradoApp;
}
);
}

_getTotalGeradoApp();
print("_totalGeradoApp: $_totalGeradoApp");

return Container(
child: Text("$_totalGeradoApp"),
);
}
}
有些名字是葡萄牙语的,因为我是Brasilian,但是代码仍然可以理解。
我是Dart的新手,所以请告诉我我是否在做蠢事。

最佳答案

每当值更新时,传递给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小部件。

关于flutter - 为什么我的变量没有从Firestore接收正确的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63200658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com