gpt4 book ai didi

flutter - 列表生成器 : how to make the first element different?

转载 作者:IT王子 更新时间:2023-10-29 06:50:22 25 4
gpt4 key购买 nike

我正在构建一个列表(动态地,通过对 API 的 HTTP 请求的结果),但我想先添加一个“添加”卡片,然后再添加其他元素。像这样:

enter image description here

我正在和一个 builder 一起 build 这个但是我做的方式不好,有问题。

enter image description here

这里,account.tripsTrip 对象的列表,AddNewTrip 是“添加”卡片。因为我的if,列表的第一个元素总是显示不出来

那么,有没有另一种方法可以将我的“添加”卡片作为列表的第一个元素,而不隐藏一个元素?

return Builder(
builder: (BuildContext context) {
if (account.trips.indexOf(i) == 0) {
return new AddNewTrip(account);
}
return Padding(
padding: const EdgeInsets.only(
top: 20.0, bottom: 40.0, left: 5.0, right: 5.0),
child: Stack(
...

编辑:这里是完整的代码:

Expanded(
child: ScopedModelDescendant<Account>(
builder: (context, child, _account){
print(_account.profile);
return new CarouselSlider(
enableInfiniteScroll: false,
enlargeCenterPage: true,
height: MediaQuery.of(context).size.height,
initialPage: 1,
items: itemBuilder(_account)
);
},
),
)
List<Widget> itemBuilder(Account account) {
if (account.trips != null)
return account.trips.map((i) {
return Builder(
builder: (BuildContext context) {
if (account.trips.indexOf(i) == 0) {
return new AddNewTrip(account);
}
return Padding(
padding: const EdgeInsets.only(
top: 20.0, bottom: 40.0, left: 5.0, right: 5.0),
child: Stack(
children: <Widget>[
Hero(
tag: i.id,
child: Material(
type: MaterialType.transparency,
child: InkWell(
child: Container(
height: 200,
margin: EdgeInsets.symmetric(horizontal: 5.0),
decoration: cardImage(i.imageUrl),
),
borderRadius: BorderRadius.circular(20.0),
onTap: () {
Navigator.of(context)
.push(MaterialPageRoute(builder: (context) {
return TripDetails(i);
}));
},
),
),
),
Positioned(
width: MediaQuery.of(context).size.width * 0.7,
height: MediaQuery.of(context).size.height * 0.48,
top: MediaQuery.of(context).size.height * 0.2,
left: MediaQuery.of(context).size.width * 0.035,
child: Hero(
tag: i.id + 'container', //should be an ID
child: Material(
type: MaterialType.transparency,
child: Container(
decoration: cardDecoration,
child: new TripContent(i, true),
),
),
),
)
],
),
);
},
);
}).toList();
else
return [
new AddNewTrip(account)
];
}

最佳答案

前面的答案已经提供了关于如何执行此操作的一般性建议。对于您的具体示例,您必须执行以下操作:

当遍历你的账户时,像这样在结果前加上你的“添加”卡片:

List<Widget> itemBuilder(Account account) {
return [
new AddNewTrip(account),
...(account.trips?.map((i) {/** same as before without your index check **/}) ?? []),
];
}

关于flutter - 列表生成器 : how to make the first element different?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57290793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com