Flutter空安全模式下调用showBottomSheet出现空相关报错如何解决?
问题根因
- Flutter 空安全规则下,
GlobalKey.currentState为可空类型,未做非空校验时无法直接调用实例方法,对应你收到的第一个编译错误 - 添加
!后仍报错,是因为你没有将声明的scaffoldkey绑定到对应Scaffold组件的key参数上,导致currentState实际取值为null,强行用!解空就触发了空操作数运行时异常
解决步骤
- 先完成GlobalKey和Scaffold的绑定,必须在Scaffold的参数中指定key为你声明的
scaffoldkey:
var scaffoldkey = GlobalKey<ScaffoldState>(); @override Widget build(BuildContext context) { return Scaffold( key: scaffoldkey, // 必须添加该行完成绑定 // 你的其他Scaffold配置 body: // 你的页面内容 ); }
- 调用
showBottomSheet时做非空处理,推荐用条件调用符?.避免空安全报错:
onPressed: () { scaffoldkey.currentState?.showBottomSheet( (context) => Container( color: Colors.red, padding: const EdgeInsets.all(20.0), ), ); },
如果确认key已经完成绑定,也可以使用!解空:
onPressed: () { scaffoldkey.currentState!.showBottomSheet( (context) => Container( color: Colors.red, padding: const EdgeInsets.all(20.0), ), ); },
替代方案(无需GlobalKey)
如果不想维护GlobalKey,也可以直接通过当前上下文获取ScaffoldState调用方法:
onPressed: () { Scaffold.of(context).showBottomSheet( (context) => Container( color: Colors.red, padding: const EdgeInsets.all(20.0), ), ); },
内容的提问来源于stack exchange,提问作者Nyctophilius
相关产品推荐
相关产品推荐

