GestureDetector не обнаруживает внутри List.generate - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть следующий streambuilder ниже. Если я помещаю GestureDetector в виджет Row (как показано ниже), он получает жест. Однако, когда я ставлю это, как показано, это не так. Моя текущая теория состоит в том, что это происходит из-за List.generation, однако, я думаю, это может быть потому, что над ним есть другие виджеты? Он находится в виджете Stack ... хотя, если это так, почему GestureDetector будет работать с виджетом Row?)

return StreamBuilder<List<List<Event>>>(
        stream: widget.controller.stream.map(_filter),
        initialData: Provider.of<CalendarData>(context).dayEvents,
        builder: (context, snapshot) {
          return Row(
            //GESTUREDETECTOR WORKS HERE
            children: List.generate(8, (col) {
              if (col == 0) {
                return Expanded(
                  child: GestureDetector(
                    behavior: HitTestBehavior.translucent,
                    onTap: () {
                      print('tapped: beer'); //<-- col
                    },
                    onScaleStart: (scaleDetails) => setState(() {
                      print('previousNumOfDays:$previousNumOfDays');
                      print('numberOfDays:$numberOfDays');
                      // dayIndexScaleCenter = col;
                      print('dayIndexScaleCenter: $dayIndexScaleCenter');
                      previousNumOfDays = numberOfDays;
                    }),
                    onScaleUpdate: (ScaleUpdateDetails scaleDetails) {
                      setState(() {
                        int newNumberOfDays =
                            (previousNumOfDays / scaleDetails.scale).round();
                        print('previousNumOfDays:$previousNumOfDays');
                        print('numberOfDays:$numberOfDays');
                        print('newNumberOfDays:$newNumberOfDays');
                        if (newNumberOfDays <= 14 && newNumberOfDays > 1) {
                          numberOfDays = newNumberOfDays;
                        }
                      });
                    },
                    child: Column(
                      children: List.generate(
                        hours.length,
                        (row) => Container(
                          height: Provider.of<CalendarData>(context).rowHeight,
                          decoration: BoxDecoration(
                            color: ColorDefs.colorTimeBackground,
                            border: Border(
                              top: BorderSide(
                                  width: 1.0,
                                  color: ColorDefs.colorCalendarHeader),
                            ),
                          ),
                          child: Center(
                            child: AutoSizeText(hours[row],
                                maxLines: 1,
                                group: timeAutoGroup,
                                minFontSize: 5,
                                style: ColorDefs.textSubtitle2),
                          ),
                        ),
                      ),
                    ),
                  ),
                );
              }
...