在叠加层前制作一个小部件

暗区

我正在尝试在 Flutter 中重现与 Pinterest 相同的上下文菜单。所以我有一个叠加层,它显示我的上下文菜单和背景,我还想将当前元素保留在叠加层前面

这里有 2 个视频:Pinterest 菜单我的 Flutter 菜单

为了制作叠加层,我正在使用 flutter_portal 包。

这是带有覆盖层的蓝卡小部件的代码:

import 'package:flutter/material.dart';
import 'package:flutter_portal/flutter_portal.dart';
import 'package:vector_math/vector_math.dart' show radians;

class CardWidget extends StatefulWidget {
  @override
  _CardWidgetState createState() => _CardWidgetState();
}

class _CardWidgetState extends State<CardWidget> with SingleTickerProviderStateMixin {
  late AnimationController controller;
  late Animation<double> degreeAnimation;
  late Animation<double> opacityAnimation;
  bool isMenuOpen = false;
  double menuPosX = 0;
  double menuPosY = 0;

  @override
  void initState() {
    controller = AnimationController(vsync: this, duration: Duration(milliseconds: 200))
      ..addListener(() {
        setState(() {});
      })
      ..addStatusListener((status) {
        if (status == AnimationStatus.forward) {
          isMenuOpen = true;
        } else if (status == AnimationStatus.dismissed) {
          isMenuOpen = false;
        }
      });
    degreeAnimation =
        Tween(begin: 0.0, end: 1.0).animate(CurvedAnimation(parent: controller, curve: Curves.easeOutBack));
    opacityAnimation =
        Tween(begin: 0.0, end: 1.0).animate(CurvedAnimation(parent: controller, curve: Curves.easeOutExpo));

    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return AspectRatio(
      aspectRatio: 63.5 / 88.9,
      child: PortalEntry(
        visible: isMenuOpen,
        portal: Container(
          color: Colors.black.withOpacity(opacityAnimation.value / 2),
          child: GestureDetector(
            behavior: HitTestBehavior.opaque,
            onTap: () {
              controller.reverse();
            },
          ),
        ),
        child: PortalEntry(
          visible: isMenuOpen,
          child: GestureDetector(
            onTapDown: (details) {

              if (controller.isCompleted) {
                controller.reverse();
              } else {
                menuPosX = details.globalPosition.dx;
                menuPosY = details.globalPosition.dy;

                controller.forward();
              }
            },
            // Blue card content
            child: Container(
              decoration: BoxDecoration(
                color: Colors.blue,
                borderRadius: BorderRadius.all(
                  Radius.circular(8),
                ),
              ),
              child: Center(
                child: Text(
                  'Card Widget',
                  style: TextStyle(color: Colors.white),
                ),
              ),
            ),
          ),
          // Current contextual Menu
          portal: ContextualMenuWidget(),
        ),
      ),
    );
  }
}

感谢您的帮助!

原型

也许不是尝试添加叠加层,您可以将所有其他卡片的颜色更改为与背景相同。这样你就可以达到同样的效果。

您可以检查是否isMenuOpen为真并保存单击它的卡片的索引,并且在您的网格构建器功能中,您可以将所有卡片的颜色更改为与背景相同。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Tkinter:如何制作一个圆角文本小部件?

在Flutter中制作一个TextFormField全局小部件

如何在Qt中制作一个可扩展/可折叠的小部件

在Tkinter中制作一个对东方,西方和南方都具有粘性的小部件

如何获取模式小部件以在iframe叠加层中工作

允许一个小部件溢出到另一个小部件

在Tkinter中滚动一个小部件与另一个小部件

堆栈小部件的前一个子项未激活

Python / PySide:如何制作一个将保留在主窗口顶部但不掩盖其他小部件的小部件?

Flutter-如何制作一个自定义小部件,以将页脚添加到接收到的可滚动小部件中?

Flutter如何使Wrap小部件中的Text小部件从上一个小部件的末尾开始而不是在前一个小部件的下面开始?

Qt / C ++-在关闭一个小部件时关闭两个小部件

两个 html 画布相互叠加,一个游戏层和一个 gui 层。好坏?

使用CSS和z-index创建页面叠加层,然后在叠加层顶部放置一个元素

悬停时带有阴影+文本叠加层和另一个叠加层的引导响应图像

如何从父小部件访问和更改另一个小部件 pageControllers 索引?

如何在另一个小部件的children属性中传递小部件列表?

为什么我们必须从一个小部件更新多个小部件?

除非激活另一个小部件,否则闪亮的小部件不起作用

GTK3用另一个小部件替换子小部件

如何在 PyQt5 中用另一个小部件替换小部件

如何在Flutter中将小部件放在另一个小部件上方?

如何从覆盖另一个小部件的小部件中删除透明度?

另一个小部件Qt中的小部件

QT在另一个小部件内插入小部件

基于另一个小部件显示/隐藏散景小部件

Flutter在堆栈中另一个小部件下混合/掩盖多个小部件

如何将数据从一个小部件传递到其同级小部件?

如何在 PositionedTransition 小部件中放置一个可以正常工作的小部件