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();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值