相当于 GetX

时间:2021-04-23 05:08:48

标签: flutter bloc getx flutter-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]);
                    },
                  );

1 个答案:

答案 0 :(得分:1)

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;

这将显示暂停的小吃店。