微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从 2 个嵌套的 PageViews 获取屏幕上主要项目的索引?

如何解决如何从 2 个嵌套的 PageViews 获取屏幕上主要项目的索引?

我嵌套了PageView,外面是垂直(可以上下滚动),里面是水平(可以左右移动) - 在垂直滚动视图的每一行中,我都有水平页面浏览。

根据这里的代码,我得到了正确的外部综合浏览量索引,我称之为 rowIndx 但内部综合浏览量却是错误的索引。例如,当我在 rowIndx = 0columnIndx = 2 上时,我看到控制台中打印了正确的数字,当我向下滚动时,我得到的是 rowIndx = 1columnIndx = 2 而不是 {{1} } 和 rowIndx = 1

仅当您在每行中至少向右或向左滚动一次时,列索引才会更新。 如何在任何卡片上立即获得正确的索引?

您可以通过点击每张卡片在控制台中打印索引。每张卡片上的文字显示columnIndx = 0 的正确数字,以便于与控制台中打印的内容进行比较。

提前感谢您的帮助。

columnIndx

解决方法

我发现我可以将内部页面视图中的返回小部件分离成一个无状态小部件,并从该小部件中获取列和行,如下所示:

class MyHomePage extends StatefulWidget {

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int rowIndx = 0;
  int columnIndx = 0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: PageView.builder(
          onPageChanged: (index) {
            rowIndx = index;
          },scrollDirection: Axis.vertical,controller: PageController(initialPage: 0,viewportFraction: 0.63),itemCount: 5,itemBuilder: (_,index) {
            return PageView.builder(
                onPageChanged: (index) {
                  columnIndx = index;
                },controller:
                    PageController(initialPage: 0,itemCount: sampleCard.length,itemBuilder: (context,ind) {
                  return _Cards(
                    column: ind,row: index,);
                });
          }),);
  }
}

class _Cards extends StatelessWidget {
  final int column;
  final int row;

  const _Cards({Key? key,required this.column,required this.row})
      : super(key: key);

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: () {
        print('column : $column   in horizontal scroll > left and right');
        print('row : $row   in vertical scroll > up and down');
      },child: sampleCard[column],);
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。