颤动 3D 立方体效果

2023-12-28

我想问一下如何在 Flutter 中创建这种效果?


也许你知道 flutter 没有 3d 引擎。但你不需要它,你可以使用透视变换。

我为你做了一个小例子。

import 'dart:math';

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter 3D Cube Effect',
      theme: ThemeData(
        primarySwatch: Colors.green,
      ),
      home: Scaffold(
          body: Container(
        child: SafeArea(
          top: true,
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.center,
            children: <Widget>[
              Text('Flutter 3D Cube Effect'),
              Expanded(
                child: Pseudo3dSlider(),
              ),
            ],
          ),
        ),
      )),
    );
  }
}

class Pseudo3dSlider extends StatefulWidget {
  @override
  _Pseudo3dSliderState createState() => _Pseudo3dSliderState();
}

class _Pseudo3dSliderState extends State<Pseudo3dSlider> {
  Map<String, Offset> offsets = {
    'start': Offset(70, 100),
    'finish': Offset(200, 100),
    'center': Offset(100, 200),
  };

  double originX = 0;
  double x = 0;

  void onDragStart(double originX) => setState(() {
        this.originX = originX;
      });

  void onDragUpdate(double x) => setState(() {
        this.x = originX - x;
      });

  double get turnRatio {
    const step = -150.0;
    var k = x / step;
    k = k > 1 ? 1 : (k < 0 ? 0 : k);
    return 1 - k;
  }

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      behavior: HitTestBehavior.opaque,
      onPanStart: (details) => onDragUpdate(details.globalPosition.dx),
      onPanUpdate: (details) => onDragUpdate(details.globalPosition.dx),
      child: Slider(
        children: [
          _Side(
            color: Colors.blueAccent,
            number: 1,
          ),
          _Side(
            color: Colors.redAccent.shade200,
            number: 2,
          ),
        ],
        k: turnRatio,
      ),
    );
  }
}

class _Side extends StatelessWidget {
  const _Side({Key key, this.color, this.number}) : super(key: key);

  final Color color;
  final int number;

  @override
  Widget build(BuildContext context) {
    return Container(
      width: 150,
      height: 150,
      color: color,
      child: Center(
        child: Text(
          number.toString(),
          style: TextStyle(fontSize: 14),
        ),
      ),
    );
  }
}

class Slider extends StatelessWidget {
  Slider({
    Key key,
    @required this.children,
    @required this.k,
  }) : super(key: key) {
    assert(children.length == 2, 'wronge nubmer of children');
  }

  final List<Widget> children;
  final double k;

