getx和奇怪的问题:UI上的文本不会更改



我试图创建一个搜索函数从firebase
和我使用getx的状态管理
我对抗这个奇怪的问题,当我尝试使用该函数直接它的工作,但当我使用firebase函数它没有。
我将详细解释代码片段。

这是我的搜索textForm

    TextFormField(
                    onChanged: (value) => database.searchForId(value),
                    decoration: InputDecoration(
                      focusColor: Colors.lightGreenAccent,
                      prefixIcon: Icon(
                        Icons.search,
                        color: Colors.lightGreenAccent,
                      ),
                      labelText: 'Search...',
                      labelStyle: TextStyle(color: Colors.lightGreenAccent),
                      border: OutlineInputBorder(),
                      focusedBorder: OutlineInputBorder(
                        borderSide:
                            const BorderSide(color: Colors.lightGreenAccent),
                      ),
                    )),

正如你所看到的,我正在使用更改值
数据库代码搜索

searchForId(searchText) {
    FirebaseFirestore.instance
        .collection('inventory')
        .where('id', isGreaterThanOrEqualTo: searchText)
        .get()
        .then((snapshot) {
      var data = snapshot.docs[0];
      if (data['id'] != searchText) {
        return;
      } else {
        searchController.changeId(data['id']);
        searchController.changeName(data['name']);
        searchController.changeQuantity(data['quantity']);
        searchController.changeCost(data['cost']);
        searchController.changeMyPrice(data['myPrice']);
      }
    });
  }

和控制器

class SearchController extends GetxController {
  var id = 'No info'.obs;
  var name = 'No info'.obs;
  var quantity = 'No info'.obs;
  var cost = 'No info'.obs;
  var myPrice = 'No info'.obs;
  changeId(_id) {
    id(_id);
    print(id);
  }

打印告诉我值被改变了,但从未在我的UI上更新它

Obx(() => Text(searchController.id.value))

所以我试图直接调用控制器(不使用数据库文件),它工作得很好,UI更新
有人知道为什么吗?
奇怪的是打印显示我的函数得到调用和工作良好(我的意思是当我使用数据库文件),但它从不更新UI

我想你忘记保存

SearchController searchcontroller = Get.put(SearchController());

如果你之前初始化了它只需使用

找到控制器
SearchController searchcontroller = Get.find();
var id = 'No info'.obs;
searchController.changeId(data['id']);
changeId(_id) {
  id(_id);
  print(id);
}

为了更新UI中的文本,您可以更新代码

changeId(_id) {
  id(_id);
  print(id);
  update(); // Calling update manually. update() is a function in GetxController to trigger the observable change.
}

changeId(String _id) {
  id.value = _id;
}

相关内容

  • 没有找到相关文章

最新更新