Flutter Getx不更新字符串。

5
我尝试检查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'))
          ],
        ),
      ),
    );
  }
}

问题在于: 当我更新name属性时,Text部件仍然保持不变。它应该发生在这里: Obx(() => Text(controller.name.toString())), 使用int类型是正常工作的。我错过了什么吗?

我用GetBuilder让它正常工作了。但我不知道为什么Obx没有触发更新。


谢谢,我刚开始使用Getx,这非常有帮助。 - Brian Oh
1个回答

8

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


1
我标记它为正确,因为:name.value = s 是正确的写法 :) 谢谢 - Kozubi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接