重新访问应用程序屏幕时,Flutter GetX 控制器不调用方法
Flutter GetX controller not calling method when revisit the app screen
我是 Flutter GetX 包的新手,在使用 flutter GetX 包时遇到问题。我有几个应用程序屏幕,其中一个屏幕用于列出数据库中的所有产品。
在我的产品控制器中,我正在从数据库中获取所有数据并使用列表视图显示,如下面给定的代码,它工作正常。
问题: 当我从另一个控制器插入新记录并返回到产品列表控制器时,它不会显示新添加的数据。实际上这次 onInit
方法不会触发。
控制器代码
class ProductIndexCtrl extends GetxController {
var products = [].obs;
@override
void onInit() {
super.onInit();
getAll();
}
void getAll() {
Product.getAll().then((jsonList) {
products.value = Product.fromJsonList(jsonList);
});
}
}
class ProductCreateCtrl extends GetxController {
void saveData(Product product) {
...
...
//after successful insert
Get.toNamed('productIndex');
}
}
产品索引屏幕
final ctrl = Get.put(ProductIndexCtrl());
GetX<ProductIndexCtrl>(builder: (controller) {
return _listview(controller.products);
}
Widget _listview(data) {
...
...
}
由于 GetX 依赖项管理器控制着依赖项的生命周期,因此您不应手动调用它们。何时调用它们是 GetX 的责任。
因此您需要在 ProductCreateCtrl
的 saveData()
方法中手动调用 ProductIndexCtrl
控制器的 getAll()
方法,例如:
saveData(Product product){
....
....
final indexCtrl= Get.find<ProductIndexCtrl>();
indexCtrl.getAll();
}
通过return转到该页面,您可以return将新信息本地化到上一页
>控制器代码
class ProductIndexCtrl extends GetxController {
var products = [].obs;
@override
void onInit() {
super.onInit();
getAll();
}
void getAll() {
Product.getAll().then((jsonList) {
products.value = Product.fromJsonList(jsonList);
});
}
}
> 产品索引屏幕
class ProductCreateCtrl extends GetxController {
void saveData(Product product) {
...
...
//after successful insert
Get.back(result: product);
}
}
返回时获取数据
Get.toName('ProductCreateCtrl').then(result){
products.add(result);
}
我是 Flutter GetX 包的新手,在使用 flutter GetX 包时遇到问题。我有几个应用程序屏幕,其中一个屏幕用于列出数据库中的所有产品。
在我的产品控制器中,我正在从数据库中获取所有数据并使用列表视图显示,如下面给定的代码,它工作正常。
问题: 当我从另一个控制器插入新记录并返回到产品列表控制器时,它不会显示新添加的数据。实际上这次 onInit
方法不会触发。
控制器代码
class ProductIndexCtrl extends GetxController {
var products = [].obs;
@override
void onInit() {
super.onInit();
getAll();
}
void getAll() {
Product.getAll().then((jsonList) {
products.value = Product.fromJsonList(jsonList);
});
}
}
class ProductCreateCtrl extends GetxController {
void saveData(Product product) {
...
...
//after successful insert
Get.toNamed('productIndex');
}
}
产品索引屏幕
final ctrl = Get.put(ProductIndexCtrl());
GetX<ProductIndexCtrl>(builder: (controller) {
return _listview(controller.products);
}
Widget _listview(data) {
...
...
}
由于 GetX 依赖项管理器控制着依赖项的生命周期,因此您不应手动调用它们。何时调用它们是 GetX 的责任。
因此您需要在 ProductCreateCtrl
的 saveData()
方法中手动调用 ProductIndexCtrl
控制器的 getAll()
方法,例如:
saveData(Product product){
....
....
final indexCtrl= Get.find<ProductIndexCtrl>();
indexCtrl.getAll();
}
通过return转到该页面,您可以return将新信息本地化到上一页
>控制器代码
class ProductIndexCtrl extends GetxController {
var products = [].obs;
@override
void onInit() {
super.onInit();
getAll();
}
void getAll() {
Product.getAll().then((jsonList) {
products.value = Product.fromJsonList(jsonList);
});
}
}
> 产品索引屏幕
class ProductCreateCtrl extends GetxController {
void saveData(Product product) {
...
...
//after successful insert
Get.back(result: product);
}
}
返回时获取数据
Get.toName('ProductCreateCtrl').then(result){
products.add(result);
}