【发布时间】:2019-06-25 20:02:42
【问题描述】:
我在颤振中创建了一个列表(_cost)和一个卡片视图,每当用户单击它们中的每一个时,都会从列表(_cost)中显示与该卡片的索引相关的值,但问题是每次我点击一张卡片时,它都会显示空值,尽管列表中的相关值不为空。
class ActivityPeopleCard extends StatefulWidget{
Activity activity;
ActivityPeopleCard({this.activity});
@override
_ActivityPeopleCardState createState() => _ActivityPeopleCardState();
}
class _ActivityPeopleCardState extends State<ActivityPeopleCard> {
List<double> _cost;
@override
Widget build(BuildContext context) {
_cost = new List(widget.activity.peopleInvolved.length);
return Container(
child:new GridView.builder(
itemCount: widget.activity.peopleInvolved.length,
gridDelegate: new SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 3),
itemBuilder: (BuildContext context, int index) {
return new GestureDetector(
onTap: ()=> setState(() => {_priceSet(index)}),
child: _buildWidget(index)
);
},
),
);
}
_buildWidget(int index){
return new Card(
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(30)),
elevation: 5.0,
child: Stack(children:<Widget>[
new Container(
height: height/4,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Container(
width:height/15,
height: height/15,
decoration: new BoxDecoration(
borderRadius: BorderRadius.circular(height/20),
border: Border.all(color: Colors.white, width:2),
),
child: ClipRRect(
borderRadius: BorderRadius.circular(height/15),
child: Image.asset(widget.activity.peopleInvolved[index].imagePath, fit: BoxFit.fill)),
Center(child: Text(widget.activity.peopleInvolved[index].name))
],
),
),
])
);
}
_priceSet(int index){
setState(() {
_cost[1]=5500;
});
即使我在 _priceSet 函数中将 _cost[1] 设置为 5500,但它却显示为 null
【问题讨论】:
-
我认为问题在于您再次初始化相同的 _cost 变量。每当调用 setState 方法时,它都会重新渲染整个构建方法,并使用旧值再次初始化 _cost 值。