Flutter 如何仅在布尔为真时导航?

Flutter 如何仅在布尔为真时导航?,flutter,navigation,widget,boolean,Flutter,Navigation,Widget,Boolean,如何仅在选择小部件时导航到其他页面?我希望在用户选择其性别时允许导航。否则,页面将不移动 我试过了,但在枪口上有个错误 onPressed: user.genderIsSelected ? () { Navigator.push( context, new MaterialPageRoute(

如何仅在选择小部件时导航到其他页面?我希望在用户选择其性别时允许导航。否则,页面将不移动

我试过了,但在枪口上有个错误

 onPressed: user.genderIsSelected
              ? () {
                  Navigator.push(
                      context,
                      new MaterialPageRoute(
                          builder: (BuildContext context) => Interests()));
                }
              : null,
下面是我的性别无状态小部件代码。它从性别小部件中的用户类获取bool(user.genderIsSelected):

class Gender extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final height = MediaQuery.of(context).size.height;
    final width = MediaQuery.of(context).size.width;
    return Scaffold(
      floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
      floatingActionButton: Container(
        height: height * 0.054,
        width: width * 0.87,
        child: FloatingActionButton.extended(
          isExtended: true,
          backgroundColor: Color(0xff0B84FE),
          materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
          onPressed: user.genderIsSelected
              ? () {
                  Navigator.push(
                      context,
                      new MaterialPageRoute(
                          builder: (BuildContext context) => Interests()));
                }
              : null,
          label: Text('NEXT',
              style: TextStyle(
                  color: Colors.white.withOpacity(0.87),
                  fontWeight: FontWeight.bold,
                  letterSpacing: 2.1,
                  fontSize: 13.5)),
        ),
      ),
      backgroundColor: Colors.black,
      body: SafeArea(
        child: Column(children: <Widget>[
         
          Container(
            
              child: Center(
                child: Text(
                  'Which gender do you identify as?',
                  style: TextStyle(
                      fontWeight: FontWeight.w600,
                      letterSpacing: 1.2,
                      fontSize: 21),
                ),
              ),
           
         child: genderWidget()),
  
BRACKETS...

类性别扩展无状态小部件{
@凌驾
小部件构建(构建上下文){
最终高度=MediaQuery.of(context).size.height;
最终宽度=MediaQuery.of(context).size.width;
返回脚手架(
floatingActionButtonLocation:floatingActionButtonLocation.centerDocked,
浮动操作按钮:容器(
高度:高度*0.054,
宽度:宽度*0.87,
子级:FloatingActionButton.extended(
扩展:是的,
背景颜色:颜色(0xff0B84FE),
MaterialTargetSize:MaterialTargetSize.shrinkWrap,
onPressed:user.genderIsSelected
? () {
导航器。推(
上下文
新材料路线(
生成器:(BuildContext上下文)=>Interests());
}
:null,
标签:文本('NEXT',
样式:TextStyle(
颜色:颜色。白色。不透明度(0.87),
fontWeight:fontWeight.bold,
字母间距:2.1,
字体大小:13.5),
),
),
背景颜色:Colors.black,
正文:安全区(
子项:列(子项:[
容器(
儿童:中心(
子:文本(
“你认为哪种性别?”,
样式:TextStyle(
fontWeight:fontWeight.w600,
字母间距:1.2,
尺寸:21),,
),
),
child:genderWidget()),
括号。。。
下面是带有bool的genderWidget。我有一个用户类。它返回到上面的主要性别无状态小部件

class genderWidget extends StatefulWidget {
  @override
  _genderWidgetState createState() => _genderWidgetState();
}

class user with ChangeNotifier {
  static bool genderIsSelected;
  notifyListeners();
}

class _genderWidgetState extends State<genderWidget> {
  bool amMale = false;
  bool amFemale = false;
  bool genderIsSelected = false;

  @override
  Widget build(BuildContext context) {
    final height = MediaQuery.of(context).size.height;
    final width = MediaQuery.of(context).size.width;
    return Padding(
      padding: EdgeInsets.all(width * 0.03),
      child: Row(
        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
        children: <Widget>[
          GestureDetector(
            onTap: () {
              setState(() {
                if (amMale == false) {
                  amMale = true;
                  amFemale = false;
                  genderIsSelected = true;
                  user.genderIsSelected = genderIsSelected;
                } else {
                  amFemale = false;
                }
              });
              print('amMale');
            },
            child: Container(
                height: height * 0.12,
                width: width * 0.27,
                decoration: BoxDecoration(
                  boxShadow: [
                    BoxShadow(
                      color: Colors.indigo,
                 
                    )
                  ],
                  borderRadius: BorderRadius.circular(12),
                  color: amMale ? Colors.grey : Colors.black,
                ),
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                  children: <Widget>[
                 
                    Padding(
                      padding: EdgeInsets.only(bottom: height * 0.009),
                      child: Text('man',
                          style: TextStyle(
                              color: amMale
                                  ? Colors.black
                                  : Colors.white,
                              
                              fontSize: 13.5)),
                    ),
                  ],
                )),
          ),
          GestureDetector(
            onTap: () {
              setState(() {
                if (amFemale == false) {
                  amFemale = true;
                  amMale = false;
                  genderIsSelected = true;
                  user.genderIsSelected = genderIsSelected;
                } else {
                  amMale = false;
                }
              });
              print('amFemale');
            },
            child: Container(
                height: height * 0.12,
                width: width * 0.27,
                decoration: BoxDecoration(
                  boxShadow: [
                    BoxShadow(
                      color: Colors.indigo,
                   
                    )
                  ],
                  borderRadius: BorderRadius.circular(12),
                  color: amFemale ? Colors.grey : Colors.black,
                ),
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                  children: <Widget>[
                  
                    Padding(
                      padding: EdgeInsets.only(bottom: height * 0.009),
                      child: Text('woman',
                          style: TextStyle(
                              color: amFemale
                                  ? Colors.black
                                  : Colors.white),
                              fontSize: 13.5)),
                    )
                  ],
                )),
          ),
        ],
      ),
    );
  }
}
类genderWidget扩展StatefulWidget{
@凌驾
_genderWidgetState createState()=>\u genderWidgetState();
}
使用ChangeNotifier类用户{
选择静态布尔性别;
notifyListeners();
}
类genderWidgetState扩展了状态{
bool-amMale=false;
bool-amFemale=false;
bool genderIsSelected=false;
@凌驾
小部件构建(构建上下文){
最终高度=MediaQuery.of(context).size.height;
最终宽度=MediaQuery.of(context).size.width;
返回填充(
填充:所有边缘设置(宽度*0.03),
孩子:排(
mainAxisAlignment:mainAxisAlignment.space,
儿童:[
手势检测器(
onTap:(){
设置状态(){
如果(amMale==false){
amMale=true;
amFemale=false;
genderIsSelected=true;
user.genderIsSelected=genderIsSelected;
}否则{
amFemale=false;
}
});
打印(‘amMale’);
},
子:容器(
高度:高度*0.12,
宽度:宽度*0.27,
装饰:盒子装饰(
boxShadow:[
箱形阴影(
颜色:颜色,靛蓝,
)
],
边界半径:边界半径。圆形(12),
颜色:amMale?颜色。灰色:颜色。黑色,
),
子:列(
mainAxisAlignment:mainAxisAlignment.space,
儿童:[
填充物(
填充:仅限边缘设置(底部:高度*0.009),
child:Text('man',
样式:TextStyle(
颜色:amMale
颜色。黑色
:颜色。白色,
字体大小:13.5),
),
],
)),
),
手势检测器(
onTap:(){
设置状态(){
if(amFemale==false){
amFemale=true;
amMale=false;
genderIsSelected=true;
user.genderIsSelected=genderIsSelected;
}否则{
amMale=false;
}
});
印刷品(‘女性’);
},
子:容器(
高度:高度*0.12,
宽度:宽度*0.27,
装饰:盒子装饰(
boxShadow:[
箱形阴影(
颜色:颜色,靛蓝,
)
],
边界半径:边界半径。圆形(12),
颜色:amFemale?颜色。灰色:颜色。黑色,
),
子:列(
mainAxisAlignment:mainAxisAlignment.space,
儿童:[
填充物(
填充:仅限边缘设置(底部:高度*0.009),
child:Text('woman',
样式:TextStyle(
颜色:女
颜色。黑色
:颜色。白色),
字体大小:13.5),
)
],
)),
),
],
),
);
}
}

您能提供您得到的错误吗?@BLKKBVSIK失败断言:布尔表达式必须为否