Getx:通过其他类的obs值触发man类中的obx

Posted

技术标签:

【中文标题】Getx:通过其他类的obs值触发man类中的obx【英文标题】:Getx: trigger obx in man class by obs value from other classes 【发布时间】: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;
  

【问题讨论】:

【参考方案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'),
    ),
  ),
],

【讨论】:

以上是关于Getx:通过其他类的obs值触发man类中的obx的主要内容,如果未能解决你的问题,请参考以下文章

Flutter GetX基础教程(十二):RxList、Rx([])、.obs对比分析

为 DateTime 声明 obs 类型的正确方法是啥?

保存word文件

PHP 缓存区ob

在另一个类中使用一个类的静态对象

Flutter Getx - 更新子列表中的项目不是反应性的