使用 PageView 时的 FadeTransition

2023-11-27

我试图做一些应该很简单的事情,但事实证明这非常困难!

当用户滚动到 flutter web 上的下一页时,我试图进行淡入淡出过渡。

我尝试使用在 stackoverflow 上找到的许多代码,但没有任何效果!

我最后尝试的是以下代码。它给了我一个白色的空白屏幕。当我使用..repeat(reverse: false) in _animationController,屏幕不断闪烁。

这是我的最终代码(空白屏幕):

import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';


class TestLayout extends StatefulWidget {
  const TestLayout({Key? key}) : super(key: key);

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

class _TestLayoutState extends State<TestLayout> with TickerProviderStateMixin {

  int _index = 0;
  late PageController pageController = PageController();

  late final AnimationController _animationController = AnimationController(
    duration: const Duration(seconds: 2),
    vsync: this,
  );

  late final Animation<double> _fadeInFadeOut = Tween<double>(begin: 0.0, end: 1.0).animate(_animationController);

  final List<String> _sectionsName = [
    "Home",
    // "heeeey",
    "Services"
  ];

  @override
  void dispose() {
    _animationController.dispose();
    super.dispose();
  }


  @override
  Widget build(BuildContext context) {
    return Scaffold(
      extendBodyBehindAppBar: true,
      appBar: MediaQuery.of(context).size.width > 760
      ? null
      : AppBar(
        elevation: 0.0,
        backgroundColor: Colors.transparent
      ),
      body: Stack(
        children: [
          NotificationListener(
            onNotification: (notification) {
              if(notification is UserScrollNotification){
                if (notification.direction == ScrollDirection.forward) {
                  print('down');
                  setState(() {
                    _animationController.forward();
                    pageController.nextPage(
                      curve: Curves.easeIn, duration: const Duration(milliseconds: 500)
                    );
                  });
                }
                if (notification.direction == ScrollDirection.idle) {
                  print('Idle');
                }

                if (notification.direction == ScrollDirection.reverse) {
                  print('up');
                  setState(() {
                    _animationController.forward();
                    pageController.previousPage(
                      curve: Curves.easeIn, duration: const Duration(milliseconds: 500)
                    );
                  });
                }
              }
              return false;
            },
            child: PageView(
              controller: pageController,
              scrollDirection: Axis.vertical,
              physics: const NeverScrollableScrollPhysics(),
              children: [
                FadeTransition(
                  opacity: _fadeInFadeOut,
                  child: Container(
                    color: Colors.red,
                    child: const Center(child: Text("Hi"))
                  )
                ),
                // Opacity(
                //   opacity: opacityHelper - (panPosition / screenHeight),
                //   child: Container(
                //     color: Colors.green,
                //     child: Center(child: Text("There"))
                //   )
                // ),
                FadeTransition(
                  opacity: _fadeInFadeOut,
                  child: Container(
                    color: Colors.yellow,
                    child: Center(child: Text("Welcome"))
                  )
                )
              ],
              onPageChanged: (index) {
                _index = index;
              }
            )
          )
        ]
      )
    );
  }
}

感谢任何帮助...提前致谢...


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 PageView 时的 FadeTransition 的相关文章

随机推荐

  • perl6 插入数组以匹配 AND、OR、NOT 函数

    我正在尝试重新执行我的程序 以匹配数组中的所有项目 匹配任意项目 不匹配项目 Perl6 的一些文档没有解释当前实现的行为 Rakudo 2018 04 我还有几个问题 1 正则表达式的文档说将数组插入匹配正则表达式意味着 最长匹配 但是
  • 如何让 IntelliJ IDEA 理解我的空检查方法?

    我有一个方法 其中参数标记为 Nonnull注解 调用该方法的代码必须检查该值是否为空 而不仅仅是直x null检查 它正在调用另一个类上的实用方法 在实际代码中 实用程序方法还会检查它是否为空字符串 我的问题是 Intellij Idea
  • 获取QTreeView中当前选定的项目

    我在 QTreeView 中有很多项目 每个项目都是使用此类生成的 class Branch QStandardItem def init self label uri None QStandardItem init self label
  • python 本地模块

    我有几个项目目录 并且想要特定于它们的库 模块 例如 我可能有这样的目录结构 myproject mymodules init py myfunctions py myreports mycode py 假设有一个函数叫做add in my
  • 如何使用 XmlPullParser 解析 RSS 提要?

    我想解析 RSS 提要 我的问题是如何解析之间的所有标签
  • Python中跨平台获取用户配置主目录的方法?

    我的程序需要存储一些配置文件 主要操作系统似乎都有一个指定的位置来放置它们 例如 在 Freedesktop org 兼容系统上 它将是存储在 XDG CONFIG HOME环境变量 是否有方法 或库 可以跨主要操作系统获取此配置主目录 W
  • 如何从 int 正确设置 UIColor?

    我正在尝试设置textColor of a UITextView通过给它赋值 在该计划的早期我有 textView textColor 0x000000 但后来 当我有 textView textColor 0x888888 弹出致命错误
  • Springboot 日志配置

    我尝试配置我的 springboot 应用程序以登录一个文件一天 所以我配置我的 logback xml 就像这样
  • jquery 更改在动态值更改的情况下不起作用

    在 jQuery 中我如何跟踪onchange如果文本框的值因其他事件而动态变化 则发生事件 我尝试过这个但它不起作用 txtbox change function alert change keyup不涵盖所有自然情况 两种情况当chan
  • “adb screencap /sdcard/screenshot.raw”生成什么格式? (没有“-p”标志)

    我正在寻找使用adb screencap实用程序没有 p旗帜 我想象输出将以原始格式转储 但看起来并非如此 我尝试打开原始图像文件Pillow python 库导致 adb pull sdcard screenshot raw screen
  • 页面加载时将光标更改为忙

    我了解如何在页面进行和 ajax 调用时使用 javascript 将光标更改为忙 但是我有一个不使用ajax的页面 它使用回发来重新加载页面 然而 加载的数据量相当大 并且需要几秒钟的时间 在此期间用户仍然可以点击该页面 我想将光标转到
  • `script` 和 `link as="script"` 标签有什么区别?

    除了加载脚本的标准方法之外 我见过人们这样做 有什么区别吗 注 还有一个类似的使用 link 和 script 标签引用 JavaScript 源代码有什么区别 问题询问关于 这是不同的 If that link标签有rel preload
  • 如何禁用谷歌浏览器自动更新? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 有谁知道如何禁用 Google Chrome 自动更新本身 它会导致我的网络应用程序总是发生变化 我已尝试使用此页面上提供的或如中所述的 Google Update ADM 模板这篇
  • 将MaterialToolbar的标题更改为center

    我正在使用导航组件和材质工具栏 我刚刚使用材质工具栏设置了导航组件 通过这样做 每当片段更改显示的后退按钮时 导航组件就会自动更改材质工具栏的标题 问题是我只想将标题重力更改为中心而不删除那些导航组件工具栏支持 我怎样才能做到这一点 注意
  • 如何配置 rspec 以使用 spork 显示输出?

    我运行了 spork 来加速我的测试 但是当我运行它们时没有输出 是否有我需要修改的配置 刚刚也遇到了这个问题 在 spork 1 0 0rc4 和 rspec 2 14 1 rspec core 2 14 8 上运行 据我所知 问题在于以
  • 时间戳和日期时间

    我有一个包含两列的表 第一列是 当前日期 时间戳 另一列是 日期返回 日期时间列 我需要从天数中获取当前日期和日期返回之间的差异 这可能吗 不 这是不可能的 与流行的看法 以及名称本身 相反 timestamp column 实际上与时间无
  • “当前不会命中断点” - 我无法添加 .pdb 文件

    我在 Visual Studio 中有一个包含一个项目的解决方案2013 视觉C 但是当我构建它时debug模式 那么运行它debug我得到的模式 当前不会命中断点 尚未加载任何符号 对于本文档 我试图以类似于人们建议的 Visual C
  • Linux:有没有办法在不停止/暂停进程(SIGSTOP)的情况下使用 ptrace?

    我正在尝试将程序从 Windows 移植到 Linux 当我发现没有 真实 的时候 我遇到了一个问题ReadProcessMemoryLinux 上的对应项 我寻找替代方案 然后发现ptrace 一个强大的进程调试器 我快速用 C 编写了两
  • 在双精度和字节数组之间进行转换,以便通过 ZigBee API 传输?

    我正在尝试获取两个双精度数 GPS 坐标 并通过 ZigBee API 将它们发送到另一个 ZigBee 接收器单元 但我不知道如何将双精度数分解为字节数组 然后将它们重新组合回原始形式一旦他们被转移 基本上 我需要将每个双精度数转换为八个
  • 使用 PageView 时的 FadeTransition

    我试图做一些应该很简单的事情 但事实证明这非常困难 当用户滚动到 flutter web 上的下一页时 我试图进行淡入淡出过渡 我尝试使用在 stackoverflow 上找到的许多代码 但没有任何效果 我最后尝试的是以下代码 它给了我一个