Flutter (颤振)在“栅格视图生成器”中选择对项目的效果?
如何更改卡片小部件的颜色如果单击其中一个gridview项目,则卡片会更改颜色。但您只能选择一项。我怎么做Flutter (颤振)在“栅格视图生成器”中选择对项目的效果?,flutter,dart,Flutter,Dart,如何更改卡片小部件的颜色如果单击其中一个gridview项目,则卡片会更改颜色。但您只能选择一项。我怎么做 Widget listDenomPulsa(AsyncSnapshot <List<Payload>> snapshot) { return GridView.builder( shrinkWrap: false, scrollDirection: Axis.vertical, itemCount: snaps
Widget listDenomPulsa(AsyncSnapshot <List<Payload>> snapshot) {
return GridView.builder(
shrinkWrap: false,
scrollDirection: Axis.vertical,
itemCount: snapshot.data.length,
gridDelegate: new SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
childAspectRatio: MediaQuery.of(context).size.width / (MediaQuery.of(context).size.height / 3),
),
itemBuilder: (BuildContext context, int index) {
bool _selectItem = false;
return GestureDetector(
onTap: () {
setState(() {
_selectItem = true;
});
},
child: Card(
color: _selectItem ? Colors.blue:Colors.amber,
child: Container(
height: SizeConfig.heightMultiplier * 3,
child: Padding(
padding: EdgeInsets.all(SizeConfig.heightMultiplier * 3),
child: Text(
snapshot.data[index].desc,
style: AppTheme.styleSubTitleBlackSmall,
),
),
),
),
);
}
);
}
这将非常有效,请检查以下代码:
class MyGridView extends StatefulWidget {
@override
_MyGridViewState createState() => _MyGridViewState();
}
class _MyGridViewState extends State<MyGridView> {
// set an int with value -1 since no card has been selected
int selectedCard = -1;
@override
Widget build(BuildContext context) {
return GridView.builder(
shrinkWrap: false,
scrollDirection: Axis.vertical,
itemCount: 10,
gridDelegate: new SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
childAspectRatio: MediaQuery.of(context).size.width /
(MediaQuery.of(context).size.height / 3),
),
itemBuilder: (BuildContext context, int index) {
return GestureDetector(
onTap: () {
setState(() {
// ontap of each card, set the defined int to the grid view index
selectedCard = index;
});
},
child: Card(
// check if the index is equal to the selected Card integer
color: selectedCard == index ? Colors.blue : Colors.amber,
child: Container(
height: 200,
width: 200,
child: Center(
child: Text(
'$index',
style: TextStyle(
fontSize: 20,
color: Colors.white,
fontWeight: FontWeight.w500,
),
),
),
),
),
);
});
}
}
输出:
我希望这对您有所帮助。这将非常有效,请检查以下代码:
class MyGridView extends StatefulWidget {
@override
_MyGridViewState createState() => _MyGridViewState();
}
class _MyGridViewState extends State<MyGridView> {
// set an int with value -1 since no card has been selected
int selectedCard = -1;
@override
Widget build(BuildContext context) {
return GridView.builder(
shrinkWrap: false,
scrollDirection: Axis.vertical,
itemCount: 10,
gridDelegate: new SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
childAspectRatio: MediaQuery.of(context).size.width /
(MediaQuery.of(context).size.height / 3),
),
itemBuilder: (BuildContext context, int index) {
return GestureDetector(
onTap: () {
setState(() {
// ontap of each card, set the defined int to the grid view index
selectedCard = index;
});
},
child: Card(
// check if the index is equal to the selected Card integer
color: selectedCard == index ? Colors.blue : Colors.amber,
child: Container(
height: 200,
width: 200,
child: Center(
child: Text(
'$index',
style: TextStyle(
fontSize: 20,
color: Colors.white,
fontWeight: FontWeight.w500,
),
),
),
),
),
);
});
}
}
输出:
我希望这能对您有所帮助。您能否更新您的问题,确切询问您希望此代码做什么,以便社区能够帮助您?我已成功地在gridview上显示数据。我想问的是如何在点击时改变卡片的颜色?你能更新你的问题,确切地问一下你希望这段代码做什么,以便社区可以帮助你吗?我已经成功地在gridview上显示了数据。我想问的是点击时如何改变卡片的颜色?谢谢,先生。希望这是一个完美的解决方案。很有魅力,谢谢你,先生。希望这是一个完美的解决方案。工作起来很有魅力。