Flutter Getx 不更新 String

Koz*_*ubi 5 android flutter flutter-getx

我尝试检查 GetX 包。我一直在更新 String.obs

这是示例代码:

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

class MyController extends GetxController {
  var name = "JOHN".obs;
  var age = 33.obs;

  incrementAge() {
    age++;
  }

  changeName(String s) {
    name = RxString(s);
  }
}

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  TextEditingController textEditingController = TextEditingController();
  @override
  Widget build(BuildContext context) {
    MyController controller = MyController();
    return Scaffold(
      appBar: AppBar(
        title: Text('widget.title'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Obx(() => Text(controller.name.toString())),
            Obx(() => Text('Age: ${controller.age}')),
            TextButton(
                onPressed: () {
                  controller.incrementAge();
                },
                child: Text('add age')),
            TextField(
              controller: textEditingController,
            ),
            TextButton(
                onPressed: () {
                  controller.name =
                      controller.changeName(textEditingController.text);
                },
                child: Text('ChangeName'))
          ],
        ),
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

问题是:当我更新name属性文本小部件时保持不变。它应该发生在这里: Obx(() => Text(controller.name.toString())),使用 int 工作正常。我在这里缺少什么?

我使用 GetBuilder 让它工作。但我不知道为什么 Obx 不触发更新。

S. *_*GIR 9

更改name = RxString(s);name.value = s;Obx(() => Text(controller.name.toString())),Obx(() => Text(controller.name.value)),