ListView onTap回调不起作用Flutter

时间:2020-04-08 20:42:48

标签: listview flutter

我有一个小部件WeekdayCell,用于构建ListView。所有被选中的调用控件的作品的onTap预计ES但是当使文本改变颜色的逻辑onTap:onTapCancel:从ListView控件回调不执行,因为我不 点击单元格时,可在控制台中获得任何打印结果。你能发现我在做什么错吗?
一如既往,非常感谢您的时间和帮助。

小部件:

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

ListView:

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

1 个答案:

答案 0 :(得分:1)

您忘记添加括号。 widget.onTap widget.onTapCancel 为您提供了对该功能的引用。要调用/执行它,您需要编写:

widget.isSelected == false ? widget.onTap() : widget.onTapCancel();
相关问题