我有一个FutureBuilder(很高兴加载)从Firebase获取我的DocumentSnapshot列表,但问题是如果我推送/弹出屏幕,它会一遍又一遍地重建它。为了解决这个问题,我最终将它放在了initState
上,但我有一个问题,我有时无法从中获取所有文档。
我有一个按钮可以启用国家/地区筛选和禁用,每次按下它几乎都会立即显示我的文档,例如,我总共筛选了11个国家/地区,筛选了5个国家/地区,但有时我不会全部得到,直到得到值时,我才得到应用程序错误(用户列表的长度)。我试图将未来置于强制等待状态,但我无法实现,请告知。
<代码>变量\u用户列表
_fetchUserList() {
Future<QuerySnapshot> snapshot;
if (_countryFilter) {
//print('COUNTRY FILTER');
snapshot = Firestore.instance.collection('u').where('country', isEqualTo: country).getDocuments();
} else {
//print('ALL FILTER');
snapshot = Firestore.instance.collection('u').getDocuments();
}
snapshot.then((QuerySnapshot result) {
final List<DocumentSnapshot> documents = result.documents;
if (documents.length > 0) {
final List<DocumentSnapshot> availableUsers =
documents.where((DocumentSnapshot documentSnapshot) => documentSnapshot['userId'] != _id).toList();
//print('userList Size: ' + availableUsers.length.toString());
List<DocumentSnapshot> userShuffle = _shuffle(availableUsers);
setState(() {
_userList = userShuffle;
});
}
});
}
这是我的GridView:
GridView.builder(
padding: const EdgeInsets.all(10.0),
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2, mainAxisSpacing: 10.0, crossAxisSpacing: 10.0, childAspectRatio: 0.85),
itemBuilder: (context, index) {
return _buildItem(context, _userList[index]);
},
itemCount: _userList.length,
)
按钮:
onPressed: () async {
if (_countryFilter) {
_countryFilter = false;
} else {
_countryFilter = true;
}
await _fetchUserList();
setState(() {});
},
我通过一些验证成功地使其工作。另外,不同用户长度的问题是因为buildItem上也使用了“country”变量。
Future _fetchUserList() async {
setState(() {
_userList = null;
_userLenght = null;
});
QuerySnapshot snapshot;
if (_countryFilter) {
snapshot = await Firestore.instance.collection('u').where('country', isEqualTo: _myCountry).getDocuments();
} else {
snapshot = await Firestore.instance.collection('u').getDocuments();
}
final List<DocumentSnapshot> documents = snapshot.documents;
if (documents.length > 0) {
final List<DocumentSnapshot> availableUsers =
documents.where((DocumentSnapshot documentSnapshot) => documentSnapshot['userId'] != _id).toList();
_userLenght = availableUsers.length;
if (_userLenght > 0) {
List<DocumentSnapshot> userShuffle = _shuffle(availableUsers);
_userList = userShuffle;
}
setState(() {});
}
}
(_userList == null && _userLenght == null)
? Container(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Center(
child: Container(
width: 50.0,
height: 50.0,
alignment: Alignment.center,
child: CircularProgressIndicator(
valueColor: AlwaysStoppedAnimation<Color>(Theme.of(context).primaryColor),
strokeWidth: 2.0,
),
),
),
SizedBox(height: 12.0),
Text(
"We are loading the users",
style: TextStyle(
color: Colors.black54,
fontWeight: FontWeight.bold,
),
textAlign: TextAlign.center,
),
],
),
)
: (_userLenght == 0)
? Container(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Center(
child: Icon(
Icons.supervisor_account,
color: Theme.of(context).primaryColor.withOpacity(0.8),
size: 50.0,
),
),
SizedBox(height: 12.0),
Text(
"No one was found\nTry reloading the screen",
style: TextStyle(
color: Colors.black54,
fontWeight: FontWeight.bold,
),
textAlign: TextAlign.center,
),
],
),
)
: GridView.builder(
padding: const EdgeInsets.all(10.0),
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
mainAxisSpacing: 10.0,
crossAxisSpacing: 10.0,
childAspectRatio: 0.85),
itemBuilder: (context, index) {
return _buildItem(context, _userList[index]);
},
itemCount: _userLenght,
),
希望这对某人有所帮助。有了这个,我能够在每次推送和弹出屏幕时停止屏幕用户列表洗牌,因为它只在initState和Button上。
我有以下 我有下面的方法 API中的JSON格式。 返回模型公司时出现问题。fromJson(response.data) fetchcompanys中的code>给出错误
我想开发一个注销按钮,将我发送到登录路径,并从导航器中删除所有其他路径。文档似乎没有解释如何创建路由预测(RoutePredicate)或具有任何类型的removeAll功能。
我有一个带有自定义对象的列表,希望迭代它并将值设置为true/false。
所以…我得到了一个调用Api,其中还包括7天的预测。我设法显示了当前的天气(温度和图标),但如何获得未来4天的天气预报? 我的API:https://api.openweathermap.org/data/2.5/onecall?lat=lat 我的型号: 我的回答是: 响应对象: 来自OneCall API的JSON:
Xcode的输出:在文件中包含从 /Users/dani/development/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher-6.0.3/ios/Classes/FLTURLLauncherPlugin.m: 7: /Users/dani/development/flutter/.pub-cache/hosted/pub.dart
问题内容: 获取Oracle中所有表的列表? 问题答案: 假设您有权访问DBA_TABLES数据字典视图。如果您没有这些特权但需要它们,则可以请求DBA显式授予您对该表的特权,或者请求DBA授予您该SELECT ANY DICTIONARY特权或SELECT_CATALOG_ROLE角色(这两者都将允许您查询任何数据字典表) )。当然,您可能希望排除某些模式,例如SYS和模式,SYSTEM而这些模