我尝试检查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没有触发更新。