当我使用ListView时,ListTile OnTap正常工作。但是当我使用ListWheelScrollView时不起作用

时间:2019-05-22 11:23:12

标签: android dart flutter flutter-dependencies

当我使用ListView时,ListTile OnTap正常工作。但是,当我使用ListWheelScrollView时,它不起作用。我的意思是它不会被窃听。视图改变。但是我似乎无法点击它。我在很多地方和链接中都找到了解决方案,但仍然找不到解决方案。

这些是我编写的代码。

@override
  Widget build(BuildContext context) {
    return new ListWheelScrollView(
      physics:FixedExtentScrollPhysics(),
      children: getPostList(),
      itemExtent: 100.0,
    );
  }

  List<PostListItem> getPostList() {
    return _postModal
        .map((contact) => new PostListItem(contact))
        .toList();
  }

这是我构建ListTile的地方

@override
  Widget build(BuildContext context) {
    return new ListTile(
      onTap:  () {
          var route = new MaterialPageRoute(
            builder: (BuildContext context) =>
                new OnTapPost(value: _postModal.fullName),
          );
          Navigator.of(context).push(route);
        },
        leading: new Image.asset('assets/images/logo.png'),
        title: new Text(_postModal.fullName),
        subtitle: new Text(_postModal.email)
    );

  }

在上面的代码中,列表项没有被点击。但是,如果我将ListWheelScrollView替换为ListView,如下所示,则可以正常工作。

@override
  Widget build(BuildContext context) {
    return new ListView(
      children: getPostList(),
    );
  }

  List<PostListItem> getPostList() {
    return _postModal
        .map((contact) => new PostListItem(contact))
        .toList();
  }

2 个答案:

答案 0 :(得分:0)

在互联网上寻找解决方案后,未找到。看来它现在也用谷歌搜索了。

要获得另一种接近效果,请尝试使用CarouselSlider小部件,然后将方向滚动到垂直。随着“ enlargecenterpage为true”。没有接近,但足够好。对于使用某种构建器的商品。

答案 1 :(得分:-1)

我有同样的问题 如果您仍然要使用ListWheelScrollView而不是ListView,

您可以将ListWheelScrollView包裹在GestureDetector中,并制作_postModals的列表。 使用onSelectedItemChanged确定当前选择的列表项索引,然后创建一个全局Index变量。这是我的意思的示例:

import 'package:flutter/material.dart';

class ListScrollWheelExample extends StatelessWidget {
@override
Widget build(BuildContext context) {

List<PostModal> _postModals = [
  //Add your postModals here
];
int Index;

return GestureDetector(
  onTap: (){
    var route = new MaterialPageRoute(
      builder: (BuildContext context) =>
      new OnTapPost(value: _postModals[Index].fullName),
    );
    Navigator.of(context).push(route);
  },
  child: ListWheelScrollView(
    onSelectedItemChanged: (int index){
      Index = index;
    },
    offAxisFraction: -0.85,
    diameterRatio: 0.75,
    physics: FixedExtentScrollPhysics(),
    itemExtent: 100,
    children: <Widget>[

      getPostList(),

    ],
  ),
);
}
}

并在您的ListTile中:

leading: new Image.asset('assets/images/logo.png'),
title: new Text(_postModals[Index].fullName),
subtitle: new Text(_postModals[Index].email)

之所以使用这种方式,是因为我仍然喜欢转轮的外观,并且我不想转换为ListView,但是请尽量不要将ListWheelScrollView的直径设置得太大,以使攻丝功能正常工作。

编辑: 如果要单击多个项目(3个或4个可见项目),则可以将ListWheelScrollView包装在具有3个或4个Gesture检测器的堆栈中。然后使用Index-1和Index + 1,... etc