flutter - 相当于 GetX 中的 BlocListener

标签 flutter bloc flutter-getx

Getx 中是否有与 BlockListener 等效的东西,例如根据状态显示 snackbar ...就像 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...

您可以通过在 Controller 的 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;

这将显示暂停的 snackbar 。

关于flutter - 相当于 GetX 中的 BlocListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67224301/

相关文章:

flutter - 如何使用 ListView.builder reverse :true 在顶部显示 RefreshIndicator

flutter - getter 'isEmpty'在null上被调用

flutter : Is provider an alternative to the BLoC pattern?

Flutter Bloc 教程 - 如何显示用户名,即来自其他页面的值

android - flutter - _AssertionError ('package:flutter/src/widgets/framework.dart' : Failed assertion: line 4937 pos 12: 'child == _child' : is not true.)错误

Flutter Web 方向性意外的空值

android - 使用google_maps_autocomplete后Flutter无法运行

flutter - 在flutter插件中获取事件引用

dart - 如何使用 BLoC 模式管理表单状态?

flutter - 当我回来或完成时如何重置我的 Controller ?