在哪里初始化initState()中所需的变量?

时间:2019-06-06 15:41:54

标签: firebase flutter

我有以下方法:

 getCalendarEventList() async {
    print('here we go agsain');
     await Firestore.instance.collection('availableDates').where('bandId', isEqualTo: identifier).snapshots().listen(
            (data) => data.documents.forEach((doc) => _markedDateMap.add(
            doc['availableDates'].toDate(),
            Event(
                date:doc['availableDates'].toDate(),
                title: 'hello',
                icon: _presentIcon(doc['availableDates'].toDate().day.toString())))));
    setState(() {});
  }

firebase查询包含isEqualTo: identifier作为条件。 Identifier是一个String,实际上是用户的Firebase uid。在initState()中调用了getCalendarEventList():因为我希望在calendar中填充标记

@override
  void initState() {
    super.initState();
    getCalendarEventList();
  }

我有一个方法:得到firebase uid

Future<String> inputData() async {
    final FirebaseUser user = await FirebaseAuth.instance.currentUser();
    final String uid = user.uid.toString();
    return uid;
  }

我已经将identifier = await inputData();放在getCalendarEventList()中,并将9/10倍的标记填充到日历中。(来自initState())所以有点“笨拙” ..我认为这与从Firebase调用uid有关。我应该在哪里/如何用identifier初始化变量firebase uid

1 个答案:

答案 0 :(得分:1)

您可以做的是调用标识符,然后完成该操作,然后可以调用getCalenderEvents()

   await FirebaseAuth.instance.currentUser().then((user) {
     Firestore.instance.collection('availableDates').where('bandId', isEqualTo: user.uid).snapshots().listen(
            (data) => data.documents.forEach((doc) => _markedDateMap.add(
            doc['availableDates'].toDate(),
            Event(
                date:doc['availableDates'].toDate(),
                title: 'hello',
                icon: _presentIcon(doc['availableDates'].toDate().day.toString())))));
    setState(() {});
    }).catchError((onError){
    handleError();
   });

   await FirebaseAuth.instance.currentUser().then((user) {
    setState(() {
    identifier = user.uid;
   });
    getCalenderEvents();
    }).catchError((onError){
    handleError();
   });