Flutter Getx 不更新字符串
Flutter Getx doesn't update String
我尝试检查 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
属性 文本小部件时保持不变。它应该发生在这里:
Obx(() => 文本(controller.name.toString())),
使用 int 工作正常。我在这里缺少什么?
我使用 GetBuilder 让它工作。但是我不知道为什么Obx不触发更新。
将 name = RxString(s);
更改为 name.value = s;
和 Obx(() => Text(controller.name.toString())),
到 Obx(() => Text(controller.name.value)),
我尝试检查 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
属性 文本小部件时保持不变。它应该发生在这里:
Obx(() => 文本(controller.name.toString())),
使用 int 工作正常。我在这里缺少什么?
我使用 GetBuilder 让它工作。但是我不知道为什么Obx不触发更新。
将 name = RxString(s);
更改为 name.value = s;
和 Obx(() => Text(controller.name.toString())),
到 Obx(() => Text(controller.name.value)),