把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句代码...
}
最后修改:2021 年 06 月 07 日
如果觉得我的文章对你有用,请随意赞赏