Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 当某个文本小部件的属性发生变化时,如何对其进行反应式更新以显示该对象的属性?这是用GetX做的吗_Flutter_Getx - Fatal编程技术网

Flutter 当某个文本小部件的属性发生变化时,如何对其进行反应式更新以显示该对象的属性?这是用GetX做的吗

Flutter 当某个文本小部件的属性发生变化时,如何对其进行反应式更新以显示该对象的属性?这是用GetX做的吗,flutter,getx,Flutter,Getx,我试图理解当TextFormField中的值发生更改时,如何在颤振应用程序中使用GetX包在文本小部件中获得响应式更新。 文本小部件中显示的是可观察对象的属性。正是这个属性从TextFormField更新。 该值在控制器中正确更新,但在小部件中未正确更新。 如果我直接使用字符串变量,它会正确更新。但是一旦我使用了一个对象,它就不再更新了 这是我的应用程序的一个非常简单的示例,只是为了确保基本知识被理解 这是我的密码: class User { String name = "&quo

我试图理解当TextFormField中的值发生更改时,如何在颤振应用程序中使用GetX包在文本小部件中获得响应式更新。 文本小部件中显示的是可观察对象的属性。正是这个属性从TextFormField更新。 该值在控制器中正确更新,但在小部件中未正确更新。 如果我直接使用字符串变量,它会正确更新。但是一旦我使用了一个对象,它就不再更新了

这是我的应用程序的一个非常简单的示例,只是为了确保基本知识被理解

这是我的密码:

class User {
  String name = "";
}

class TestController extends GetxController {
  TestController();

  final user = User().obs;
}

class MyHomePage extends StatelessWidget {
  final c = Get.put(TestController());
  final String title;
  MyHomePage({this.title});
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(title),
      ),
      body: Center(
        child: Container(
          width: Get.width * 0.8,
          height: Get.height * 0.8,
          child: Column(
            children: [
              Obx(() => Text(c.user.value.name)),
              TextFormField(
                onChanged: (value) => c.user.value.name = value,
              ),
            ],
          ),
        ),
      ),
    );
  }
}

非常感谢你的帮助

好的,多亏了youtuber法典,我找到了解决方案

为了能够在更改对象的属性值时反应性地更新UI,即使该对象设置为可观察,也需要使该属性也可观察

所以正确的代码如下所示

class User {
  final name = "".obs;
}

class TestController extends GetxController {
  TestController();

  final user = User().obs;
}

class MyHomePage extends StatelessWidget {
  final c = Get.put(TestController());
  final String title;
  MyHomePage({this.title});
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(title),
      ),
      body: Center(
        child: Container(
          width: Get.width * 0.8,
          height: Get.height * 0.8,
          child: Column(
            children: [
              Obx(() => Text(c.user.value.name.value)),
              TextFormField(
                onChanged: (value) => c.user.value.name.value = value,
              ),
            ],
          ),
        ),
      ),
    );
  }
}

将您的
onChanged()
fn更新为此

Obx(() => Text(c.user.value.name)),
TextFormField(onChanged: (value) {
  c.user.value.name = value;
  c.user.refresh();
}),

您还可以通过使用getter和setter来避免在任何使用它的地方添加.value,从而使它更干净。谢谢您的回答,这也很有效。