ListItem.builder 不同的事件点​​击

问题描述

如何使用 ListItem.builder 为列表中的元素提供不同的点击事件?(ontapp,onpress)

我不想单独创建单独的 listItem 构建器

 Expanded(
        child: ListView.builder(
            padding: const EdgeInsets.all(8),itemCount: entries.length,itemBuilder: (BuildContext context,int index) {
              return InkWell(
                onTap: () {},child: Container(
                  height: 100,color: index % 2 == 0 ? Colors.white : Colors.grey,child: InkWell(
                    onTap: () {},child: Row(
                      mainAxisAlignment: MainAxisAlignment.spaceBetween,children: [
                        Icon(iconsImage[index]),Text('${entries[index]}'),Icon(Icons.arrow_right)
                      ],),);
            }),)

enter image description here

解决方法

现在您有 2 个不同的列表,分别是 entriesiconsImage。并且您正在尝试在一个 ListView 中迭代它们。它现在可能会起作用。但这不是一个好的编程概念。您可以定义一个包含条目、图标和功能的新模型。它看起来像这样:

class NewModel {
  String entry;
  IconData iconData;
  Function function;

  NewModel({this.entry,this.iconData,this.function});
}

然后:

  List<NewModel> newModelList = [];

  void generateList() {
    newModelList.add(NewModel(
        entry: 'Privacy',iconData: Icons.privacy_tip,function: () {
          // GoToPrivacy();
        }));

    newModelList.add(NewModel(
        entry: 'Purchase History',iconData: Icons.history,function: () {
          // GoToHistory();
        }));

    newModelList.add(NewModel(
        entry: 'Help & Support',iconData: Icons.help,function: () {
          // GoToHelp();
        }));
  }

然后:

Expanded(
          child: ListView.builder(
              padding: const EdgeInsets.all(8),itemCount: newModelList.length,itemBuilder: (BuildContext context,int index) {
                return Container(
                  height: 100,color: index % 2 == 0 ? Colors.white : Colors.grey,child: InkWell(
                    onTap: newModelList[index].function,// Here is your function!
                    child: Row(
                      mainAxisAlignment: MainAxisAlignment.spaceBetween,children: [
                        Icon(newModelList[index].iconData),Text('${newModelList[index].entry}'),Icon(Icons.arrow_right)
                      ],),);
              }),

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...