我想根据PressedBool是false还是true来更改小部件的主体。
这是我写的Getx服务。
Consumer<String> badAnswer = reply -> System.out.println("Fail, " + reply);
Consumer<String> goodAnswer = reply -> System.out.println("Success!, " + reply);
private void reply(String[] args){
processQuery(args, goodAnswer, badAnswer);
}
在这里应该进行GetX更新和侦听以更改页面的正文:
import 'package:get/state_manager.dart';
class PressedState extends GetxController{
var pressedBool = true;
changeStatus() {
if(pressedBool){
pressedBool = false;
}
else {
pressedBool = true;
}
update();
}
}
我怎样才能让GetX来监听PressedBool变量?
答案 0 :(得分:2)
return MaterialButton(
onPressed: () {
pressController.changeStatus();
},
child:
GetBuilder<PressedState>(
init: PressedState()
builder: (pressController) {
return pressController.pressedBool
? Container(...) : Container(...))
}
),
答案 1 :(得分:2)
有时,仅侦听更改并更改其他一些控制器或变量的值很有用。例如,如果我们想从另一个屏幕更改选项卡。
我们可以使用 Rx 变量创建控制器
class TabStateController extends GetxController {
RxInt tabIndex = 0.obs;
}
之后,在带有选项卡的屏幕上收听更改
_tabStateController.tabIndex.listen((value) {
_tabController.index = value;
});
因此,我们可以监听可观察变量的变化。
答案 2 :(得分:0)
有3种方法可以侦听对控制器中属性的更改。您正在控制器的setter方法中使用update()方法,因此第一个方法将为您工作,这也是最轻的方法。
如果您未在小部件中初始化控制器,则:
final Controller _controller = Get.put(Controller());
如果您已经初始化了控制器并且它已经在内存中,那么:
final Controller _controller = Get.find<Controller>();
GetBuilder<Controller> (
init: _controller,
builder: (_) {
return Text('${_controller.property}');
}
)
答案 3 :(得分:0)
YourController.dart
import 'package:get/state_manager.dart';
class PressedState extends GetxController{
var pressedBool = true.obs;
changeStatus() {
if(pressedBool.isTrue){
pressedBool.toggle();
}
else {
pressedBool.value = true; //or pressedBool.toggle();
}
}
}
YourView.dart
final Controller pressController = Get.put(PressedState());
return MaterialButton(
onPressed: () {
pressController.changeStatus();
},
child: Obx(() {
return pressController.pressedBool
? Container(...) : Container(...),
})