Flutter使用!空断言操作符调用ZoomDrawer.of(context)!.toggle()报错如何解决
问题原因
ZoomDrawer.of(context)方法的返回值为可空类型ZoomDrawerState?,直接使用!做非空断言属于不安全操作,Dart的空安全静态检查会抛出错误/警告。如果运行时当前上下文不存在对应的ZoomDrawer父组件,直接使用!还会触发空指针异常。
解决方法
- 方案1:优先做空判断再调用(最推荐)
通过非空判断触发Dart的类型提升,无需使用!即可调用方法,同时避免运行时空崩:
import 'package:flutter/material.dart'; import 'package:flutter_zoom_drawer/flutter_zoom_drawer.dart'; class MenuWidget extends StatelessWidget { @override Widget build(BuildContext context) => IconButton( icon: Icon(Icons.menu), onPressed: () { final zoomDrawer = ZoomDrawer.of(context); if (zoomDrawer != null) { zoomDrawer.toggle(); } }, ); }
- 方案2:确认上下文一定存在
ZoomDrawer时压制警告
如果你100%确定MenuWidget一定放在ZoomDrawer的子组件树中,不会出现空返回的情况,可以添加忽略注释压制编辑器提示,不建议常规场景使用:
// 忽略注释内容可根据编辑器实际错误提示调整 // ignore: unnecessary_non_null_assertion onPressed: () => ZoomDrawer.of(context)!.toggle(),
- 方案3:检查组件层级
如果加了非空判断后点击按钮没有响应,说明当前上下文找不到ZoomDrawer实例,需要确认MenuWidget是ZoomDrawer的menuScreen或者mainScreen的子组件,父级上下文中不存在ZoomDrawer的情况下无论如何都无法获取到实例。
内容的提问来源于stack exchange,提问作者Danilo
相关产品推荐
相关产品推荐

