Flutter开发中三元表达式else分支如何实现页面跳转
可行解决方案
第一种是最推荐的实现方式:把跳转逻辑移到点击计数更新的方法里,导航操作属于业务侧逻辑,本来就不应该放在Widget返回的位置执行。
修改_Press方法代码如下:
void _Press(){ setState((){ _PressedNo = _PressedNo + 1; }); // 新增判断,计数超出列表长度时直接跳转,不需要等build阶段处理 if(_PressedNo >= question.length){ Navigator.of(context).push( MaterialPageRoute(builder: (context) => 你要跳转的目标页面()) ); return; } print(_PressedNo ); }
这时候你原来的三元表达式else分支返回占位Widget即可:
body:_PressedNo < question.length ? Container( child: RaisedButton( child: Text('yes'), onPressed:() { _Press(); }, ), ) : const SizedBox.shrink()
如果你确实需要在build阶段触发跳转,可以用帧回调在当前帧渲染完成后执行导航操作,else分支返回占位Widget即可,代码如下:
body:_PressedNo < question.length ? Container( child: RaisedButton( child: Text('yes'), onPressed:() { _Press(); }, ), ) : Builder( builder: (context) { // 在下一帧执行跳转,不会干扰当前Widget的构建流程 WidgetsBinding.instance.addPostFrameCallback((_) { Navigator.of(context).push( MaterialPageRoute(builder: (context) => 你要跳转的目标页面()) ); }); // 返回过渡占位Widget return const Center(child: CircularProgressIndicator()); }, )
内容的提问来源于stack exchange,提问作者ADev
相关产品推荐
相关产品推荐

