堆栈布局颤振内部未触发onPressed函数

时间:2020-11-02 15:01:47

标签: flutter dart

我有一个旋转木马,一个在“位置布局”中的两个iconButton,一个gridView和两个其他“在堆栈布局内部的所有已定位”布局。

在iconButtons或任何常规元素上的onPressed()函数不会被触发。我发现问题出在父堆栈布局,是因为将它们放在onPressed之外。

我需要设计的堆栈布局,所以我想知道是否还有其他选择。

下面是代码示例:

child: Stack(
                    children: <Widget>[
                      Container(
                        child: Column(
                          children: <Widget>[
                            carouselSlider = CarouselSlider(
                              height: 270.0,
                              initialPage: 0,
                              viewportFraction: 1.0,
                              aspectRatio: 1.0,
                              enlargeCenterPage: false,
                              autoPlay: true,
                              reverse: false,
                              enableInfiniteScroll: true,
                              autoPlayInterval: Duration(seconds: 2),
                              autoPlayAnimationDuration:
                                  Duration(milliseconds: 2000),
                              pauseAutoPlayOnTouch: Duration(seconds: 10),
                              scrollDirection: Axis.horizontal,
                              onPageChanged: (index) {
                                setState(() {
                                  current = index;
                                });
                              },
                              items: carouselImages.map((i) {
                                return Builder(
                                  builder: (BuildContext context) {
                                    return Container(
                                        child: GestureDetector(
                                            // behavior:
                                            //     HitTestBehavior.translucent,
                                            child: Image.asset(
                                              i,
                                              fit: BoxFit.cover,
                                            ),
                                            onTap: () {
                                              // Navigator.push<Widget>(
                                              //   context,
                                              //   MaterialPageRoute(
                                              //     builder: (context) => ImageScreen(i),
                                              //   ),
                                              // );
                                            }));
                                  },
                                );
                              }).toList(),
                            ),
                            SizedBox(
                              height: 20,
                            ),
                            Row(
                              mainAxisAlignment: MainAxisAlignment.center,
                              children:
                                  map<Widget>(carouselImages, (index, url) {
                                return Container(
                                  width: 10.0,
                                  height: 10.0,
                                  margin: EdgeInsets.symmetric(
                                      vertical: 10.0, horizontal: 2.0),
                                  decoration: BoxDecoration(
                                    shape: BoxShape.circle,
                                    color: current == index
                                        ? Color.fromRGBO(221, 40, 42, 0.7)
                                        : Colors.white,
                                  ),
                                );
                              }),
                            ),
                          ],
                        ),
                      ),
                      Positioned(
                        right: 5,
                        top: 10,
                        child: IconButton(
                          icon: Icon(Icons.menu),
                          color: Color.fromRGBO(221, 40, 42, 0.7),
                          iconSize: 20.0,
                          onPressed: () {
                            print('Clicked');
                            scaffolddKey.currentState.openDrawer();
                          },
                        ),
                      ),

1 个答案:

答案 0 :(得分:0)

解决方案是在IgnorePointer小部件中包装所有不应接收轻敲事件的小部件。

如果您的CarouselSlider不应接收点击事件,则将其和所有其他不希望接收点击事件的窗口小部件包装在IgnorePointer窗口小部件中。