Как я могу минимизировать потребление ОЗУ в моем флаттере с помощью firebase firestore? - PullRequest
0 голосов
/ 25 марта 2020

У меня есть приложение, созданное с помощью Flutter, которое подключается к Firebase Firestore и читает значительное количество документов. Каждый раз, когда пользователь перемещается между представлениями приложения и возвращается к представлению, в котором отображаются эти документы, использование пространства ОЗУ увеличивается. В моем коде есть StreamBuilder, который вызывает коллекцию каждый раз при загрузке представления. Мой вопрос: Есть ли способ минимизировать использование ОЗУ при каждой загрузке этого представления? , поскольку это приложение аварийно завершает работу при достижении своего предела в объеме ОЗУ на устройствах с небольшим объемом ОЗУ. Пожалуйста, мне нужна помощь с этим! Это мой код StreamBuilder:

StreamBuilder<QuerySnapshot>(
    stream: this.rolUsuario != 'Digitador'
        ? this
            .fs
            .collection('Encuestas')
            .where('OrganizacionPerteneciente',
                isEqualTo: this.organizacionPerteneciente)
            .orderBy('FechaCreacion', descending: true)
            .snapshots()
        : this
            .fs
            .collection('Encuestas')
            .where('OrganizacionPerteneciente',
                isEqualTo: this.organizacionPerteneciente)
            .where('Asignada', arrayContains: this.uID.toString())
            .orderBy('FechaCreacion', descending: true)
            .snapshots(),
    builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
      if (snapshot.hasError) return Text('Error: ${snapshot.error}');
      switch (snapshot.connectionState) {
        case ConnectionState.waiting:
          return Center(
            child: CircularProgressIndicator(),
          );
        default:
          this.encuestas = new List<Encuesta>();
          snapshot.data.documents.forEach((encuesta) {
            this.encuestas.add(Encuesta.parse(encuesta.data));
          });

          return snapshot.data.documents.length == 0
              ? Center(
                  child: Text(
                    this.rolUsuario != 'Digitador'
                        ? 'Aún no se han creado encuestas en la plataforma.\nPara agregar nuevas encuestas ve a https://surveyflow.tk desde un computador.'
                        : 'Aún no tienes asignada ninguna encuesta para rellenar.',
                    textAlign: TextAlign.center,
                    style: TextStyle(
                      fontSize: 18,
                    ),
                  ),
                )
              : ListView.separated(
                  itemCount: snapshot.data.documents.length,
                  separatorBuilder: (context, index) => Divider(
                    color: Colors.blueGrey[100],
                  ),
                  padding: EdgeInsets.only(top: 15),
                  itemBuilder: (context, index) => Padding(
                    padding: EdgeInsets.symmetric(horizontal: 5),
                    child: ListTile(
                      selected: false,
                      title: Text(
                        snapshot.data.documents[index]['Nombre'],
                        style: TextStyle(fontWeight: FontWeight.bold),
                      ),
                      dense: true,
                      subtitle: RichText(
                        text: TextSpan(
                            text: snapshot.data.documents[index]
                                    ['Descripcion'] +
                                '\n',
                            style: TextStyle(
                              color: Colors.blueGrey,
                            ),
                            children: <TextSpan>[
                              TextSpan(
                                  text: 'Fecha de Creación: ' +
                                      imprimirFecha(
                                        snapshot.data.documents[index]
                                            ['FechaCreacion'],
                                      ),
                                  style: TextStyle(
                                    color: Colors.black,
                                    fontWeight: FontWeight.bold,
                                  )),
                            ]),
                      ),
                      leading: CircleAvatar(
                        child: Text(snapshot
                            .data.documents[index]['Encuestados']
                            .toString()),
                      ),
                      isThreeLine: false,
                      onTap: () {
                        Navigator.push(
                          context,
                          MaterialPageRoute(
                            builder: (context) => RellenarEncuestaView(
                              encuestaEditar: Encuesta.parse(
                                  snapshot.data.documents[index]),
                              isAndroid: this.widget.isAndroid,
                              tipoEdicion: 'nuevo',
                              authInstance: this.widget.authInstance,
                            ),
                          ),
                        );
                      },
                    ),
                  ),
                );
      }
    },
  ),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...