Flutter GetX 状态没有改变

Flutter GetX state isn't changing

大家好,我需要有关 getx 状态管理的帮助, 我有一个默认加载的布尔值,它在加载数据后更改后为 false

     RxBool loading=false.obs;

  List<String> texts =<String>[].obs;

  getData()async {
    print('loadimg :' + loading.value.toString());

    loading=true.obs;    print('loadimg :' + loading.value.toString());

    var result = await http.get(Uri.parse(main_url));
    print(result.statusCode.toString());
    var data = json.decode(result.body);
    data.forEach((element) => texts.add(element["title"]));
    print(data);
    loading=false.obs;
    print('loadimg :' + loading.value.toString());
  }

我需要检查这个值,如果它是真的我显示一个小部件否则我显示另一个小部件 但是当我将这个布尔值调用到第二个屏幕时它总是 true

class _HomePageState extends State<HomePage> {

  PostController controller = Get.put(PostController());
  @override
  void initState() {
    // TODO: implement initState
    super.initState();

    controller.getData();

  }
  @override
  Widget build(BuildContext context) {

    return Scaffold(
      appBar: AppBar(title: Text('App'),),
      body:controller.loading.isTrue? Center(child: CircularProgressIndicator()): ListView.builder(itemBuilder: (context,index){
        return Card(child: ListTile(title: Text(controller.texts[index],style: TextStyle(color: Colors.black,fontSize: 24),)));
      },itemCount: controller.texts.length,),
    );

您忘记使用 Obx 小部件或类似的小部件包装脚手架正文内容,这些小部件可以侦听可观察到的变化并重新uild ui。

@override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('App'),
      ),
      body: Obx(() => controller.loading.isTrue
          ? Center(child: CircularProgressIndicator())
          : ListView.builder(
              itemBuilder: (context, index) {
                return Card(
                    child: ListTile(
                        title: Text(
                  controller.texts[index],
                  style: TextStyle(color: Colors.black, fontSize: 24),
                )));
              },
              itemCount: controller.texts.length,
            )),
    );
  }

此外,在您的控制器上,您不必每次都重新分配 loading 变量。就这样做吧loading.value = true;