Flutter Stripe空检查运算符报错:空值上使用了空检查运算符
先查Navigator的上下文有效性
调用Navigator.push时的context可能已经失效或者为空。比如页面已被销毁还执行跳转,或是用了未正确初始化的GlobalKey获取上下文。可以在跳转前加判断:if (mounted) { // 针对State类 Navigator.push(context, ...); }或者直接校验
context非空。排查跳转目标页面的参数和初始化逻辑
别只盯着Navigator.push这行代码,大概率是目标页面出了问题。比如跳转时传递的参数为空,或是目标页面的initState/构造函数里直接使用了未做非空校验的变量,导致初始化时报错,看起来像是卡在跳转步骤。检查传递的参数是否非空,目标页面是否正确处理了可选参数。异步回调里的跳转要注意页面状态
Stripe支付是异步操作,如果在支付成功的回调里执行跳转,很可能回调触发时当前页面已经被销毁,此时上下文会变成空值导致报错。在回调里先判断mounted状态再执行跳转,或是用WidgetsBinding.instance.addPostFrameCallback确保在页面正常状态下执行跳转。捕获异常打印堆栈定位具体位置
泛泛的空值提示没用,直接用try-catch包裹跳转代码,打印异常和堆栈:try { await Navigator.push(context, MaterialPageRoute(builder: (_) => TargetPage())); } catch (e, stackTrace) { print('跳转报错详情: $e'); print('堆栈追踪: $stackTrace'); }堆栈信息会精准指出是空哪个变量或是哪个方法里出的空值,直接定位问题根源。
检查插件版本兼容性
之前正常现在出问题,有没有最近升级过Flutter或者flutter_stripe插件?版本不兼容也可能导致这类奇怪的空值问题。可以回退到之前能用的插件版本试试,在pubspec.yaml里指定具体版本号。
内容的提问来源于stack exchange,提问作者Ahmed Bashir
相关产品推荐
相关产品推荐

