如何管理Get.bottomSheet?flutter中的状态

svdrlsy4  于 2022-12-19  发布在  Flutter
关注(0)|答案(2)|浏览(259)

当我使用Get.bottomSheet时,我无法管理状态,即使我用GetBuilder() Package 它,并使用update()函数。
这是密码

    • 这是在底表中显示注解的函数。**
commentFunction(context, id, comments) {
Get.bottomSheet(CustomPageForComments(
    postid: id,
    sendCommentFunction: () {
      sendComment(id, commentController.text);
    },
    controllerForCommentField: commentController,
    comments: comments));}
    • CustomPageForComments()是一个简单的页面,它使用流来从数据库获取注解。**

最后是发送注解函数

sendComment(String id, String message) {
commentController.clear();
DocumentReference setter =
    FirebaseFirestore.instance.collection("Posts").doc(id);

setter.update({
  "comments": FieldValue.arrayUnion([
    {
      "username": currentusername,
      "message": message,
      "time": DateTime.now(),
      "id": formatDate(DateTime.now(),
          [yyyy, ":", mm, ":", dd, ":", hh, ':', nn, ":", ss]),
    }
  ])
});
update();}

我想在使用发送评论功能时刷新底部工作表,这样用户就可以看到他的评论而不需要重新打开底部工作表。
当你关闭最下面的表单并重新打开它时,它实际上会更新
我该怎么办?
我还想问,在注解中使用流构建器而不是未来构建器是真的吗?
谢谢

5vf7fwbs

5vf7fwbs1#

要更改底部工作表内的状态,可以使用StatefulBuilder

Get.bottomSheet(
   StatefulBuilder(
         builder: (BuildContext context, StateSetter setState) {
    return Container(
      height: heightOfModalBottomSheet,
      child: RaisedButton(onPressed: () {
        setState(() {
          // Change state here
        });
      }),
    );
  });
)

如果您希望注解真实的更新(可能会因读取而导致更高的成本),请使用Stream Builder,要仅提取数据一次,请使用FutureBuilder

pxq42qpu

pxq42qpu2#

在bottomSheet中使用update()可以正常工作。确保正确使用GetBuilder。你需要刷新内部小部件,而不是Get.bottomSheet函数。你的代码应该如下所示:

Get.bottomSheet(
                GetBuilder<CommentController>(builder: (cLogic) {
                return Text('Comments count: ${cLogic.count}');
              })
             );

相关问题