Flutter 如何从itemBuilder的返回函数外部访问listView生成器的索引号?
这是我的物品清单Flutter 如何从itemBuilder的返回函数外部访问listView生成器的索引号?,flutter,dart,Flutter,Dart,这是我的物品清单 class MealsListData { String titleTxt; String startColor; String endColor; List<String> meals; int index; MealsListData({ this.titleTxt = '', this.startColor = "#ffbf00", this.endColor = "#FFDF29", this.mea
class MealsListData {
String titleTxt;
String startColor;
String endColor;
List<String> meals;
int index;
MealsListData({
this.titleTxt = '',
this.startColor = "#ffbf00",
this.endColor = "#FFDF29",
this.meals,
this.index,
});
static List<MealsListData> tabIconsList = [
MealsListData(
titleTxt: 'Breakfast',
meals: ["Bread", "Peanut butter", "Apple"],
index: 1
),
MealsListData(
titleTxt: 'Lunch',
meals: ["Salmon", "Mixed veggies", "Avocado"],
index: 2
),
MealsListData(
titleTxt: 'Snack',
meals: ["Recommend:", "800 kcal"],
index: 3
),
];
}
下面是我用来获得一张卡的MealsView类的代码
class MealsView extends StatelessWidget {
final MealsListData mealsListData;
final AnimationController animationController;
final Animation animation;
final int itemIndex;
const MealsView(
{Key key, this.mealsListData, this.animationController, this.animation, this.itemIndex})
: super(key: key);
@override
Widget build(BuildContext context) {
return AnimatedBuilder(
animation: animationController,
builder: (BuildContext context, Widget child) {
return FadeTransition(
opacity: animation,
child: new Transform(
transform: new Matrix4.translationValues(
100 * (1.0 - animation.value), 0.0, 0.0),
//this is the individual card
child: SizedBox(
width: 200,
child:
Padding(
padding: const EdgeInsets.only(
top: 32, left: 8, right: 8, bottom: 16),
child: Container(
child: Padding(
padding: const EdgeInsets.only(
top: 22, left: 16, right: 16, bottom: 8),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
mealsListData.titleTxt,
textAlign: TextAlign.center,
),
//Heading(Inside card) Style closed
Expanded(
child: Padding(
padding:
const EdgeInsets.only(top: 22, bottom: 8),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
//this is the list of items
Text(
mealsListData.meals.join("\n"),
),
],
),
),
),
],
),
),
),
),
)
)
);
},
);
}
class MealsView扩展了无状态小部件{
最终测量列表数据测量列表数据;
最终AnimationController AnimationController;
最终动画;
最终整数项索引;
康斯特米尔斯维尤酒店(
{Key Key,this.mealsListData,this.animationController,this.animation,this.itemIndex})
:super(key:key);
@凌驾
小部件构建(构建上下文){
返回动画生成器(
动画:animationController,
生成器:(BuildContext上下文,小部件子项){
返回衰减转换(
不透明度:动画,
孩子:新的转变(
转换:新矩阵4.translationValues(
100*(1.0-动画值)、0.0、0.0),
//这是个人卡
孩子:大小盒子(
宽度:200,
儿童:
填充物(
填充:仅限常量边设置(
顶部:32,左侧:8,右侧:8,底部:16),
子:容器(
孩子:填充(
填充:仅限常量边设置(
顶部:22,左侧:16,右侧:16,底部:8),
子:列(
mainAxisAlignment:mainAxisAlignment.center,
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
正文(
MealListData.titleTxt,
textAlign:textAlign.center,
),
//标题(卡片内部)样式已关闭
扩大(
孩子:填充(
衬垫:
仅限常数边集(顶部:22,底部:8),
孩子:排(
mainAxisAlignment:mainAxisAlignment.start,
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
//这是项目列表
正文(
MealListData.Founds.join(“\n”),
),
],
),
),
),
],
),
),
),
),
)
)
);
},
);
}
我做错了什么?当我点击卡时,索引号应该打印在调试控制台上,但我得到的是空的。而不是:
itemIndex: MealsListData().index);
print(MealsListData().index);}),
试一试
希望对您有所帮助因为您正在打印MealsListData().index,而不是生成器返回的索引,所以您将得到null
itemIndex: MealsListData().index);
print(MealsListData().index);}),
itemIndex: mealsListData[index]);
print(mealsListData[index]);}),