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,
),
),
);
}
}

在这里检查这个例子:兄弟,这是一个很好的答案,可以理解这个场景。谢谢