【发布时间】:2020-12-21 10:06:06
【问题描述】:
我想从另外两个不同类型的小部件列表中创建一个列表。我有一个带有 Item() 的列表和另一个带有 FlatButton() 的列表。我想在 ListView.builder 的顶部添加 Item() 和 FlatButton() 的下方。列表的长度首先通过添加或删除带有提供程序的 Item() 的按钮来更改,另一个通过在收藏夹屏幕底部添加 FlatButton() 的按钮来更改。我不想要两个列表,我想要一个列表,首先是 favList 的 Item(),然后是 emptyList 的 Flatbutton()。 favList 包含 Item() 和另一个 FlatButton()。我想要一个包含两个列表数据的 ListView,但项目不同。对于favList,它是一个带有文本、描述和收藏图标的项目。对于emptyList,它只是一个按钮。
列表是 emptyList 和 favModel.favList
这是我的 favorite_screen.dart 代码:
class Favorite extends StatelessWidget {
final List<EmptyItem> emptyList = List<EmptyItem>();
@override
Widget build(BuildContext context) {
return Consumer<FavModel>(builder: (context, favModel, child) {
final favList = favModel.favList;
List<dynamic> finalList = [...favModel.favList, ...emptyList].toSet().toList();
return Scaffold(
appBar: AppBar(
title: Text('Favoris'),
),
body: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(
child: ListView.builder(
shrinkWrap: true,
itemCount: finalList.length,
itemBuilder: (context, index) {
return index < favList.length ? FavItem(index) : EmptyItem();
}),
),
Padding(
padding: EdgeInsets.all(10),
child: FlatButton(
child: Text(
'Add a place !',
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold,
color: Colors.white,
),
),
onPressed: () {
emptyList.add(EmptyItem());
},
color: Colors.green,
),
)
]),
);
});
}
}
一个按钮
class EmptyItem extends StatelessWidget {
@override
Widget build(BuildContext context) {
return FlatButton(onPressed: null, child: Text('Ajoute un favoris !'));
}
}
一个项目
class FavItem extends StatelessWidget {
final int index;
FavItem(this.index);
@override
Widget build(BuildContext context) {
return Consumer<FavModel>(builder: (context, favModel, child) {
final favList = favModel.favList;
return Row(
children: [
Flexible(
flex: 1,
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
TextObject(favList[index].title, favList[index].description),
Padding(
padding: const EdgeInsets.all(7.0),
child: GestureDetector(
child: Icon(
Icons.favorite,
color: Colors.red,
size: 32,
),
onTap: () {
favModel.removeOfFavorite(index, index);
}),
),
],
),
)
],
);
});
}
}
【问题讨论】:
-
不能用
return FavItem(index);,不能用return index < favList.length ? FavItem(index) : EmptyItem(); ?