Flutter中Navigator.pop报错:'!_debugLocked'断言失败求助
问题解决方案
错误原因
这个断言错误是因为**在setState内部调用了Navigator.pop**导致的。setState会触发组件树的重建流程,此时Flutter框架处于_debugLocked锁定状态,不允许执行导航类操作(这类操作会直接修改组件树结构),两者操作冲突就抛出了这个错误。
修复方案
把导航操作移出setState块,或者延迟到当前帧绘制完成后执行,以下是两种可行的修改方式:
方案1:直接分离setState和Navigator.pop
修改RadioListTile的onChanged回调:
onChanged: (val) { setState(() { initialValue = data.id!; print(data.name); }); // 把导航操作移出setState Navigator.pop<OccupationsResponseDto>(context, data); },
方案2:使用addPostFrameCallback延迟执行导航
如果担心状态更新和导航的时序问题,可以用框架的回调确保当前帧完成后再执行导航:
onChanged: (val) { setState(() { initialValue = data.id!; print(data.name); }); // 延迟到当前帧绘制完成后执行导航 WidgetsBinding.instance.addPostFrameCallback((_) { Navigator.pop<OccupationsResponseDto>(context, data); }); },
完整修改后的代码片段(方案1版本)
Expanded( child: SizedBox( height: AppMargin.dm_350, child: StatefulBuilder(builder: (context, setState) { return Container( padding: const EdgeInsets.only(right: AppMargin.dm_20), child: Scrollbar( interactive: true, thumbVisibility: true, thickness: AppMargin.dm_10, radius: Radius.circular(AppMargin.dm_20), scrollbarOrientation: ScrollbarOrientation.right, child: SingleChildScrollView( child: Column( children: [ for (int i = 0; i < list.length; i++) Theme( data: Theme.of(context).copyWith(dividerColor: Colors.transparent), child: CustomExpansionTile( title: BasicText( text: list[i].name!, textColor: AppColor.black, fontSize: AppMargin.dm_17, fontWeight: AppFont.fontWeightSemiBold), initiallyExpanded: true, trailing: SizedBox.shrink(), children: [ Column( children: list[i].occupationsResponseDto!.map((data) => RadioListTile( title: Text(data.name!, style: const TextStyle(fontSize: 14)), visualDensity: const VisualDensity( horizontal: VisualDensity.minimumDensity + 2, vertical: VisualDensity.minimumDensity + 2, ), groupValue: initialValue, value: data.id!, onChanged: (val) { setState(() { initialValue = data.id!; print(data.name); }); Navigator.pop<OccupationsResponseDto>(context, data); }, )).toList(), ), ], ), ), ], ), ), ), ); }), ), )
内容的提问来源于stack exchange,提问作者kapil tk
相关产品推荐
相关产品推荐

