Navigator.pu sh () иногда не выполняется при передаче снимков хранилища в качестве параметров - PullRequest
0 голосов
/ 12 июля 2020

Я пытаюсь сделать чат с помощью firestore, а экран чата иногда не открывался. Я передал поток как параметр и использовал построитель потоков в chatScreen. Я получил bad state error: cannot add new events after calling close, когда я попытался инициализировать поток в самом виджете.

Не знаю, где я ошибаюсь.

Вот мой код:

ListView.builder(
  itemCount: snapshot.data.documents.length,
  itemBuilder: (context, pos){
  var name =  snapshot.data.documents[pos]["Name"];
  var email = snapshot.data.documents[pos].documentID;
  Stream snappy = Firestore.instance.collection("chat-server")
                           .document(email).collection("messages").orderBy("time").snapshots();
  return GestureDetector(
           onTap: (){
           Navigator.push(context,
           new MaterialPageRoute(builder: (context) =>ChatScreen(name,email,snappy)));
                    },
           child: ...
           ),
  }
)

А мой чат-экран выглядит так:

Widget build(BuildContext context) {

    Firestore.instance.collection("chat-server")
                .document(widget.email)
                .updateData(....);
    return StreamBuilder(
             stream: widget.test,
             builder: (context, snapshot) {
               if(!snapshot.hasData || snapshot.hasError || snapshot.connectionState == ConnectionState.waiting){
                  return Expanded(
                           child: Center(
                             child: Container(
                               width: ScreenUtil().setWidth(20),
                               height: ScreenUtil().setHeight(20),
                               child: CircularProgressIndicator()
                             ),
                           )
                  );
                } else 
                    return MyWidget();
              }
    );   

1 Ответ

0 голосов
/ 15 июля 2020

Наконец-то получил, сломав над ним голову. Оказывается, gestureDetector вообще не регистрировал касания. Может быть, потому что метод onTap выполнялся слишком долго из-за задержки, вызванной использованием firebase. Изменил параметры на экране чата, предварительно инициализировал значения и заменил детектор жестов на плоскую кнопку. Теперь работает нормально.

...