Kozubi
Kozubi

Reputation: 539

Flutter Getx doesn't update String

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

Answers (1)

S. M. JAHANGIR
S. M. JAHANGIR

Reputation: 5060

Change name = RxString(s); to name.value = s; and Obx(() => Text(controller.name.toString())), to Obx(() => Text(controller.name.value)),

Upvotes: 9

Related Questions