我有一个布尔值,我需要设置一个基于这个布尔值的条件。我试图得到这个布尔值,然后用它在我的FutureBuilder,但我总是得到空,即使我可以看到值是在火还原。请帮助。
Future<bool> getUser() async {
dynamic data;
bool isUser=false;
final DocumentReference document =
FirebaseFirestore.instance.collection('users').doc(uida).collection('pre').doc();
isUser = await document.get().then<dynamic>(( DocumentSnapshot snapshot) async{
data =snapshot.data;
final data1 = data.map((doc) => doc['enrolled']);
print(data1.toString());
if (data1==true){
setState(() {
isUser = true;
});}
});
return isUser;
}
小装置
return FutureBuilder(
future: getUser(),
builder: (BuildContext context, AsyncSnapshot<bool> snapshot) {
if (snapshot.data == true)
return Text(snapshot.data.toString());
你可以使用下面的代码,这将解决你的问题,但请检查两件事:你是否拥有从firebase获取数据所需的所有权限,以及检查文档id是否正确?可以使用if(snapshot.data!.exists)检查文档是否存在于当前集合中
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
class TestClass extends StatefulWidget {
const TestClass({Key? key}) : super(key: key);
@override
_TestClassState createState() => _TestClassState();
}
class _TestClassState extends State<TestClass> {
final _auth = FirebaseAuth.instance;
final FirebaseFirestore _fireStore = FirebaseFirestore.instance;
@override
Widget build(BuildContext context) {
return Scaffold(
body: FutureBuilder<DocumentSnapshot>(
future: _fireStore
.collection('users').doc(uida).collection('pre').doc(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return Center(child: Text(snapshot.data!['enrolled'].toString()));
} else {
return Center(
child: CircularProgressIndicator(),
);
}
}),
);
}
}
在使用异步代码时,最好使用async和Wait,或者使用then。在您的情况下,async和await将提供更可读的代码。
对于getUser函数,这类似于:
Future<bool> getUser() async {
dynamic data;
bool isUser=false;
final DocumentReference document =
FirebaseFirestore.instance.collection('users').doc(uida).collection('pre').doc();
isUser = await document.get()
data = snapshot.data;
final data1 = data['enrolled'];
print(data1.toString());
if (data1==true){
setState(() {
isUser = true;
});}
});
return data1;
}
对于FutureBuilder,最好使用snapshot.hasData检查快照是否包含数据:
return FutureBuilder(
future: getUser(),
builder: (BuildContext context, AsyncSnapshot<bool> snapshot) {
if (snapshot.hasData)
if (snapshot.data ==true){
return Text(snapshot.data.toString());
} else {
return Text('still waiting for data...')
看见https://api.flutter.dev/flutter/widgets/FutureBuilder-class.html为了更好的解释。
问题内容: 我有一些EditText,用户可以输入ftp地址,用户名,密码,端口和testConnection按钮。如果成功建立连接,它将返回布尔值true。 我正在重新编写代码以使用AsyncTasks执行各种ftp操作,但是,如果连接成功,如何传递布尔值? 还有我的AsyncTask 问题答案: 如果myMethod从onPostExecute内部代码调用,它将在UI线程上运行。否则,你需要通
在VueJS中,我尝试使用axios返回布尔值 console.log刚刚返回 Promise{[[PromiseState]]:"待定",[[PromiseValue]]:未定义} 但我想要的回报不是真就是假。
问题内容: 关于以下原因为何的任何想法。 当我将request_url粘贴到浏览器中时,我会获取json数据,但是如果我在php中尝试,则var_dump就是bool(false); 有任何想法吗?? 更新并修复 OK伙计们,感谢您的所有帮助。是的,我帮助我追踪了这一情况。事实证明,php.ini配置为禁止打开url,因此file_get_contents无法正常工作。我在各个站点上发现了以下方便
好的,我的问题是关于布尔返回。对于我的Comp-Sci作业,我必须使用多种方法制作一个课程注册程序,其中之一就是添加课程方法。基本上,在目录中搜索类,如果匹配,则将其添加到学生计划中,并返回布尔值true。我这么做了,但出于某种原因,这给了我一个错误。以下是代码: 为什么它不能识别布尔返回值?是因为我把它们放在了一个圈里吗?
是否可以编写如下JPQL查询: <代码>选择计数(*) 这将根据实体填充条件是否存在返回真/假布尔值? 我想这样使用查询: 我示例中的查询在语法上不正确(解析错误),但是是否有任何正确的方法可以像在JPQL中那样进行检查,从而返回布尔值,或者只有在Java代码中才有可能?
我尝试使用Mockito使用JUnit测试测试以下方法: } 然而,我在以下部分遇到了问题: 尽管我已经嘲笑了这个.petRepository.findById(id),但由于某种原因,isPresent()返回了false。这是我对测试的初始化: 因此,以下测试失败,即使它应该通过: 为了解决这个问题,我尝试模仿isPresent()方法: 但是我得到了下面的异常: org.mockito.ex