You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 09:29:55