Flutter调用ScaffoldState的showBottomSheet报潜在空类型错误如何解决
报错原因
- 这是Flutter空安全机制的强制校验触发的报错:
GlobalKey<ScaffoldState>的currentState属性为可空类型ScaffoldState?,只有当key绑定的Scaffold组件已经被挂载到Widget树时,currentState才会有非空值,编译器无法保证调用时currentState一定非空,所以直接调用方法会抛出编译错误。
解决方案
你可以任选以下任意一种方式修改代码即可解决报错:
方式1:空判断后调用(最稳妥)
先判断currentState非空再执行逻辑,避免空调用风险:
floatingActionButton: FloatingActionButton( onPressed: () { if (scaffoldKey.currentState != null) { // 确认非空后用!断言调用 scaffoldKey.currentState!.showBottomSheet( (context) => Container( width: double.infinity, height: 120.0, color: Colors.red ), ); } }, child: const Icon(Icons.add), ),
方式2:空安全调用符简化写法
直接使用?.空安全调用符,当currentState为空时会自动跳过后续方法执行,不会触发报错:
floatingActionButton: FloatingActionButton( onPressed: () { scaffoldKey.currentState?.showBottomSheet( (context) => Container( width: double.infinity, height: 120.0, color: Colors.red ), ); }, child: const Icon(Icons.add), ),
额外注意:必须确认你的页面Scaffold组件已经绑定了该key,否则
currentState会始终为null,底部弹窗无法正常弹出,绑定配置如下:Scaffold( key: scaffoldKey, // 其余Scaffold配置项 )
内容的提问来源于stack exchange,提问作者Diaa Nassar
相关产品推荐
相关产品推荐

