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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:36:04