首页 > 解决方案 > Flutter - 如何使用 Bloc 重建 Widget?

问题描述

我是 Flutter 中 Bloc 模式的新手,我想在这里理解这段代码,我有一个小部件:

Widget forumList() {
    return BlocProvider<ForumBloc>(
      create: (context) => ForumBloc(ForumService())..add(GetAllForumPosts()),
      child: BlocBuilder<ForumBloc, ForumState>(
        builder: (context, state) {
          if (state is ForumLoading) {
            return Text('Loading');
          }
          if (state is ForumLoaded) {
            var posts = state.forumPosts;
            return ListView.separated(
              shrinkWrap: true,
              physics: NeverScrollableScrollPhysics(),
              padding: const EdgeInsets.symmetric(vertical: 8),
              itemCount: posts.length,
              itemBuilder: (context, index) {
                var post = posts[index];
                return ForumPostCard(
                  forumModel: post,
                  onPressed: () {
                    Navigator.pushNamed(context, Routes.forumDetails,
                        arguments: {'post': post});
                  },
                );
              },
              separatorBuilder: (context, index) => SizedBox(height: 5),
            );
          }
          return SizedBox();
        },
      ),
    );
  }

现在单击按钮后如何重建此小部件?

标签: flutterdartblocflutter-bloc

解决方案


如果您只需要重建屏幕,调用setState()应该会触发重建。

BlocBuilder另一方面重建状态变化。如果你想在你的 bloc 中观察到状态变化,调用类似的东西context.read<ForumBloc>().doSomething()应该更新里面的小部件BlocBuilder

使用BlocListener是您可以使用的另一种方法。


推荐阅读