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失败断言:布尔表达式必须为否