【问题标题】:Flutter GetX state isn't changingFlutter GetX 状态没有改变
【发布时间】:2021-11-06 20:54:14
【问题描述】:

大家好,我在 getx 状态管理方面需要帮助, 我有一个布尔值加载默认情况下它是假的,之后它会在加载数据后改变

     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());
  }

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

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,),
    );

【问题讨论】:

    标签: flutter api flutter-getx


    【解决方案1】:

    您忘记使用Obx 小部件或类似的小部件来包装脚手架主体内容,这些小部件会监听可观察到的变化并重建用户界面。

    @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;

    【讨论】:

      猜你喜欢
      • 2022-01-21
      • 2021-08-20
      • 2021-12-10
      • 2021-08-18
      • 2020-05-27
      • 2021-10-07
      • 2021-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多