Flutter 我已经用listview.builder从api创建了一个卡片列表。现在,我想改变一个卡的颜色时,在墨水井水龙头一卡是轻敲
我想在点击卡片时更改卡片颜色。我做了所有的功能。我也设置了墨水池,以便敲击。一切都准备好了,但我不知道如何改变特定的卡颜色时,它是点击。尝试使用布尔更改卡片颜色。但当我点击一张卡片时,所有的卡片颜色都在变化。这不是我想要的。我只想要一张卡片,当它被点击时颜色应该改变Flutter 我已经用listview.builder从api创建了一个卡片列表。现在,我想改变一个卡的颜色时,在墨水井水龙头一卡是轻敲,flutter,listview,dart,colors,card,Flutter,Listview,Dart,Colors,Card,我想在点击卡片时更改卡片颜色。我做了所有的功能。我也设置了墨水池,以便敲击。一切都准备好了,但我不知道如何改变特定的卡颜色时,它是点击。尝试使用布尔更改卡片颜色。但当我点击一张卡片时,所有的卡片颜色都在变化。这不是我想要的。我只想要一张卡片,当它被点击时颜色应该改变 isPressed ? Colors.blueAccent : Colors.white, InkWell( onTap: () {
isPressed ? Colors.blueAccent : Colors.white,
InkWell(
onTap: () {
setState(() {
isPressed = !isPressed;
});
在listview.builder中,我可以从api获取卡中的数据
ListView.builder(
itemCount: widget.notification == null
? 0
: widget.notification.length,
itemBuilder: (context, index) {
return
Card(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10.0)),
color: isPressed ? Colors.blueAccent : Colors.white,
child: Padding(
padding: EdgeInsets.all(16.0),
child: InkWell(
onTap: () {
setState(() {
isPressed = !isPressed;
});
Navigator.push(
context,
new MaterialPageRoute(
builder: (BuildContext context) =>
new DetailPage()));
},
child: Column(
children: <Widget>[
Row(
children: [
SizedBox(
width: 20,
),
Text(
'Status',
style: TextStyle(
fontWeight: FontWeight.bold),
),
SizedBox(
width: 67,
),
Text(widget.notification[index]["data"]
["message"]
.toString()),
],
),
ListView.builder(
itemCount:widget.notification==null
? 0
:widget.notification.length,
itemBuilder:(上下文,索引){
返回
卡片(
形状:圆形矩形边框(
边界半径:边界半径。圆形(10.0)),
颜色:isPressed?颜色。蓝色强调:颜色。白色,
孩子:填充(
填充:所有边缘设置(16.0),
孩子:InkWell(
onTap:(){
设置状态(){
isPressed=!isPressed;
});
导航器。推(
上下文
新材料路线(
生成器:(BuildContext上下文)=>
新建详细信息页());
},
子:列(
儿童:[
划船(
儿童:[
大小盒子(
宽度:20,
),
正文(
"地位",,
样式:TextStyle(
fontWeight:fontWeight.bold),
),
大小盒子(
宽度:67,
),
文本(widget.notification[索引][“数据”]
[“信息”]
.toString()),
],
),
您可以试试这个例子。
复制粘贴代码
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: 5,
itemBuilder: (context, index) {
return MyCard(isPressed: false);
});
}
}
class MyCard extends StatefulWidget {
final bool isPressed;
const MyCard({Key key, this.isPressed}) : super(key: key);
@override
_MyCardState createState() => _MyCardState();
}
class _MyCardState extends State<MyCard> {
bool _isPressed;
@override
void initState() {
_isPressed = widget.isPressed;
super.initState();
}
@override
Widget build(BuildContext context) {
return Card(
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10.0)),
color: _isPressed ? Colors.blueAccent : Colors.white,
child: InkWell(
onTap: () {
setState(() {
_isPressed = !_isPressed;
});
},
child: Container(
height: 50,
),
),
);
}
}
类MyWidget扩展了无状态Widget{
@凌驾
小部件构建(构建上下文){
返回ListView.builder(
物品计数:5,
itemBuilder:(上下文,索引){
返回我的卡(显示:假);
});
}
}
类MyCard扩展了StatefulWidget{
显示最终布尔值;
constmycard({Key-Key,this.isPressed}):super(Key:Key);
@凌驾
_MyCardState createState()=>\u MyCardState();
}
类_MyCardState扩展状态{
bool_表示;
@凌驾
void initState(){
_isPressed=widget.isPressed;
super.initState();
}
@凌驾
小部件构建(构建上下文){
回程卡(
形状:RoundedRectangleBorder(borderRadius:borderRadius.circular(10.0)),
颜色:_isPressed?Colors.blueAccent:Colors.white,
孩子:InkWell(
onTap:(){
设置状态(){
_isPressed=!\u isPressed;
});
},
子:容器(
身高:50,
),
),
);
}
}
在这里检查这个例子:兄弟,这是一个很好的答案,可以理解这个场景。谢谢