【问题标题】:The change in value of opacity is not reflected in the appopacity 值的变化没有反映在应用程序中
【发布时间】:2019-09-03 16:06:26
【问题描述】:

我正在尝试制作视频播放器。我正在使用Stack() 在视频顶部显示多行图标按钮。我想让这些图标在一段时间后像在 YouTube 移动应用中一样消失。

我使用了AnimatedOpacity() 小部件,但如果我将它们设置为可见,则图标仍保留在屏幕上,如果从一开始就将它们设置为不可见,则它们的不透明度永远不会改变。有人可以指导我吗?

Positioned.fill(
  child: AnimatedOpacity(
    opacity: _isVisible ? 1.0 : 0.0,
    duration: Duration(seconds: 3),
    child: GestureDetector(
      onTap: () {
        setState(() {
          _isVisible = !_isVisible;
        });
        // Future.delayed(Duration(seconds: 4), () {
        //   setState(() {
        //     _isVisible = false;
        //   });
        // });
      },
      child: Container(
          height: (MediaQuery.of(context).size.width /
              _controller.value.aspectRatio),
          width: double.infinity,
          child: PlayerControls(controller: _controller)),
    ),
  ),
)

我预计图标会在 3 秒后消失,但那并没有发生。

【问题讨论】:

    标签: flutter dart flutter-layout


    【解决方案1】:

    你可以这样做:

                double opacityLevel = 1.0;
    
                Positioned.fill(
                  child: AnimatedOpacity(
                    opacity: opacityLevel,
                    duration: Duration(seconds: 3),
                    child: GestureDetector(
                      onTap: () {
                        setState(() => opacityLevel = opacityLevel == 0 ? 1.0 : 0.0);
                        // Future.delayed(Duration(seconds: 4), () {
                        //   setState(() {
                        //     _isVisible = false;
                        //   });
                        // });
                      },
                      child: Container(
                          height: (MediaQuery.of(context).size.width /
                              _controller.value.aspectRatio),
                          width: double.infinity,
                          child: PlayerControls(controller: _controller)),
                    ),
                  ),
                )
    

    【讨论】:

    • 我尝试为容器着色,然后当我点击它时,颜色消失了,但即使不透明度为 1,图标也没有显示。
    • 您可以尝试使用 GestureDetector 更改容器吗?将 GestureDetector 作为容器的子节点
    • 看起来 PlayerControls 的构建器没有重建,因为当我将占位符小部件放入其中时,它仅在单击图标时才消失,而不是容器。我还尝试将所有这些移动到 PlayerControls 小部件,靠近行图标小部件,但同样的问题仍然存在。
    • 您可以做的一件事肯定会起作用,就是将 opacityLevel 作为参数传递给 PlayerControls。并使用此不透明度来隐藏 PlayerControls 小部件内的图标。它不是 IMO 最干净的解决方案,但它可以解决问题
    猜你喜欢
    • 2016-12-11
    • 2015-09-23
    • 2022-01-24
    • 2021-04-23
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多