我正在使用FlutterGetX,并希望侦听我的自定义GetXController中的一些变量...
class HomeScreenController extends MyGetXController {
var isLoading = false.obs;
var isError = true.obs;
}
问题:
我想在我的Scaffold中使用观察变量......每当它发生变化时,它都应该触发小部件的重建......但我找到的唯一方法是将它们放入ObX() Widget
。但我想在不必使用ObX()
的情况下监听观察变量。
**我的用例:**我希望侦听变量并在其发生更改时触发小部件树的重建...但不应重建整个小部件树...仅重建发生更改的ObX()
小部件。
目前我正在使用一个大的ObX()对象,并将所有可观察的变量放在那里...我担心如果其中的一个可观察变量发生变化,整个ObX()
将被重建...
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(S.current.menuLatestEvents),
),
drawer: const AppDrawer(),
body: controller.isClientVersionNOTSupported.value
? const UpdateAppCard()
: Container(
color: Colors.grey[200],
child: Obx(
() {
return controller.isLoading.value
? const Center(child: CircularProgressIndicator())
: controller.isError.value
? ErrorCard(
controller: controller,
retryFunction: () => controller.getEvents(),
)
ObX()外部的可观察项...我听对了吗?
我不能使用ever()
,因为它不能在if-statement
中使用,因为 * 它不是静态的 *...那么如何只监听一个变量并在if语句中使用它,而不需要使用像ObX()
这样的小部件呢?
1条答案
按热度按时间k75qkfdt1#
您可以考虑使用
GetBuilder
小部件提供的update()
函数,在监听Rx
变量的变化时只重建小部件树的特定分支,通过使用此技术,您可以只重建小部件树的一部分,而不是整个小部件树。示例: