Где инициализировать переменную, которая необходима в initState () во флаттере? - PullRequest
0 голосов
/ 06 июня 2019

У меня есть следующий метод:

 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 пользователя.GetCalendarEventList () вызывается в initState(): потому что я хочу, чтобы календарь был заполнен маркерами

@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()) Так что это немного "глючит" ..Я думаю, что это связано с вызовом UID из Firebase.Где / Как я должен инициализировать переменную identifier с firebase uid?

1 Ответ

1 голос
/ 06 июня 2019

Что вы можете сделать, это позвонить по идентификатору, а затем, когда это будет сделано, вы можете позвонить по 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();
   });

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...