Flutter中如何获取Navigator.pop返回的bool类型值?
方法一:通过StatefulWidget状态变量更新UI
这是最直接的解决方案,利用Flutter的响应式UI特性,将返回值存入状态变量并触发重绘:
- 确保当前页面是
StatefulWidget(若不是则转换) - 声明状态变量存储返回的布尔值:
bool? _likedStatus;
- 在按钮的
onPressed回调中获取返回值后,调用setState更新状态:
ElevatedButton( child: const Text("Go to new page"), onPressed: () async { final answer = await Navigator.of(context).push<bool>( MaterialPageRoute( builder: (context) => const VideoScreen("Did you like the video?"), ), ); // 更新状态触发UI重绘 setState(() { _likedStatus = answer; }); }, ), // 根据状态变量动态显示内容 Text(_likedStatus == null ? "还未选择" : _likedStatus! ? "喜欢这部影片" : "不喜欢这部影片"),
方法二:使用回调函数(适用于组件拆分场景)
如果按钮和文本显示区域属于不同组件,可以通过回调传递返回值:
- 封装按钮组件并定义回调参数:
class VoteButton extends StatelessWidget { final Function(bool?) onVoteResult; const VoteButton({super.key, required this.onVoteResult}); @override Widget build(BuildContext context) { return ElevatedButton( child: const Text("Go to new page"), onPressed: () async { final answer = await Navigator.of(context).push<bool>( MaterialPageRoute( builder: (context) => const VideoScreen("Did you like the video?"), ), ); // 调用回调传递结果 onVoteResult(answer); }, ); } }
- 在父组件中使用该按钮并处理回调:
class HomePage extends StatefulWidget { const HomePage({super.key}); @override State<HomePage> createState() => _HomePageState(); } class _HomePageState extends State<HomePage> { bool? _likedStatus; @override Widget build(BuildContext context) { return Column( children: [ VoteButton( onVoteResult: (result) { setState(() { _likedStatus = result; }); }, ), Text(_likedStatus == null ? "还未选择" : _likedStatus! ? "喜欢" : "不喜欢"), ], ); } }
核心逻辑说明
两种方法的本质都是让返回值触发状态更新——Flutter是声明式UI框架,只有状态变化时才会重新渲染对应组件。如果是复杂页面或跨页面共享状态,可扩展使用Provider、Riverpod等状态管理库,但简单场景下上述方案足够。
内容的提问来源于stack exchange,提问作者beingmathematician
相关产品推荐
相关产品推荐

