重新访问应用程序屏幕时,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 的责任。

因此您需要在 ProductCreateCtrlsaveData() 方法中手动调用 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); 

}