【问题标题】:Getx: trigger obx in man class by obs value from other classesGetx:通过其他类的obs值触发man类中的obx
【发布时间】:2021-08-19 16:32:00
【问题描述】:

我正在尝试使用 Getx。我有一个 Home 类。在 Home 内部我有一个选项卡视图。

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 被绑定时,来自onInit getAddedVocabs(); 方法被调用。现在如何在 Home 中触发Obx? 我想用WordsPage(),WordsPageController, 来做到这一点。

在其他控制器中调用 HomeController 来调用 obs 值是一种好习惯吗? :

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

【问题讨论】:

    标签: flutter flutter-getx


    【解决方案1】:

    问题:当 AddController 被绑定时,getAddedVocabs();调用来自 onInit 的方法。现在如何在 Home 中触发 Obx?

    答案:要使您的 Obx 工作,只需将您的 HomeController 绑定到您的 Home 类。 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}'),
        ),
      ),
    ],
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-07
      • 1970-01-01
      • 2021-11-07
      • 2023-02-15
      • 2022-12-09
      • 2022-11-04
      • 2021-11-11
      • 2021-03-25
      相关资源
      最近更新 更多