Flutter:如何监听 GetX 上的变量变化

Umu*_*pat 7 flutter flutter-getx

我想根据 PressBool 是 false 还是 true 来更改小部件的主体。

这是我写的GetxController。

    import 'package:get/state_manager.dart';
    
    class PressedState extends GetxController{
      var pressedBool = true;
      changeStatus() {
        if(pressedBool){
          pressedBool = false;            
        }
        else {
          pressedBool = true;
        }
        update();
      }

}
Run Code Online (Sandbox Code Playgroud)

这里是 GetX 更新和监听应该改变页面正文的地方:

final PressedState pressController = Get.put(PressedState());

return MaterialButton(
    onPressed: () {
      pressController.changeStatus();
    },
    child: 
      pressController.pressedBool
            ? Container(...) : Container(...)), ...
Run Code Online (Sandbox Code Playgroud)

如何让 GetX 监听 PressBool 变量?

awa*_*aik 20

有时,只需监听更改并更改其他一些控制器或变量的值就很有用。例如,如果我们想从另一个屏幕更改选项卡。

我们可以使用 Rx 变量创建控制器

class TabStateController extends GetxController {
  RxInt tabIndex = 0.obs;
}
Run Code Online (Sandbox Code Playgroud)

之后,在带有选项卡的屏幕上聆听更改

      _tabStateController.tabIndex.listen((value) {
        _tabController.index = value; 
      });
Run Code Online (Sandbox Code Playgroud)

因此,我们可以监听可观察变量的变化。


小智 8

return MaterialButton(
    onPressed: () {
      pressController.changeStatus();
    },
    child:
      GetBuilder<PressedState>(
        init: PressedState() 
        builder: (pressController) {
          return pressController.pressedBool
            ? Container(...) : Container(...))
        }
      ),
 
Run Code Online (Sandbox Code Playgroud)


Bag*_*nto 5

YourController.dart

import 'package:get/state_manager.dart';

class PressedState extends GetxController{

  RxBool pressedBool = true.obs;

  void changeStatus() {
     pressedBool.toggle();
  }

}
Run Code Online (Sandbox Code Playgroud)

YourView.dart

final Controller pressController = Get.put(PressedState());

return MaterialButton(
    onPressed: () {
      pressController.changeStatus();
    },
    child: Obx(() {
     return pressController.pressedBool.isTrue
            ? Container(...) 
            : Container(...),
        })
     
    
Run Code Online (Sandbox Code Playgroud)


dıl*_*ücü 5

ever例如,您可以在控制器上使用方法



 final Controller c = Get.put(Controller());
 ever(c.counter, (value) => print("$value has been changed"));




Run Code Online (Sandbox Code Playgroud)

或者在控制器中,你声明这个

import 'package:get/get.dart';

class Controller extends GetxController {
  var counter = 50.obs;


  void increment() {
    counter = counter + 1;
  }

  @override
  void onInit() {
    ever(counter, (value) => print("$value has been changed!!!"));
    super.onInit();
  }
}

Run Code Online (Sandbox Code Playgroud)