我试图创建一个搜索函数从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;
}