[英]How to pass Navigator or Void function as a parameter to a ListTile Widget -Flutter
[英]How To Set Widget ListTile Hidden
即时通讯试图设置隐藏的小部件ListTile
如果SharedPreferences
获取空数据,我试图使用Visibility
,我得到这样的错误
'Future'类型不是'Widget'类型的子类型
我的Widget build(BuildContext context)
Widget build(BuildContext context) {
return new Drawer(
child: new ListView(
children: <Widget>[
new DrawerHeader(
child: new Text("Menu"),
decoration: new BoxDecoration(color: Colors.lightBlueAccent),
),
new ListTile(
title: new Text("Profile"),
onTap: () {
Navigator.pop(context);
Navigator.push(
context,
new MaterialPageRoute(
builder: (context) => new ProfileScreen()));
},
),
new ListTile(
title: new Text("Proposal List"),
onTap: () {
visibleMethod();
},
),
//MY PROBLEM HERE
Visibility(
visible: true,
child: listTileAju()),
new ListTile(
title: new Text("Sign Out"),
onTap: () async {
SharedPreferences pref = await SharedPreferences.getInstance();
pref.remove("authorization");
pref.remove("is_login");
Navigator.pushReplacement(context,
MaterialPageRoute(builder: (BuildContext ctx) => LoginPage()));
},
),
],
));
}
和My Widget listTileAju()
listTileAju() async {
SharedPreferences pref = await SharedPreferences.getInstance();
setState(() {
roleAju = (pref.getStringList('role_aju') ?? 'Something Went Wrong');
});
if (roleAju != null) {
Visibility(
visible: true,
child: new ListTile(
title: new Text("Aju List"),
onTap: () {
Navigator.pop(context);
Navigator.push(context,
new MaterialPageRoute(builder: (context) => new AjuScreen()));
},
),
);
} else {
Visibility(
visible: false,
child: new ListTile(
title: new Text("Aju List"),
onTap: null,
),
);
}
}
我希望如果SharedPreferences获取空数据,则可以隐藏小部件ListTile
您的listTileAju是异步的,因此它变为Future并且小部件不能为Future。
最简单的解决方案是必须将数据加载到initState中,然后必须在此处使用该数据以避免异步。
请尝试以下代码:-
bool isShowListTile;
Widget listTileAju(){
Visibility(
visible: isShowListTile,
child: new ListTile(
title: new Text("Aju List"),
onTap: () {
Navigator.pop(context);
Navigator.push(context,
new MaterialPageRoute(builder: (context) => new AjuScreen()));
},
),
);
}
@override
void initState() {
super.initState();
SharedPreferences pref = await SharedPreferences.getInstance();
roleAju = (pref.getStringList('role_aju') ?? 'Something Went Wrong');
if (roleAju != null) {
if (mounted) {
setState(() {
isShowListTile = true;
});
}
} else {
if (mounted) {
setState(() {
isShowListTile = false;
});
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.