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的主要内容,如果未能解决你的问题,请参考以下文章