把flutter版本升级到2.2.1,之前版本好像是1.x.x,手动更新完依赖库之后,能够运行项目,但是还是报错。
报错内容为,并且指向了首页的页面引用的Widget
Null check operator used on a null value
后来经过调试发现是界面上用了一个Tab控件导致的,在使用Tab的TabController时里面引用的ScrollableState报错 ,具体代码:
_controller = TabController(
initialIndex: 1,
length: _tabValues.length,
vsync: ScrollableState(),
);
进行断点调试了一下,错误载ScrollableState内部
ScrollPosition get position => _position!;
是因为_position为空导致的。后来在网上找到一段说是把vsync字段值改为this即可,果然可行,具体解释如下:
使用TabController时,vsync字段需要传入一个TickerProvider类型的值,原来的ScrollableState虽然mixin了TickerProvider,但是可能在构建过程中_position没有赋值导致空指针,所以尝试vsync赋值为this,让本身的State类mixin TickerProvider。
修改后的内容
class _IndexPageState extends State<IndexPage> with AutomaticKeepAliveClientMixin, TickerProviderStateMixin {
//省略N句代码...
@override
void initState() {
//省略N句代码...
_controller = TabController(
initialIndex: 1,
length: _tabValues.length,
vsync: this,
);
//省略N句代码...
}
//省略N句代码...
}
1 条评论
我也遇到了这个问题