GoRouter onExit示例适配空安全的实现方案求助
解决go_router onExit弹窗的空安全类型错误
问题根源是go_router的onExit回调要求返回FutureOr<bool>,但原示例中showDialog的返回值是Future<bool?>——空安全下bool?无法直接兼容bool类型,因此触发类型错误。
以下是适配空安全的修改方案:
修改后的代码示例
onExit: (context) async { final exitConfirmed = await showDialog<bool>( context: context, // 可选:禁止点击弹窗外部关闭,避免返回null barrierDismissible: false, builder: (context) => AlertDialog( title: const Text('确认离开?'), content: const Text('确定要退出当前页面吗?'), actions: [ TextButton( onPressed: () => Navigator.of(context).pop(false), child: const Text('取消'), ), TextButton( onPressed: () => Navigator.of(context).pop(true), child: const Text('确定'), ), ], ), ); // 将null转换为明确的bool值,这里默认不允许退出(返回false) return exitConfirmed ?? false; },
关键修改点
- 明确指定
showDialog<bool>的泛型,让返回类型约束更清晰 - 通过
await获取弹窗结果,并用??运算符将可能的null转为合法的bool值(可根据业务需求将默认值改为true) - 可选添加
barrierDismissible: false,禁止用户点击弹窗外部关闭,从根源避免null结果的产生
内容的提问来源于stack exchange,提问作者Lucien Chardon
相关产品推荐
相关产品推荐

