Apakah ada yang setara dengan BlockListener di Getx, suka menunjukkan snackbar misalnya tergantung pada negara ... seperti contoh ini dari pola 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
Osama Mohammed 23 April 2021, 08:08

1 menjawab

Jawaban Terbaik

Pekerja adalah cara Getx mendengarkan objek apapun yang dapat diamati. Fungsi ever dipanggil setiap kali objek yang dapat diamati berubah.

Katakanlah Anda benar-benar ingin membuatnya terasa seperti bloc dan Anda ingin menyiapkan enum yang dapat diamati sehingga mirip dengan state.whateverState...

Anda dapat melakukan sesuatu seperti ini dengan menyetel pendengar di onInit pengontrol:

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');
        }
      },
    );
  }
}

Kemudian dari mana saja di aplikasi Anda dapat melakukan sesuatu seperti ini:

 Get.find<Controller>().status.value = Status.paused;

Dan itu akan menampilkan snack bar yang dijeda.

1
Loren.A 23 April 2021, 06:31