Flutter中PageController调用dispose、jumpToPage报空安全错误如何解决?
问题原因
你声明的pageController是可空类型PageController?,Dart空安全规则要求不能直接对可空类型调用实例方法,哪怕你在initState中已经完成赋值,编译器依然会判定该变量存在为null的可能性,所以会触发编译报错。
至于dispose方法也要求非空的原因:编译器需要覆盖所有执行场景,极端情况下存在initState未执行完成就触发dispose的可能,所以同样要求你处理空值场景。
解决方法
给你三个适配方案,按推荐优先级排序:
- 方案1(最优,适配你的业务场景):用
late关键字声明非空变量
你明确知道pageController会在使用前完成初始化,且后续不会再修改引用,可以直接修改声明代码:
后续调用// 替换原来的 PageController? pageController; late final PageController pageController;dispose、jumpToPage都不需要额外加符号,直接按原有代码调用即可,编译器会确认你已经在使用前完成赋值。 - 方案2(稳妥兼容):使用可选调用符
?
调用方法时添加?,如果变量为null时会直接跳过当前方法调用,不会触发报错:// dispose方法内 pageController?.dispose(); // onTap方法内 pageController?.jumpToPage(pageIndex); - 方案3(确认非空时使用):使用非空断言符
!
你100%确认调用时变量一定不为空的情况下,可以添加!强制转换为非空类型:
注意如果运行时变量为null,会直接抛出空异常,需要谨慎使用。// dispose方法内 pageController!.dispose(); // onTap方法内 pageController!.jumpToPage(pageIndex);
内容的提问来源于stack exchange,提问作者imdsk
相关产品推荐
相关产品推荐

