Flutter 开发过程问题二

出现错误
The method ‘markNeedsBuild’ was called on null

#0 State.setState (package:flutter/src/widgets/framework.dart:1191)
#1 _CreditsDetailsState.lostCreditsDetail.<anonymous closure> 
...

多是因为页面还没构建完,异步和回调多是已销毁
即快速进入又快速退出情况下发生

可以在 setState 时加入 mounted 判断
写一个通用函数来使用

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

若是在 init 当中有异步请求方法可以通过以下方式

@override
void initState() {
  super.initState();
  WidgetsBinding.instance.addPostFrameCallback((callback) {
    // 异步请求
  });
}

或使用 FutureBuilder 组件来调用接口

题外话:
如果在页面中有设置定时器或者控制器,记得在 dispose 时销毁,否则定时器是会一直执行的,在销毁时可以先判断下是否存在再销毁,之前因为没有判断也报出了 The method ‘dispose’ was called on null 错误

@override
void dispose() {
  // 定时器
  if (timerCount != null) timerCount.cancel();
  // 控制器
  if (controller != null) controller.dispose();
  super.dispose();
}
发布了15 篇原创文章 · 获赞 4 · 访问量 3万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览