小编Mic*_*ael的帖子

如何使用dispose防止内存泄漏

我有这个初始化状态方法:

@override
  void initState() {
    super.initState();

    getNumber(index).then((number) {
      if (number> 1000) {
        number = number/ 1000;
        setState(() {
          flag = true;
          _num = number.toInt().toString();
        });
      } else {
        setState(() {
          _num = number.toInt().toString();
        });
      }
    });
  }
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误:

如果您对不再出现在窗口小部件树中的窗口小部件(例如,其父窗口小部件在其构建中不再包含该窗口小部件)的状态对象调用 setState() ,则会发生此错误。当代码从计时器或动画回调调用 setState() 时,可能会发生此错误。首选的解决方案是取消计时器或停止监听 dispose() 回调中的动画。另一种解决方案是在调用 setState() 之前检查此对象的“mounted”属性,以确保该对象仍在树中。

如果调用 setState() ,则此错误可能表示内存泄漏,因为另一个对象在从树中删除后仍保留对此 State 对象的引用。为避免内存泄漏,请考虑在 dispose() 期间中断对此对象的引用。

我如何以正确的方式使用处置?

dart flutter

15
推荐指数
2
解决办法
5948
查看次数

按下后退按钮时如何清除数据

我有 2 个页面,每个页面都有相同的功能,initState返回一个列表。

第一页具有常规功能,第二页具有相同的功能,但带有返回过滤列表的过滤器。

问题是,当我按第二页中的“后退按钮”并返回第一页时,我得到的是过滤列表而不是常规列表。

在转到第一页之前如何“清除”第二页的数据?

功能:

  Future fetchProducts({flag = false})  {
  return http
        .get(
            'MyAddress')
        .then<Null>((http.Response response) {
      final Map<String, dynamic> listData = json.decode(response.body); 
      listData.forEach((String id, dynamic fetchedData) {
        final Product product = Product(
          id: id, 
          address: fetchedData['address'],
          image: fetchedData['imageUrl'],
        );
        fetchedData.add(product);   
      });
      _product = flag
          ? fetchedData.where((Product product) {        
              return product.userId == 1;
            }).toList()
                     : fetchedData;
    });
  }
Run Code Online (Sandbox Code Playgroud)

dart flutter

5
推荐指数
1
解决办法
4686
查看次数

标签 统计

dart ×2

flutter ×2