首页 > 解决方案 > ListView onTap 回调不起作用 Flutter

问题描述

我有一个WeekdayCell用于构建 ListView 的小部件。所有使文本更改颜色时的逻辑在选定调用widget的ontap时可以预期的,但是 从listViewonTap:onTapCancel:回调不会执行,因为我在点击单元格时不会在控制台中获得任何打印。你能看出我做错了什么吗?
一如既往地感谢您的时间和帮助。

小部件:

class WeedayCell extends StatefulWidget {
  String day;
  bool isSelected;
  Function onTap;
  Function onTapCancel;
  WeedayCell(
      {@required this.day,
      @required this.isSelected,
      @required this.onTap,
      @required this.onTapCancel});
  @override
  List<Object> get props => [day, isSelected];
  @override
  _WeedayCellState createState() => new _WeedayCellState();
}

class _WeedayCellState extends State<WeedayCell> {
  @override
  Widget build(BuildContext context) {
    return Container(
      child: new Column(
        children: [
          new ListTile(
            selected: widget.isSelected,
            title: Text(
              '${widget.day}',
              style: TextStyle(
                  color: widget.isSelected == false
                      ? Colors.black
                      : Colors.redAccent,
                  fontSize: 20,
                  fontWeight: FontWeight.w500),
            ),
            onTap: () {
              setState(() {
                widget.isSelected == false ? widget.onTap : widget.onTapCancel;
                widget.isSelected = !widget.isSelected;
              });
            },
          )
        ],
      ),
    );
  }
}

列表显示:

body: Container(
        padding: EdgeInsets.all(20),
        child: ListView.builder(
          itemCount: weekdays.length,
          itemBuilder: (BuildContext context, int index) => WeedayCell(
            day: '${weekdays[index]}',
            isSelected: false,
            onTap: () {
//            repeatWeekdays.add(weekdays[index]);
              repeatWeekdays.add(index);
              print(repeatWeekdays);
            },
            onTapCancel: () {
//            int indexToRemove = repeatWeekdays.indexOf(weekdays[index]);
//            repeatWeekdays.removeAt(indexToRemove);
              repeatWeekdays.remove(index);
              print(repeatWeekdays);
            },
          ),
        ),
      ),

标签: listviewflutter

解决方案


你忘了加上括号。widget.onTapwidget.onTapCancel为您提供对该函数的引用。要调用/执行它,您需要编写:

widget.isSelected == false ? widget.onTap() : widget.onTapCancel();

推荐阅读