Getx: запускает obx в классе man по значению obs из других классов

#flutter #flutter-getx

Вопрос:

Я пытаюсь использовать Getx. У меня домашние занятия .Внутри дома у меня есть вид вкладки.

 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(),
 

В AddPageController я получаю список из базы данных. Я хочу показать количество элементов внутри списка на домашней странице :

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

Это мой метод внутри 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;
  }
 

Когда AddController привязан , getAddedVocabs(); вызывается метод from onInit . теперь, как я могу сработать Obx дома?
Я хочу сделать это с WordsPage(), и. WordsPageController,

Рекомендуется вызывать HomeController внутри другого контроллера для вызова значения obs? :

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

Ответ №1:

Вопрос: Когда AddController привязан , вызывается метод getAddedVocabs(); из OnInit. теперь, как я могу запустить Obx в домашних условиях?

Ответ: Чтобы ваш Obx работал, просто привяжите свой домашний контроллер к домашнему классу. Obx обновит изменения автоматически.

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