如何在颤动/飞镖的 ListView 项目中更改背景颜色

Posted

技术标签:

【中文标题】如何在颤动/飞镖的 ListView 项目中更改背景颜色【英文标题】:How do I change background Color in ListView items in flutter/dart 【发布时间】:2019-12-15 10:39:16 【问题描述】:

有没有办法使用ListView 而不是ListView.builder 来查找特定项目的索引号?然后,我想为列表中的特定项目设置背景。说每隔三个项目在背景中为红色。 我的列表长度为 10-15 项。

这是我的清单

// List - Words
class WordList extends StatelessWidget 
  final List<WordModal> _wordModal;

  WordList(this._wordModal);

  @override
  Widget build(BuildContext context) 
    return new ListView(
      padding: new EdgeInsets.symmetric(vertical: 8.0),
      children: _buildList(),
    );
  

  List<WordCard> _buildList() 
    return _wordModal.map((word) => new WordCard(word)).toList();
  

这是我的卡片生成器

// Word Card Item
class WordCard extends StatelessWidget 
  final WordModal _genericModal;

  WordCard(this._genericModal);

  @override
  Widget build(BuildContext context) 
    return new Card(
        margin: new EdgeInsets.symmetric(horizontal: 10.0, vertical: 6.0),
        child: Container(
          //color: ** want to put background color here **
          child: Column(
            children: <Widget>[
              new ExpansionTile(
                title: Container(
                  child: Column(
                    children: <Widget>[
                      new ListTile(
                        leading: new CircleAvatar(
                          child: Icon(Icons.image, color: Colors.grey), backgroundColor: Colors.white,),
                        title: Text(_genericModal.animalGenus),
                        subtitle: Text(
                          _genericModal.animalSpecies,
                        ),
                      ),
                    ],
                  ),
                ),
                children: <Widget>[
                  Row(
                    children: <Widget>[
                      SizedBox(
                        width: 50,
                      ),
                      Text(
                        _genericModal.animalHabitatLocation,
                        style: (TextStyle(fontStyle: FontStyle.italic)),
                      ),
                    ],
                  ),
                  new Row(
                    children: <Widget>[
                      Spacer(),
                      IconButton(
                          icon: new Icon(
                            Icons.volume_up,
                            size: 28,
                            color: Colors.grey,
                          ),
                          onPressed: () 
                            Navigator.push(
                                context,
                                MaterialPageRoute(
                                    builder: (context) => DetailPage()));
                          ),
                    ],
                  ),
                ],
              ),
            ],
          ),
        ));
  

【问题讨论】:

【参考方案1】:

是的,您可以尝试在 tour itemBuilder 函数中更改它,我将在这里给您举个例子:

class PageTwoState extends State<PageTwo> 
  @override
  Widget build(BuildContext context) 
    return ListView.builder(
      itemExtent: 250.0,
      itemBuilder: (context, index) => Container(
            padding: EdgeInsets.all(10.0),
            child: Material(
              elevation: 4.0,
              borderRadius: BorderRadius.circular(5.0),
              color: index % 2 == 0 ? Colors.cyan : Colors.deepOrange,
              child: Center(
                child: Text(index.toString()),
              ),
            ),
          ),
    );
  

【讨论】:

是的,但我的问题是我可以只使用 ListView 来获取索引吗?我不想在较小的列表大小上使用 ListView.builder。这可能吗?【参考方案2】:

这是一些最小的实现

    int _selectedIndex;
  _onSelected(int index) 

    setState(() 
      _selectedIndex = index;
    );
  

然后在您的列表视图中,您要更改颜色的小部件

ListView.builder(

          itemCount: querySnapshot.documents.length,
          padding: EdgeInsets.all(8.0),
          itemBuilder: (context, i) 
...
     IconButton(
                          iconSize: 28,
                          icon: Icon(
                            Icons.favorite_border,
                            color: _selectedIndex != null && _selectedIndex == i
                                ? Colors.redAccent
                                : Colors.grey,
                          ),
                          onPressed: () 
                            _onSelected(i);

【讨论】:

以上是关于如何在颤动/飞镖的 ListView 项目中更改背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何从飞镖颤动中的键或键值对获取索引

ListView 中的问题切换值颤动

当列表视图的项目在颤动的视口中可见时,如何更改项目颜色并执行一些操作?

如何在飞镖颤动中转换图像 dpi(每英寸点数)?

如何不在列表飞镖中重复相同的项目?

插件问题在Android工作室中颤动和飞镖