出现错误
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();
}