首页 > 解决方案 > 如何在运行时仅实例化一次列表(颤振)?

问题描述

我写了一个可以添加对象的页面。现在我也希望能够删除对象。但是,如果在我切换到另一个页面(在我的底部导航栏中)并返回后尝试删除一个对象,我总是会收到错误消息。错误:setState() called after dispose(): _DevicesPageHeroState#09bb8(lifecycle state: defunct, not mounted)

这可能是因为如果我重新加载DevicesPageHero. 我认为static可能会解决它,但看起来它没有。

class _DevicesPageHeroState extends State<DevicesPageHero> {
  List<String> newMatrixNames = ['Default'];
  static List<Matrix> matrixList = [
    Matrix(
        heroTag: 'm1',
        name: 'Matrix Kitchen',
        matrixIMG: 'imgs/matrix1.png',
        size: 10),
  ];

  static List<Widget> matrixCall = [
    MatrixPageOne(
      matrix: matrixList[0],
    )
  ];

matrixCall 列表用于告诉以后应该加载哪个页面。我添加了一个这样的列表元素:

  void addMatrix(String name, int size) {
    final Matrix newMat = Matrix(
        name: name,
        matrixIMG: 'imgs/matrix4.png',
        size: size,
        heroTag: DateTime.now().toString());

    setState(() {
      matrixList.add(newMat);
      matrixCall.add(MatrixPageOne(
        matrix: newMat,
        delm: deleteMatrix,
      ));
      print("matrixList");
      print(matrixList);
    });
  }

并像这样删除它:

  void deleteMatrix(Matrix matrix) {
    setState(() {
      matrixCall.removeAt(matrixList.indexOf(matrix));
      matrixList.remove(matrix);

      print(matrixList.length);
    });
  }

如果您有任何想法,我只能在第一次加载时实例化我的矩阵列表,DevicesPageHero我会非常高兴。抱歉,如果我刚从编码开始做一些过于复杂的事情。

编辑:这是一步一步产生的错误(对不起我的绘画技巧): 错误一步一步 这里是确切的错误: 错误

标签: flutterdartinstantiation

解决方案


确保在 setState 方法发生之前检查挂载状态:

@override
void setState(fn) {
    if (mounted) {
      super.setState(fn);
    }
  }

该片段将帮助您解决您遇到的错误。


推荐阅读