flutter - 如何在小部件颤动中使用具有可见性的 FutureBuilder
问题描述
自从我试图弄清楚如何对隐藏它的用户隐藏隐藏的帖子已经有好几天了。我尝试使用 .where() 进行过滤,但后来我陷入了思考如何使用 userId 过滤它的问题,该 userId 不在 firestore 帖子集合的数组中。然后我尝试将规则设置为
match /reviews/{review}{
allow read: if request.auth != null && !(request.auth.uid in
resource.data.hidingUserId)}
但这也不起作用。没有收到任何帖子,因为完全拒绝了许可。
所以现在我正在尝试以下方法:
hidePost(BuildContext context) async {
setState(() {
isVisible = !isVisible;
});
await postRef.doc(widget.post.postId).update({'hidingUserId':
FieldValue.arrayUnion([FirebaseAuth.instance.currentUser.uid])});
showInSnackBar(context, Languages.of(context).postHidden);
final SharedPreferences prefs = await SharedPreferences.getInstance();
return prefs.setBool("visibility", !isVisible);
}
getVisibility() async{
final SharedPreferences prefs = await SharedPreferences.getInstance();
return prefs.getBool("visibility");
}
然后在我的小部件中我有:
child: Visibility(
visible: getVisibility(),
child: Container(
decoration: BoxDecoration(
color: Colors.white60,
borderRadius: BorderRadius.circular(15.0),
),
child: Column( blahblablah...)
我得到的错误是type 'Future<dynamic>' is not a subtype of type 'bool'
在 getVisibility() 方法上。也许我需要使用 FutureBuilder,但我不知道在哪里使用它。请帮我解决这个问题?非常感谢!
解决方案
这是您FutureBuilder
在这种情况下的使用方式:
child: FutureBuilder<bool?>(
future: getVisibility(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting)
// Return a widget to be used while the data
// is being loaded from the SharedPreferences
return Center(child: CircularProgressIndicator());
final bool? visibility = snapshot.data ?? false;
return Visibility(
visible: visibility,
child: Container(...),
);
}
)
题外话,但明确声明您的返回类型以避免将来出现调试问题(没有双关语):
Future<bool?> getVisibility() async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
return prefs.getBool("visibility");
}
推荐阅读
- sqlite - EF Core InMemory 使用 SQLite DB - 删除行为上的外键设置为空问题
- java - apache netbeans 11.3 是否兼容 jdk 13 jdk 13 是否包含 derby 数据库?
- assembly - nasm 是否支持将浮点表达式转换为整数?
- quantum-computing - 在 qiskit 中实现量子隐形传态
- c# - 为什么方法内的代码执行了两次?
- php - 刷新后如何保存/重新提交表单信息
- java - 单击对象拖动它时,它会直接跳到角落
- clojure - 无法使用 bidi 正确路由
- android - SafeArgs 未在多模块项目中生成 Directions / Args 类
- python - 从熊猫专栏中只找到一个世界