当我在颤振中使用 getX 时,小部件不会改变

时间:2021-07-11 08:45:23

标签: flutter dart

状态用getX管理,初始状态为false。 当按钮按下时,它变为true,我尝试将其表示为Text 小部件以指示更改,但小部件并没有改变。有什么问题?

文本小部件一直只显示“假”

import 'package:flutter/material.dart';
import 'package:get/get.dart';

void main() {
  runApp(GetMaterialApp(home : Home()));
}

class BoolItem extends GetxController{
  dynamic item=false.obs;
  changeItem()=> item=true;
}


class Home extends StatefulWidget {
  const Home({ Key? key }) : super(key: key);

  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
  @override
  Widget build(context) {
    final BoolItem b=Get.put(BoolItem());
    return Scaffold(
      appBar: AppBar(title: Text('welcome')),

      body: Center(
        child: Column(children: <Widget>[
          FloatingActionButton(child: Icon(Icons.add), 
          onPressed: (){
            b.changeItem();
            }
          ),
          b.item == true 
          ? Text('true')
          : Text('false')
        ]
    ))        
    );
  }
}

2 个答案:

答案 0 :(得分:0)

您应该从小部件的 final BoolItem b = Get.put(BoolItem()); 方法中删除 build。每次调用 build 方法时,都会创建一个新的 BoolItem,其值为 false,这导致它永远不会更改为 true。

答案 1 :(得分:0)

FloatingActionButton 包裹 Obx

Obx(
()=> FloatingActionButton(child: Icon(Icons.add), 
      onPressed: (){
        b.changeItem();
       }
      ),
      b.item == true 
        ? Text('true')
        : Text('false')
)

同时将 changeItem()=> item=true; 更新为 changeItem()=> item.value=true;

相关问题