清空Flutter中的显示,但将来具有正确的值

问题描述 投票:0回答:1

我在Flutter中很陌生,我无法解决此问题。我有一个非常简单的应用程序。它只是用google登录,在Firebase中创建了一个用户,该用户有一个计数器和一个按钮,此按钮增加了计数器(int _user.count ++)。

然后我的问题:在下一个窗口中登录后,直到单击“加号”按钮,计数变量才可见。该变量是正确的,并且使用fireStore的查询效果很好,我得到了该变量,但是如果我不单击按钮,则会在变量“ null”的位置得到一个显示。

非常感谢您的帮助和时间,我真的希望您能为我提供帮助。也许这是一个小问题,我没有找到有关它的信息,但是当一些人开始学习时就会发生。

MyDAO:将来使用方法时,应将查询发送到FireStore。

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:gauth/user_model.dart';
import 'package:rxdart/rxdart.dart';

final UserDAO userDAO = UserDAO();

class UserDAO {


  final Firestore _db = Firestore.instance;
  PublishSubject loading;
  Observable<Future<QuerySnapshot>> profile;

  void updateData(UserModel user) async {
    DocumentReference documentReference =
        _db.collection("users").document(user.uid);
    return documentReference.setData({
      "uid": user.uid,
      "userName": user.name,
      "email": user.email,
      "photoUrl": user.photoUrl,
      "count": user.count,
      "lastIn": DateTime.now()
    }, merge: true);
  }

  Future<QuerySnapshot>  readDateFutur(String email) async {
    // loading.add(true);
    QuerySnapshot querySnapshot = await (_db
        .collection("users")
        .where("email", isEqualTo: email)
        .getDocuments());
    // loading.add(false);
    return querySnapshot;
  }

} 

在方法“ void initState()”中,我拥有有效的变量_user.couner。

class PlusCounter extends StatefulWidget {
  UserModel user;
  PlusCounter(this.user);
  @override
  _PlusCounterState createState() => _PlusCounterState();
}

class _PlusCounterState extends State<PlusCounter> {
  UserModel _user;
  PublishSubject loading;
  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    setState(() {
      _user = widget.user;
      //loading.add(false);

      userDAO.readDateFutur(_user.email).then((QuerySnapshot docs) {
        if (docs.documents.isNotEmpty) {
          print("::::::::::NOESTOY VACIO:::::::::::::::::::::");
          print(docs.documents.last.data["count"]);
          if (docs.documents.last.data["count"] != null) {
            _user.count = docs.documents.last.data["count"];
          } else {
            _user.count = 0;
          }
        } else {
          print(":::::::::::ESTOY VACIO:::::::::::::::::");
          _user.count = 0;
        }
      });

    });
  }

  void _plus() {
    setState(() {
      _user.count++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        Text("Cuantas veces te has \n lavado las manos:"),
        Text("${_user.count}"),
        MaterialButton(
          onPressed: () {
            _plus();
          },
          child: Text("Plus"),
          textColor: Colors.white,
          color: Colors.blue,
        ),
        MaterialButton(
          onPressed: () => userDAO.updateData(_user),
          child: Text("Guardar"),
          textColor: Colors.white,
          color: Colors.blue,
        ),
      ],
    );
  }
}

WelcomePage代码是这个。


class userDataWelcome extends StatelessWidget {
  UserModel _userModel;

  userDataWelcome(this._userModel);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Welcome"),
      ),
      body: Center(
        child: Column(
          children: <Widget>[
            Center(
              child: Container(
                height: 100.0,
                width: 100.0,
                decoration: BoxDecoration(
                  shape: BoxShape.circle,
                  image: DecorationImage(
                    image: NetworkImage(_userModel.photoUrl),
                  ),
                ),
              ),
            ),
            Text("${_userModel.name}"),
            PlusCounter(_userModel),
            MaterialButton(
              onPressed: () => authService.SingOut(),
              child: Text("Logout"),
              textColor: Colors.white,
              color: Colors.deepOrange,
            )
          ],
        ),
      ),
    );
  }
}

然后,我真的不需要在看到_user.count的值之前需要单击“加号”按钮,因为否则我将看到null。我想再次感谢您的帮助。

firebase flutter google-cloud-firestore
1个回答
0
投票

尝试像这样在initStat()_user.count = docs.documents.last.data["count"];setState((){});中换行

setState((){
_user.count = docs.documents.last.data["count"];
)};
© www.soinside.com 2019 - 2024. All rights reserved.