简体   繁体   English

GestureDetector 在 Listview Builder 中不工作 Flutter

[英]GestureDetector Not working in Listview Builder Flutter

This is the Animation Class where MoviesListView Widget Calls When i apply Animation on listViewBuilder GestureDetector not get Call这是 Animation Class,当我在 listViewBuilder GestureDetector 上应用 Animation 时,MoviesListView 小部件调用未获得调用

    import 'package:autoscroll/MoviesListView.dart';
    import 'package:autoscroll/data.dart';
    import 'package:flutter/material.dart';
    
    class HomeScreen extends StatefulWidget {
      @override
      _HomeScreenState createState() => _HomeScreenState();
    }
    
    class _HomeScreenState extends State<HomeScreen> {
      ScrollController _scrollController1 = ScrollController();
      ScrollController _scrollController2 = ScrollController();
      ScrollController _scrollController3 = ScrollController();
    
      @override
      void initState() {
        super.initState();
        WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
          double minScrollExtent1 = _scrollController1.position.minScrollExtent;
          double maxScrollExtent1 = _scrollController1.position.maxScrollExtent;
          double minScrollExtent2 = _scrollController2.position.minScrollExtent;
          double maxScrollExtent2 = _scrollController2.position.maxScrollExtent;
          double minScrollExtent3 = _scrollController3.position.minScrollExtent;
          double maxScrollExtent3 = _scrollController3.position.maxScrollExtent;
          //
          animateToMaxMin(maxScrollExtent1, minScrollExtent1, maxScrollExtent1, 1,
              _scrollController1);
          animateToMaxMin(maxScrollExtent2, minScrollExtent2, maxScrollExtent2, 15,
              _scrollController2);
          animateToMaxMin(maxScrollExtent3, minScrollExtent3, maxScrollExtent3, 20,
              _scrollController3);
        });
      }
    
      animateToMaxMin(double max, double min, double direction, int seconds,
          ScrollController scrollController) {
        scrollController
            .animateTo(direction,
                duration: Duration(seconds: seconds), curve: Curves.linear)
            .then((value) {
          direction = direction == max ? min : max;
          animateToMaxMin(max, min, direction, seconds, scrollController);
        });
      }
    
      @override
      Widget build(BuildContext context) {
        return SafeArea(
          child: Scaffold(
            backgroundColor: Colors.white,
            body: Column(
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children: [
                Column(
                  children: [
                    MoviesListView(
                      scrollController: _scrollController1,
                      images: movies1,
                    ),
                    MoviesListView(
                      scrollController: _scrollController2,
                      images: movies2,
                    ),
                    MoviesListView(
                      scrollController: _scrollController3,
                      images: movies3,
                    ),
                  ],
                ),
                Text(
                  '30 days for free',
                  style: TextStyle(
                    fontSize: 35,
                    fontWeight: FontWeight.bold,
                  ),
                ),
                Material(
                  elevation: 0,
                  color: Color(0xfff2c94c),
                  borderRadius: BorderRadius.circular(20),
                  child: MaterialButton(
                    onPressed: () {},
                    minWidth: 340,
                    height: 60,
                    child: Text(
                      'Continue',
                      style: TextStyle(
                        color: Colors.white,
                        fontSize: 25,
                        fontWeight: FontWeight.bold,
                      ),
                    ),
                  ),
                )
              ],
            ),
          ),
        );
      }
    }

Gesture Detector is not working when i apply animation on List view Builder it didn't let the Gesture Detector work how can I resolve this issue当我在列表视图生成器上应用 animation 时,手势检测器不工作它没有让手势检测器工作我该如何解决这个问题

import 'package:flutter/material.dart';
    
    class MoviesListView extends StatelessWidget {
      final ScrollController scrollController;
      final List images;
    
      const MoviesListView({Key key, this.scrollController, this.images})
          : super(key: key);
      @override
      Widget build(BuildContext context) {
        return Container(
          height: 120,
          child: ListView.builder(
              controller: scrollController,
              scrollDirection: Axis.horizontal,
              shrinkWrap: true,
              itemCount: images.length,
              itemBuilder: (context, index) {
                return Container(
                  margin: EdgeInsets.all(10),
                  decoration: BoxDecoration(
                    borderRadius: BorderRadius.circular(25),
                  ),
                  child: GestureDetector(
                    onTap: (){
                      print('Func Called');
                    },
                    child: ClipRRect(
                      borderRadius: BorderRadius.circular(25),
                      child: Image.asset(
                        'assets/${images[index]}',
                        width: 150,
                        fit: BoxFit.cover,
                      ),
                    ),
                  ),
                );
              }),
        );
      }
    }

Without Animation Gesture detector working perfectly没有 Animation 手势检测器工作正常

Try wrapping outer Container with GestureDetector()尝试用 GestureDetector() 包装外部 Container

return GestureDetector(
      onTap: () {
        print('Func Called');
      },
      child: Container(
        margin: EdgeInsets.all(10),
        decoration: BoxDecoration(
          borderRadius: BorderRadius.circular(25),
        ),
        child: ClipRRect(
          borderRadius: BorderRadius.circular(25),
          child: Image.asset(
            'assets/${images[index]}',
            width: 150,
            fit: BoxFit.cover,
          ),
        ),
      ),
    );

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM