簡體   English   中英

如何獲取 firebase 集合的文檔快照?

[英]How can I get a document snapshot of firebase collection?

我試圖讓用戶從 firebase 集合中搜索主題標簽。 但我有點掙扎這是我如何嘗試獲取文檔的快照

class Videos {
  final String categorie;
  final String commentcount;
  final String hashtag1;
  final String hashtag2;
  final String hashtag3;
  final String likes;
  final String previewimage;
   final String profilepic;
  final String sharecount;
  final String uid;
  final String username;
  final String videourl;

  Videos({this.commentcount, this.hashtag1, this.hashtag2, this.hashtag3, this.likes, this.previewimage, this.profilepic, this.sharecount, this.uid, this.videourl, this.categorie, this.username});
}
var  videoscollection =
      FirebaseFirestore.instance.collection('videos');

  Videos videosfromsnapshot(DocumentSnapshot snapshot){
    return Videos(
      categorie:snapshot.data()['categorie'],
      commentcount:snapshot.data()['commentcount'],
         hashtag1:snapshot.data()['hashtag1'],
  hashtag2:snapshot.data()['hashtag2'],
   hashtag3:snapshot.data()['hashtag3'],
   likes:snapshot.data()['likes'],
      previewimage:snapshot.data()['previewimage'],
      profilepic:snapshot.data()['profilepic'],
       sharecount:snapshot.data()['sharecount'],
          uid:snapshot.data()['uid'],
      username:snapshot.data()['username'],
   videourl:snapshot.data()['videourl'],

    );
  }

 Stream<Videos> get  provideDocumentFieldStream {

    return videoscollection.doc().snapshots().map(videosfromsnapshot);
       
}

然后我試圖在這里使用它

 searchResults() {
    var showResults = [];
    if (widget.searchinginput.text != "") {
      for (var tripsnapshot in _allResults) {
        var title = DatbaseService.instance
            .videosfromsnapshot(tripsnapshot)
            .hashtag1
            .toLowerCase();
        print(title);
        var title2 = DatbaseService.instance
            .videosfromsnapshot(tripsnapshot)
            .hashtag3
            .toLowerCase();
        print(title);
        var title3 = DatbaseService.instance
            .videosfromsnapshot(tripsnapshot)
            .hashtag2
            .toLowerCase();
        print(title);
        if (title.contains(widget.searchinginput.text.toLowerCase()) ||
            title2.contains(widget.searchinginput.text.toLowerCase()) ||
            title3.contains(widget.searchinginput.text.toLowerCase())) {
          setState(() {
            nosuerfound = true;
          });
          showResults.add(tripsnapshot);
        }
      }
    } else {
      setState(() {
        nosuerfound = true;
      });
      showResults = List.from(_allResults);
    }
    setState(() {
      _resultsList = showResults;
    });
  }

  getusers() async {
    var firestore = FirebaseFirestore.instance;
    QuerySnapshot qn = await firestore.collection('videos').get();

    setState(() {
      _allResults = qn.docs;
    });
    searchResults();
    return "Complete";
  }

所以我嘗試的是用戶搜索主題標簽,每個視頻都有 3 個主題標簽,當用戶輸入一個主題標簽時,我想顯示視頻的 3 個主題標簽,但它不起作用我認為文檔快照應該有問題。 這是我的 firebase

在此處輸入圖像描述

這是它拋出的地方

class Openmyprofil extends StatefulWidget {
  final TextEditingController searchinginput;

  const Openmyprofil({Key key, this.searchinginput}) : super(key: key);

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

class _OpenmyprofilState extends State<Openmyprofil> {
  List _allResults = [];
  List _resultsList = [];

  Future resultsLoaded;
  bool nosuerfound = false;
  var titles;
  @override
  void initState() {
    super.initState();
    widget.searchinginput.addListener(_onsearchChanged);
     widget.searchinginput.text;
    setState(() {
      nosuerfound = true;
    });
  }

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    resultsLoaded = getusers();
  }

  _onsearchChanged() {
   
    setState(() {
      nosuerfound = false;
    });
    searchResults();
  }

  

  searchResults() {
    var showResults = [];
    if (widget.searchinginput.text != "") {
      for (var tripsnapshot in _allResults) {
        titles = tripsnapshot;
        var title = DatbaseService.instance
            .userDataFromSnapshot(tripsnapshot)
            .username
            .toLowerCase();
        if (title.contains(widget.searchinginput.text.toLowerCase())) {
          setState(() {
            nosuerfound = true;
          });
          showResults.add(tripsnapshot);
          print(tripsnapshot);
        }
      }
    } else {
      setState(() {
        nosuerfound = true;
      });
      showResults = List.from(_allResults);
    }
    setState(() {
      _resultsList = showResults;
    });
  }

  getusers() async {
    var firestore = FirebaseFirestore.instance;
    QuerySnapshot qn = await firestore.collection('meinprofilsettings').get();
    setState(() {
      _allResults = qn.docs;
    });
    searchResults();
    return "Complete";
  }

根據您的評論,首先要做的是更改:

commentcount:snapshot.data()['commentcount'],

對此:

commentcount:snapshot.data()['commentcount'].toString(),

這導致您的錯誤int is not a subtype of string ,因為 firebase 中的評論計數是基於您發布的圖片的int 消除此錯誤,然后我們繼續進行,如果其他一切都正確解決,它甚至可以解決您的問題。

shareCount做同樣的事情

sharecount:snapshot.data()['sharecount'].toString()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM