首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用拖动手势或PageView ()检查页面是否更改

问使用拖动手势或PageView ()检查页面是否更改
EN

Stack Overflow用户
提问于 2021-01-13 02:45:23
回答 1查看 1.6K关注 0票数 0

在Scaffold页面中,其结构如下所示

代码语言:javascript
复制
@override
Widget build(BuildContext context){
  body: PageView(
          controller: _controller;
          children: <Widget>[Page1(), Page2(), Page3()];
        );
  bottomNavigationBar: BottomNavBar(
                         onItemSelected: (index) => _controller.animateToPage()
                       )
}

从Page2()到Page1()有两种方法

_controller.animateToPage(0)

  • 从左到右滑动屏幕,

  • 点击bottomNavigationBar上的Page1()图标,从而调用Page1()

问题是,如何通过滑动手势或animateToPage()函数来判断页面是否被更改?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-13 03:27:38

如果animateToPage是否正在进行,也许您可以添加一个设置标志。

示例:

代码语言:javascript
复制
import 'package:flutter/material.dart';

void main() => runApp(Root());

class Root extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final PageController controller = PageController();
    bool isAnimateToPage = false;

    controller.addListener(() {
      print('LISTENER isAnimateToPage = $isAnimateToPage');
    });

    return MaterialApp(
      home: Scaffold(
        body: Column(
          children: <Widget>[
            Expanded(
              child: PageView(
                controller: controller,
                onPageChanged: (int page) {
                  print(
                      'ONPAGECHANGED isAnimateToPage = $isAnimateToPage ; page = $page');
                },
                children: <Widget>[
                  const Center(child: Text('page 1')),
                  const Center(child: Text('page 2')),
                  const Center(child: Text('page 3')),
                ],
              ),
            ),
            FlatButton(
              onPressed: () async {
                isAnimateToPage = true;
                await controller.animateToPage(
                  controller.page.toInt() + 1,
                  duration: const Duration(seconds: 1),
                  curve: Curves.easeIn,
                );
                isAnimateToPage = false;
              },
              child: const Text('Next'),
            ),
          ],
        ),
      ),
    );
  }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65694963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档