无法将元素类型 'Set<UserAccountsDrawerHeader>' 分配给列表类型 'Widget'
The element type 'Set<UserAccountsDrawerHeader>' can't be assigned to the list type 'Widget'
我创建了一个菜单,其中 header 根据用户是否注册而变化。我写了一个条件,如果有这样的用户,则显示一个 UserAccountsDrawerHeader,如果没有 - DrawerHeader。但是我有一个错误 - 元素类型 'Set' 无法分配给列表类型 'Widget' 并且元素类型 'Set' 无法分配给列表类型 'Widget'.如何正确书写。求助
class _AppDrawerState extends State<AppDrawer> {
final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
var current_user;
Future<void> _handleDrawer()async{
_scaffoldKey.currentState.openEndDrawer();
}
@override
Widget build(BuildContext context) {
return Drawer(
child: ListView(
padding: EdgeInsets.zero,
children: <Widget>[
if(current_user) {
return UserAccountsDrawerHeader(
accountName: new Text("Cleudice Santos"),
accountEmail: new Text("cleudice.ms@gmail.com"),
onDetailsPressed: () {},
),
} else {
return DrawerHeader(
child: Text('Drawer Header'),
decoration: BoxDecoration(
color: Colors.blue,
),
),
};
ListTile(
leading: Icon(Icons.search),
title: Text('search1'),
onTap: () {
},
),
ListTile(
leading: Icon(Icons.local_shipping),
title: Text('search1'),
onTap: () {
// Update the state of the app.
// ...
},
),
],
),
);
}
}
如果 <Widget>
列表,你不能显式写 if condition
,除非你使用 ListBuilder
。您可以像这样更改代码
Drawer(
child: ListView(
padding: EdgeInsets.zero,
children: <Widget>[
current_user ? UserAccountsDrawerHeader(
accountName: new Text("Cleudice Santos"),
accountEmail: new Text("cleudice.ms@gmail.com"),
onDetailsPressed: () {},
) : DrawerHeader(
child: Text('Drawer Header'),
decoration: BoxDecoration(
color: Colors.blue,
),
),
ListTile(
leading: Icon(Icons.search),
title: Text('search1'),
onTap: () {
},
),
ListTile(
leading: Icon(Icons.local_shipping),
title: Text('search1'),
onTap: () {
// Update the state of the app.
// ...
},
),
],
),
)
我创建了一个菜单,其中 header 根据用户是否注册而变化。我写了一个条件,如果有这样的用户,则显示一个 UserAccountsDrawerHeader,如果没有 - DrawerHeader。但是我有一个错误 - 元素类型 'Set' 无法分配给列表类型 'Widget' 并且元素类型 'Set' 无法分配给列表类型 'Widget'.如何正确书写。求助
class _AppDrawerState extends State<AppDrawer> {
final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
var current_user;
Future<void> _handleDrawer()async{
_scaffoldKey.currentState.openEndDrawer();
}
@override
Widget build(BuildContext context) {
return Drawer(
child: ListView(
padding: EdgeInsets.zero,
children: <Widget>[
if(current_user) {
return UserAccountsDrawerHeader(
accountName: new Text("Cleudice Santos"),
accountEmail: new Text("cleudice.ms@gmail.com"),
onDetailsPressed: () {},
),
} else {
return DrawerHeader(
child: Text('Drawer Header'),
decoration: BoxDecoration(
color: Colors.blue,
),
),
};
ListTile(
leading: Icon(Icons.search),
title: Text('search1'),
onTap: () {
},
),
ListTile(
leading: Icon(Icons.local_shipping),
title: Text('search1'),
onTap: () {
// Update the state of the app.
// ...
},
),
],
),
);
}
}
如果 <Widget>
列表,你不能显式写 if condition
,除非你使用 ListBuilder
。您可以像这样更改代码
Drawer(
child: ListView(
padding: EdgeInsets.zero,
children: <Widget>[
current_user ? UserAccountsDrawerHeader(
accountName: new Text("Cleudice Santos"),
accountEmail: new Text("cleudice.ms@gmail.com"),
onDetailsPressed: () {},
) : DrawerHeader(
child: Text('Drawer Header'),
decoration: BoxDecoration(
color: Colors.blue,
),
),
ListTile(
leading: Icon(Icons.search),
title: Text('search1'),
onTap: () {
},
),
ListTile(
leading: Icon(Icons.local_shipping),
title: Text('search1'),
onTap: () {
// Update the state of the app.
// ...
},
),
],
),
)