相当于 GetX 中的 BlocListener
the equivalent of BlocListener in 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;
这将显示暂停的小吃店。
在 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;
这将显示暂停的小吃店。