firebase - Flutter中的窗口已满错误
问题描述
将数据从 Firestore 加载到列表视图时,我收到此警告
W/CursorWindow(15035):窗口已满:请求分配 483 字节,可用空间 274 字节,窗口大小 2097152 字节
我正在起诉范围模型模式并在模型类中获取用户配置文件数据。我将所有用户数据保存到模型类中的一个数组中,而不是在小部件树本身中使用流构建器,这样更容易翻阅数据,坦率地说更容易阅读。但是,通过列表,我收到一个 Window is Full 警告,我知道为存储用户配置文件的操作分配了太多空间,但是我可以采取其他方法来解决这个问题吗?
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();
}
}
});
});
}
}
解决方案
这似乎是这个GitHub issue ticket中提到的一个已知问题,但这应该在 2020 年 5 月得到解决。我建议升级您正在使用的 Flutter SDK 版本并重试。
推荐阅读
- javascript - Jest unit test uncovered line on await/async return
- algorithm - Big O notation 2^log(n) equals what Big O and can something be greater
- android - 我可以在 values/strings.xml 文件中使用另一个 .xml 文件吗?
- r - 在循环中创建多个变量
- java - 自定义对象的实例在创建另一个 java 时被替换
- java - 输入数字后 java.lang.NumberFormatException 错误
- java - Keycloak 预重定向逻辑
- html - MVC - 更改功能的下拉过程ajax调用
- java - Talend 是 OnComponantOk 线程安全的
- sql - 计算一行中空值的数量以除以(未知)列数