Reputation: 539
I try to check GetX package. And i'm stuck with updating String.obs
Here is sample code:
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'))
],
),
),
);
}
}
Problem is:
when I update name
property Text widget remain intact. It should happen here:
Obx(() => Text(controller.name.toString())),
Using int is working fine. What I'm missing here?
I make it to work using GetBuilder. But I dunno why Obx does not trigger update.
Upvotes: 5
Views: 4921
Reputation: 5060
Change name = RxString(s);
to name.value = s;
and Obx(() => Text(controller.name.toString())),
to Obx(() => Text(controller.name.value)),
Upvotes: 9