Окно является полной ошибкой во флаттере - PullRequest
0 голосов
/ 25 июня 2018

При загрузке данных из Firestore в просмотр списка я получаю это предупреждение

W / CursorWindow (15035): окно заполнено: запрошенное выделение 483 байта, свободное пространство 274 байта, размер окна 2097152 байта

Я подаю в суд на образец модели и получаю данные профиля пользователя в классе модели. Я сохранил все пользовательские данные в массиве в классе модели вместо того, чтобы использовать построитель потоков в самом дереве виджетов, чтобы было проще просматривать страницы и, честно говоря, их легче читать. Однако, просматривая список, я получаю предупреждение «Окно заполнено», я понимаю, что для этой операции хранения профилей пользователей выделяется слишком много места, однако есть ли альтернативный подход, который я могу использовать для решения этой проблемы?

class _ExploreScreenState extends State<ExploreScreen>
    with SingleTickerProviderStateMixin {

  Query _query;
  AnimationController controller;
  Animation<double> animation;
  int limitNum = 4;
  bool startAfter = false;
  User _lastUser;

  @override
  Widget build(BuildContext context) {
    return Container(
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.center,
          children: <Widget>[
            Expanded(
              child: new ScopedModel<ExploreModel>(
                  model: widget.model,
                  child: new ScopedModelDescendant<ExploreModel> (
                    builder: (context, child, model) =>
                    model.users.length != 0 ? GridView.builder(
                        gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
                            crossAxisCount: 2,
                            childAspectRatio: 0.8,
                            mainAxisSpacing: 5.0,
                            crossAxisSpacing: 5.0
                        ),
                        itemCount: model.users.length,
                        itemBuilder: (BuildContext context, int index) {
                          if(index ==  model.users.length-1){
                            model.loadUsers();
                          }
                          return BrowseTile(model.users[index]);
                        }
                    ) : Text('loading...'),
                  )
              ),
            ),
          ],
        )
    );
  }

class ExploreModel extends Model {
  List<User> _users;
  Query _query;
  User _currentUser;
  int limitNum = 20;


  List<User> get users => _users;

  ExploreModel(this._currentUser) {
    _users = new List();
    loadUsers();
  }

  void loadUsers() {
    _query = Firestore.instance.collection('Users').where(
        'gender', isEqualTo: _currentUser.prefGender)
        .limit(limitNum)
        .orderBy('firstName')
        .orderBy('lastName');
    if (_users.length > 0) _query = _query.startAfter(
        [_users[_users.length - 1].firstName, _users[_users.length - 1].lastName
        ]);
    print('Array Size: ');
    print(_users.length);
    _query.snapshots().listen((snapshot) {
      snapshot.documents.forEach((ds) {
        User user = User.fromMap(ds.data, ds.documentID);
        if(user.id != _currentUser.id){
          bool _added = false;
          _users.forEach((userEach) {
            for(var i=0; i<_users.length; i++){
              if(_users[i].id == user.id){
                _users.remove(_users[i]);
                _users.insert(i, user);
                _added = true;
                notifyListeners();
              }
            }
          });
          if (!_added) {
            _users.add(user);
            notifyListeners();
          }
        }
      });
    });
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...