Flutter 从API调用提交时颤振刷新UI

Flutter 从API调用提交时颤振刷新UI,flutter,Flutter,我正试图在Api上发表评论。我可以正确地发布评论,并且它也发布在api端点上。我想要的是在发布评论后刷新UI,这样我就可以看到我的最新评论。感谢您的任何帮助。谢谢 这是在api上发布注释的代码: void _postComment() async { var data = { 'content': commentContent, }; var res = await CommentApi().authData(data, widget.post.postId)

我正试图在Api上发表评论。我可以正确地发布评论,并且它也发布在api端点上。我想要的是在发布评论后刷新UI,这样我就可以看到我的最新评论。感谢您的任何帮助。谢谢

这是在api上发布注释的代码:

void _postComment() async {
    var data = {
      'content': commentContent,
    };
    var res = await CommentApi().authData(data, widget.post.postId);
    var body = json.decode(res.body);
    print(body);
    await Future.delayed(Duration(milliseconds: 1000));
    return showDialog<void>(
      context: context,
      barrierDismissible: false,
      builder: (BuildContext context) {
        return AlertDialog(
          title: Text('Successful'),
          content: SingleChildScrollView(
            child: ListBody(
              children: <Widget>[
                Text('Your comment has been added.'),
              ],
            ),
          ),
          actions: <Widget>[
            FlatButton(
              child: Text('Okay'),
              onPressed: () {
                Navigator.pop(context);
                setState(() {
                  textEditingController.clear();
                });
              },
            ),
          ],
        );
      },
    );
  }
检索注释的步骤

ListView.builder(
          shrinkWrap: true,
          physics: ClampingScrollPhysics(),
          itemCount: widget.post.comments.length,
          itemBuilder: (BuildContext context, int index) {
            return _commentsWidget(widget.post.comments[index]);
          },
        ),
Widget_commentsWidget(评论后评论){
返回填充(
填充:常数边集全部(10.0),
孩子:卡片(
标高:5,
形状:圆形矩形边框(
边界半径:边界半径。圆形(15.0),
),
子:列(
儿童:[
列表砖(
标题:填充(
填充:仅限边缘设置(左:55.0),
子:文本(
comment.commentText,
样式:TextStyle(fontSize:20.0),
),
),
)
],
),
),
);
}

您可以使用以下策略解决此问题:

  • 首先,在状态类中声明全局列表变量,该变量存储从API获取的当前注释
  • 然后,在ListView.builder中使用此变量
  • 将注释成功添加到API后,在setState中更新此变量
  • 在这种情况下,UI将根据新设置的注释列表正确更新
  • ListView.builder(
              shrinkWrap: true,
              physics: ClampingScrollPhysics(),
              itemCount: widget.post.comments.length,
              itemBuilder: (BuildContext context, int index) {
                return _commentsWidget(widget.post.comments[index]);
              },
            ),
    
    Widget _commentsWidget(PostComment comment) {
        return Padding(
          padding: const EdgeInsets.all(10.0),
          child: Card(
            elevation: 5,
            shape: RoundedRectangleBorder(
              borderRadius: BorderRadius.circular(15.0),
            ),
            child: Column(
              children: <Widget>[
                ListTile(
                  title: Padding(
                    padding: EdgeInsets.only(left: 55.0),
                    child: Text(
                      comment.commentText,
                      style: TextStyle(fontSize: 20.0),
                    ),
                  ),
                )
              ],
            ),
          ),
        );
      }