  @override
  Widget build(BuildContext context) {
    var k1 = k;
    var k2 = 1 - k;
    print(k1);
    print(k2);
    return Row(
      children: <Widget>[
        Transform(
          transform: Matrix4.identity()
            ..setEntry(3, 2, 0.003)
            ..rotateY(pi / 2 * k1),
          alignment: FractionalOffset.centerRight,
          child: children[0],
        ),
        Transform(
          transform: Matrix4.identity()
            ..setEntry(3, 2, 0.003)
            ..rotateY(pi / 2 * -k2),
          alignment: FractionalOffset.centerLeft,
          child: children[1],
        )
      ],
    );
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

颤动 3D 立方体效果 的相关文章

  • 意外的迭代器函数和 Iterable.take 行为

    我正在编写一个名为 批次 的简单函数 该函数应该将一个可迭代对象拆分为大小为 size 的可迭代对象的可迭代对象 然后我遇到了生成器函数和 Iterable take 方法的奇怪行为 当期望 知道 python 生成器行为时 这段代码 It
  • 在 Dartlang 中下载大文件

    我需要使用 dartlang 从浏览器下载较大的文件 我一直在使用 data uri 来下载 但已经达到了该方法的大小限制 想知道最好的方法是什么 我研究了使用 HTML5 文件系统 API 但它已被弃用 显然在大多数浏览器中从未真正实现过
  • 如何围绕指定的锚点以 2D 方式旋转容器小部件?

    我想对容器小部件 包含一些其他小部件 执行非常简单的 2D 旋转 该小部件将围绕中心的单个固定点旋转 不会变形 我尝试使用transform财产与Matrix4 rotationZ 这有点起作用 但锚点在top left角落 不在cente
  • Dart/Flutter 如何编译到 Android?

    我找不到任何具体的资源 Dart 是否被编译到 JVM 或者 Google 的团队是否编译了 Dart VM 以在 JVM 上运行 然后在 JVM 内的 Dart VM 中运行 Dart 前者更有意义 并且符合 无桥 的口号 但后者似乎更符
  • 如何在flutter web中实现视频播放?

    我正在尝试在我的 flutter web 应用程序上播放 firebase 上托管的视频 我不明白这怎么可能 使用 flutter 原生 video player使用插件 但仅适用于 ios 和 android 有人可以告诉我是否可以将视频
  • Flutter Web URL 路由不适用于真实域

    我正在尝试使用一个网址来获取参数并将该参数分配给网络文件内的变量 例如 我的域名是 example com 在这个网站中我需要用户的 ID 我想制作 example com id 123 并获取 123 id 并给出变量 123 值 在 f
  • 在 Flutter 中的组件顶部覆盖一条线

    I have the following layout in one of my components and would like to put a line on top of that like this 这是我当前的代码 并且已经在
  • Brush 属性的 WPF ColorAnimation

    我想知道是否有人可以帮助我 我有一个标签 当在后面的代码中调用方法时 我需要能够在任意两种颜色之间交叉淡入淡出 迄今为止我最好的尝试 Private OldColor as Color Colors White Sub SetPulseCo
  • 如何停止抖动中的计时器?

    我在 flutter 中创建了一个计时器 一切正常 现在我不知道如何在启动计时器后关闭它 文档说你可以通过调用取消它void cancel 但我不明白其实现 我该怎么称呼它 这是正确的方法吗 static const timeout con
  • Flutter android 风味生成 apk

    我正在尝试使用 flutter 设置 Android 风格 我有两个入口点 lib main prod dart lib main dev dart 我还在我的 gradle 文件中添加了以下内容 flavorDimensions vers
  • 在flutter中跟踪背景位置时使用background_locator插件时出现问题

    我正在尝试使用 flutter 跟踪后台位置 为此我正在使用背景定位器 https pub dev packages background locator插入 它的实现方式是注册某些静态回调函数 我声明了一个 File 类型的类变量来在后台
  • Flutter - 如何在 ListView 构建器中列出 forEach() 值?

    您好 我正在尝试将数据从 JSON 列出到 Listview Builder 但 Flutter 给了我这个错误 Column s children must not contain any null values but a null v
  • 如何在 flutter/dart 中使用设定大小的自定义字体?

    我正在尝试使用color fontWeight and fontFamily with style style copyWith 我尝试使用的自定义字体是Vonique 我已经将它像这样导入到pubspec yaml fonts famil
  • Flutter 和 Firebase - 使用 firebase_storage 和 firebase_auth

    使用 firebase 包 https pub dartlang org packages firebase auth https pub dartlang org packages firebase auth https pub dart
  • Flutter - TextPainter 与 Paragraph 绘制书页

    我需要显示长文本 这将占用几个屏幕 页面 我还必须添加一些功能 所以我想实现我自己的文本显示组件 我找到了与此任务相对应的两个类 文本绘制器 use TextSpan对于文本 use 油漆 画布 胶印 用于绘画 段落使用 队列 作为文本和样
  • 天文台服务器启动失败 - 无法创建套接字服务器

    我正在为自己构建一些内部工具 以使用我设置的一些模板以及可以在应用程序之间共享的一些附加功能来生成 Flutter 应用程序 目前 代码可以编译 构建并部署 但它会卡在第一个视图 空白屏幕 上 并在失败之 前重试启动 Observatory
  • 将两个 @observable 变量动态绑定(或格式化)到第三个 @observable 变量

    这是我认为可能更容易一些的事情 尽管问题很具体 但我对任何能让我根据 Polymer dart 其他两个字段的内容自动更新第三个表单字段的方法感兴趣 像这样 其中 代表表单字段 姓名 名字 姓氏 全名 家庭名称 名字 例如 如果有人进入 J
  • Flutter:在 Android 上获取本地 IP 地址

    如何在 Flutter 中获取我的 Android 设备的本地 IP 地址 这应该是 当连接到 WIFI 时 我的路由器通过 DHCP 分配的本地 IP 地址 如果连接到 VPN 则由我的 VPN 服务器分配的 VPN 网络中的本地 IP
  • 如何根据父级的大小来布局小部件?

    假设您有一个可能具有可变大小的父窗口小部件 例如 var container new Container height 200 0 Imagine this might change width 200 0 Imagine this mig
  • Dart:使用 html 导入时隔离不起作用

    我在 Dart 中发现了这种非常奇怪和不幸的行为 当我在主文件中导入 dart html 时 我的 Isolate 停止工作 使用我的文件 isolate dart main print BAM 这会打印 BAM import dart c

随机推荐

  • 查找未执行的 C++ 代码行

    作为单元测试的一部分 我想确保测试的代码覆盖率 目的是放置类似的东西REQUIRE TEST代码中某处的宏并检查是否所有这些都被调用 void foo bool b if b REQUIRE TEST else REQUIRE TEST v
  • 为什么内置 sum 在“from numpy import *”之后表现错误?

    我有一些代码 例如 import math csv sys re time datetime pickle os gzip from numpy import x 1 2 3 y sum x 实际值的总和x为2165496761 大于32位
  • 如何获取程序文件x86环境变量?

    我想知道如何在命令提示符中显示程序文件 x86 的位置 我使用的是 Windows 7 64 位 我试过了 echo programfiles x86 and echo programfiles 这两个输出C Program Files 当
  • WPF-如何获取绑定到 ListBoxItem 的对象

    这就是我想做的 我从数据库获取对象列表并将该列表绑定到 ListBox 控件 ListBoxItems 由一个文本框和一个按钮组成 这是我想出的 到目前为止 它按预期工作 该对象有许多属性 如 ID 名称 如果我单击 ListBoxItem
  • 用户授权 Java SE

    我需要创建具有不同用户角色 管理员和简单用户 的用户授权 管理员将拥有更多的功能 那么 我应该使用哪些类或引擎来实现对我的桌面应用程序的用户授权 我应该使用类javax security auth login 在桌面应用程序中实现授权的两种
  • 将私有文件写入内部存储

    我试图在内部存储上写入一些文件 我看到了FileOutputStream fos openFileOutput FILENAME Context MODE PRIVATE on 数据存储 http developer android com
  • 如何读取文件并将其重定向到变量?

    我有一个文件 上面写着一个字 我希望我的脚本将该词放入变量中 我怎样才能做到这一点 以数百万种方式 最简单的可能是 my var cat my file 如果你使用 bash 并且想要变得更漂亮 你可以使用 bash4 的映射文件 它将整个
  • 如何让容易出错的忽略我生成的源代码?

    我最近发现容易出错 http errorprone info并使用以下命令将其集成到我的 Android 版本中Gradle插件 https github com tbroyer gradle errorprone plugin在他们的页面
  • 服务器不随 spring 应用程序启动[重复]

    这个问题在这里已经有答案了 尝试运行 Spring Temple 项目时收到此错误消息 不知道为什么 有什么建议 这是控制台的完整日志 INFO The APR based Apache Tomcat Native library whic
  • Azure-CLI/Powershell 密码要求

    所以我试图让一个变量与在 azure CLI 中创建虚拟机的密码要求相匹配 为此 它必须具有以下 3 个 大写字母 1 个小写字母 1 个特殊字符或数字 这是我试图更改的主要代码 AdminPassword Read Host Prompt
  • UIButton 在 UIScrollView 中不起作用/不可点击

    我正在使用自动布局UIScrollView Main UIView高度 1300 内容视图 内UIScrollBar UIView 1100 ConetntView 底部包含一个按钮 它是完全可见的 但当我单击它时 它不起作用 限制条件是
  • 从我的 java 代码使用基本 http 身份验证的服务器下载文件时出现问题

    我编写了以下 java 代码来从使用 http 基本身份验证的服务器下载文件 但我收到 Http 401 错误 不过 我可以通过直接从浏览器点击 URL 来下载该文件 OutputStream out null InputStream in
  • 在 Inno Setup 中检测 Java 版本

    当使用 Inno Setup 安装我的 Java 应用程序时 我希望安装程序检查是否存在 Java 7 或更高版本 并在需要时安装它 但显然 我当前的代码无法在我的一些客户的计算机上检测到 Java 8 但我无法重现该错误 你看到我可能遗漏
  • python 导入嵌套类

    我是蟒蛇新手 这不是我的实际情况 这只是我对导入嵌套类的好奇心 所以我有一个main py and test py test py class one class two def twodef pass 所以在我的main py 我可以 i
  • 有没有办法通过与另一个修饰符链接来增加可组合项的大小?

    在jetpack Compose时使用Layout or SubcomposeLayout您可以使用以下方法来衡量您的可组合项Constraints limits 如果有一个固定大小的 Modifier Modifier size 500
  • 如何避免在 Windows 文件管理器根中显示存储提供程序同步根

    我正在使用存储提供程序和 Windows 云文件 API 创建文件系统 我想避免在 Windows 文件管理器中显示同步根 这是我用来注册同步根的代码 string path C Users User1 DAV StorageProvide
  • 类中的属性/方法占用内存空间吗?

    如果我们有这样的代码 public class Enemy public int hp Then an Enemy对象在 32 位机器中需要 4 个字节 在 64 位机器中需要 8 个字节 如果我错了 请纠正我 如果我们把它改成这样 pub
  • 如何在Asp.Net Web Api中返回Http 102处理?

    我正在使用 ASP NET Web API 构建 REST API 我有一个发布请求 可能需要 30 多秒才能完成 我通过返回 200 OK 和可由客户端应用程序轮询的状态属性解决了此问题 如果状态变为 完成 则客户端可以检索该结果 但我主
  • 使用 utf8mb4 的 PHP/mysql 站点无法从数据库中正确检索表情符号,尽管在我能找到的所有地方都指定了 utf8mb4

    我今天将 mysql 5 7 数据库转换为 utf8mb4 作为测试 我使用 Navicat 将便便表情符号 放入字段中 即使我退出并重新打开该程序 它在 Navicat 中也能正常显示 当我在脚本中使用 PDO 检索它并将其回显到浏览器时
  • 颤动 3D 立方体效果

    我想问一下如何在 Flutter 中创建这种效果 也许你知道 flutter 没有 3d 引擎 但你不需要它 你可以使用透视变换 我为你做了一个小例子 import dart math import package flutter mate