如何解决相当于 GetX
是否有与 Getx 中的 BlockListener 等效的功能,例如根据状态显示小吃栏...就像 Bloc 模式中的这个示例
body: BlocConsumer<PhotoBloc,PhotosState>(
listener: (context,state) {
if(state is PhotoErrorState) {
return ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(state.message))
);
}
},builder: (context,state) {
if (state is PhotoLoadingState) {
return Center(child: CircularProgressIndicator(),);
} else if (state is PhotoLoadedSuccessfullyState) {
return Card(
child: ListView.builder(
itemCount: state.photos.length,itemBuilder: (context,i) {
return ListTile(
leading: CircleAvatar(child: Image.network(state.photos[i]
.url),),title: Text(state.photos[i].title),onTap: () {
context.read<NavigationCubit>().showPhotoDetails(state.photos[i]);
},);
解决方法
Workers 是侦听任何可观察对象的 Getx 方式。 ever
函数会在可观察对象发生变化时被调用。
假设你真的想让它感觉像 bloc
并且你想设置一个可观察的枚举,所以它类似于 state.whateverState...
您可以通过在控制器的 onInit
中设置侦听器来执行以下操作:
enum Status { none,running,stopped,paused }
class Controller extends GetxController {
Rx<Status> status = Status.none.obs;
@override
void onInit() {
super.onInit();
ever(
status,(value) {
if (value == Status.running) {
Get.snackbar('State Updated','Running');
}
if (value == Status.none) {
Get.snackbar('State Updated','None');
}
if (value == Status.stopped) {
Get.snackbar('State Updated','Stopped');
}
if (value == Status.paused) {
Get.snackbar('State Updated','Paused');
}
},);
}
}
然后,您可以从应用程序的任何位置执行以下操作:
Get.find<Controller>().status.value = Status.paused;
这将显示暂停的小吃店。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。