0

I am trying to use Getx. I have a Home class .Inside Home I have a tab view.

return Scaffold(
  appBar: AppBar(
    centerTitle: true,
    bottom:TabBar(
      controller: controller.controller,
      tabs: controller.myTabs,
    ),
    actions: [
      Obx(
        () => Center(
          child: Text(controller.count.toString()),
        ),
      ),
    ],
  ),
  body: Padding(
    padding: const EdgeInsets.all(8.0),
    child: TabBarView(
          controller: controller.controller,
          physics: const NeverScrollableScrollPhysics(),
          children: [
            AddPage(),
            WordsPage(),

In AddPageController I fetch a list from database. I want to show count of items inside list in home page :

actions: [
  Obx(
    () => Center(
      child: Text(controller.count.toString()),
    ),
  ),
],

This is my method inside AddPageController:

class AddController extends GetxController {
  RxInt count = 0.obs;
  @override
  void onInit() {
    getAddedVocabs();
    super.onInit();
  }

 Future<void> getAddedVocabs() async {
    final result = repository.getVocabsFromdb();
    vocabs.addAll(result);
    count.value = vocabs.length;
  }

When AddController is binded , getAddedVocabs(); method from onInit is called. now how can I trigger Obx in Home? I want to do that with WordsPage(), and WordsPageController,.

It's good practice to call HomeController inside other controller to call obs value? :

 Future<void> getAddedVocabs() async {
    final result = repository.getVocabsFromdb();
    vocabs.addAll(result);
    Get.find<HomeController>().count.value = vocabs.length;
  }
Cyrus the Great
  • 5,145
  • 5
  • 68
  • 149

1 Answers1

0

Question: When AddController is binded , getAddedVocabs(); method from onInit is called. now how can I trigger Obx in Home?

Answer: To make your Obx works, just bind your HomeController to your Home class. Obx will update the changes automatically.

class HomeController extends GetxController {
  RxInt count = 0.obs;
  @override
  void onInit() {
    getAddedVocabs();
    super.onInit();
  }

 Future<void> getAddedVocabs() async {
    final result = repository.getVocabsFromdb();
    vocabs.addAll(result);
    count.value = vocabs.length;
  }
}


class Home extends GetView<HomeController> {
...
actions: [
  Obx(
    () => Center(
      child: Text('${controller.count}'),
    ),
  ),
],
}
Wesley
  • 186
  • 6