【问题标题】:Displaying Single Document from Firebase从 Firebase 显示单个文档
【发布时间】:2020-08-02 21:27:55
【问题描述】:

我在从我的 firebase 获取数据时遇到问题。我有数据但不知道如何显示。

这是我的数据库:

这是我的代码:

class Home extends StatefulWidget {

  final dynamic userUid, nicked;
  Home({this.userUid, this.nicked});



  @override
 _HomeState createState() => _HomeState();
}




class _HomeState extends State<Home> {



  final int delayedAmount = 500;
  //final AuthService _auth = AuthService();



  void getNick() {
  //get nickname of this User
  final CollectionReference userNickname  = Firestore.instance.collection('NickNames of Users');
  var documentNick = userNickname.document(widget.userUid);
  documentNick.get()
  .then((DocumentSnapshot ds){
      var nick = ds.data['MyNickName'];
      print(nick);
      var nicked = Home(nicked: nick,);
  });
}

  @override
  Widget build(BuildContext context) {
    return Container(
          child: Scaffold(
            backgroundColor: Colors.greenAccent[400],

      body:  SingleChildScrollView(
        physics: ScrollPhysics(),
          child: Column(
          children: <Widget>[
            Container(
              margin: EdgeInsets.fromLTRB( 0 , 50, 0, 0),
              child: Column(
                children: <Widget>[
                  Align(
                    alignment: Alignment.topLeft,
                                  child: DelayedAnimation(
                   child:  
                    Text(
                             widget.nicked,//This i where the firebase data nickName code will go

                     textScaleFactor : 1,
                    style: TextStyle(
                      fontFamily: 'Comic',
                      fontWeight: FontWeight.bold,
                      color: Colors.white,
                      fontSize: 30,

                    ),
                    ),

所以我只是不知道如何从 firebase 获取单个文档并显示它。 所以这就是我获取 userUid 的方式...

  import 'package:firebase_auth/firebase_auth.dart';
//import 'package:flutter/cupertino.dart';
import 'package:fruithero/model/user.dart';
import 'package:fruithero/services/database.dart';
import 'package:fruithero/pages/myHome.dart';

class AuthService {
  final dynamic nickNamesofUser;
  AuthService({this.nickNamesofUser});

  final FirebaseAuth _auth = FirebaseAuth.instance;

  void homeTransporter(uid){
   dynamic homeTransport = uid;
   Home(userUid: homeTransport,);
  }

  // create user obj based on firebase user
  User _userFromFirebaseUser(FirebaseUser user) {
    return user != null ? User(uid: user.uid) : null;
  }

  // auth change user stream
  Stream<User> get user {
    return _auth.onAuthStateChanged
      //.map((FirebaseUser user) => _userFromFirebaseUser(user));
      .map(_userFromFirebaseUser);
  }

  // sign in anon
  Future signInAnon() async {
    try {
      AuthResult result = await _auth.signInAnonymously();
      FirebaseUser user = result.user;
      return _userFromFirebaseUser(user);
    } catch (e) {
      print(e.toString());
      return null;
    }
  }

  // sign in with email and password
  Future signInWithEmailAndPassword(String email, String password) async {
    try {
      AuthResult result = await _auth.signInWithEmailAndPassword(email: email, password: password);
      FirebaseUser user = result.user;
      return user;
    } catch (error) {
      print(error.toString());
      return null;
    } 
  }

  // register with email and password
  Future registerWithEmailAndPassword(String email, String password) async {
    try {
      AuthResult result = await _auth.createUserWithEmailAndPassword(email: email, password: password);
      FirebaseUser user = result.user;
      //storing user uid
      homeTransporter(user.uid);
      //create new document for user with the uid
      await DataBaseServices(uid: user.uid).createDocumentWithUid(nickNamesofUser);
      //await DatabaseService(uid: user.uid).updateUserData(nickNamesofUser);
      return _userFromFirebaseUser(user);
    } catch (error) {
      return null;
    } 
  }

  // sign out
  Future signOut() async {
    try {
      return await _auth.signOut();
    } catch (error) {
      print(error.toString());
      return null;
    }
  }

}

我希望这会有所帮助。先生................................................. ..................................................... ..................................................... .........

【问题讨论】:

  • 你想在哪里显示?
  • @SandeepSharma 我想在里面显示 widget.nicked 的文本小部件中显示它。那里有评论
  • 什么作用? print(nick);
  • 它什么都不做

标签: database flutter google-cloud-firestore


【解决方案1】:
   String nick,userID;

 void initState() {
super.initState();
userID = widget.uid;
getNick();
print(userID);
}

 void getNick() {
  var users;
  //get nickname of this User
 Firestore.instance.collection('NickNames of Users').document(userID).get().then((data){
    setState(() {
      users = data;
      nick = users['MyNickName'];
      print(nick); 
    });
  });
}

【讨论】:

  • 好的,谢谢.. 请你告诉我你把它放在像我的例子一样的有状态小部件中,也请把值放在文本小部件中.. 谢谢
  • 你可以使用Text(nick)
  • 它给出了一个错误:它说一个字符串最应该提供给文本小部件而不是空值
  • 先生,它说了同样的话
  • I/flutter (7263):引发了另一个异常:必须向 Text 小部件提供非空字符串。 I/flutter (7263): 另一个异常被抛出:必须向 Text 小部件提供非空字符串。
猜你喜欢
  • 2020-09-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-02
  • 2021-11-12
  • 1970-01-01
  • 2018-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多