Flutter - 如何用 Bloc 重建 Widget?
Flutter - How to rebuild Widget with Bloc?
我是 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();
},
),
);
}
现在如何在单击按钮后重建此小部件?
如果您只需要重建屏幕,调用 setState()
应该会触发重建。
另一方面,BlocBuilder
在状态更改时重建。如果您想在您的集团中观察到状态变化,调用 context.read<ForumBloc>().doSomething()
应该更新 BlocBuilder
.
内的小部件
使用 BlocListener 是您可以使用的另一种方法。
我是 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();
},
),
);
}
现在如何在单击按钮后重建此小部件?
如果您只需要重建屏幕,调用 setState()
应该会触发重建。
BlocBuilder
在状态更改时重建。如果您想在您的集团中观察到状态变化,调用 context.read<ForumBloc>().doSomething()
应该更新 BlocBuilder
.
使用 BlocListener 是您可以使用的另一种方法。