颤动设计曲线布局

2024-03-02

在颤振中,我知道我们可以画线来设计弧形布局,如下图所示

但我只是在 flutter 上学习这个功能,我无法设计它,也许在 flutter 中我们有一些实现的库或源代码,但我无法找到和设计它

请注意,屏幕右侧和曲线之间的空白可在高度和宽度上调整大小,并使用customPaint not clipping widget


这是工作示例。 也许您想要任何附加功能 - 我认为您可以实现它。 反正,CustomPainter工作正常,当您拖动按钮时小部件会发生变化:

import 'dart:math' as math;

class Test extends StatefulWidget {
  @override
  _TestState createState() => _TestState();
}

class _TestState extends State<Test> {
  double _height = 0.0;
  double _width = 0.0;
  final double _minPadding = 24.0;
  double _rightPadding = 24.0;
  double _btnSize = 48.0;
  double _btnY = 0.0;
  double _currentX = 0.0;
  double _currentY = 0.0;

  @override
  Widget build(BuildContext context) {
    if (_height == 0.0)
      setState(() {
        _height = MediaQuery.of(context).size.height;
        _width = MediaQuery.of(context).size.width;
        _btnY = _height / 3 * 2;
      });
    return _height == 0.0
        ? Container()
        : Stack(
            children: <Widget>[
              Container(
                color: Colors.white,
              ),
              CustomPaint(
                size: Size(_width - _rightPadding, _height),
                painter: CurvedPainter(_btnSize, _btnY),
              ),
              Positioned(
                top: _btnY - _btnSize / 2,
                right: _rightPadding  - _minPadding / 2,
                child: GestureDetector(
                  onPanDown: (details) {
                    _currentX = details.globalPosition.dx;
                    _currentY = details.globalPosition.dy;
                  },
                  onPanStart: (details) {
                    _onDrag(details.globalPosition.dx, details.globalPosition.dy);
                  },
                  onPanUpdate: (details) {
                    _onDrag(details.globalPosition.dx, details.globalPosition.dy);
                  },
                  child: Material(
                    type: MaterialType.circle,
                    color: Colors.white,
                    elevation: 8.0,
                    child: Container(
                      width: _btnSize,
                      height: _btnSize,
                      child: IconButton(
                        icon: Icon(Icons.add),
                        onPressed: () {},
                        iconSize: _btnSize / 3,
                      ),
                    ),
                  ),
                ),
              ),
            ],
          );
  }

  _onDrag(double x, double y) {
    double dx = _currentX - x;
    double dy = _currentY - y;
    _currentX = x;
    _currentY = y;
    setState(() {
      _rightPadding = _rightPadding + dx;
      _rightPadding = math.max(_rightPadding, _minPadding);
      _rightPadding = math.min(_rightPadding, _width - _btnSize);
      _btnY = _btnY - dy;
      _btnY = math.max(_btnY, _btnSize);
      _btnY = math.min(_btnY, _height - _btnSize);
    });
  }
}

class CurvedPainter extends CustomPainter {
  CurvedPainter(this.btnSize, this.btnY);

  final double btnSize;
  final double btnY;

  @override
  void paint(Canvas canvas, Size size) {
    Path path = Path();
    path.moveTo(0.0, 0.0);
    path.lineTo(size.width, 0.0);
    path.lineTo(size.width, btnY - btnSize * 2);

    path.cubicTo(size.width, btnY - btnSize * 0.3,
        size.width - btnSize * 0.95, btnY - btnSize * 0.9,
        size.width - btnSize, btnY);
    path.cubicTo(size.width - btnSize * 0.95, btnY + btnSize * 0.9,
        size.width, btnY + btnSize * 0.3,
        size.width, btnY + btnSize * 2);

    path.lineTo(size.width, size.height);
    path.lineTo(0.0, size.height);
    path.lineTo(0.0, 0.0);
    canvas.drawPath(
        path,
        Paint()
          ..color = Colors.green
          ..style = PaintingStyle.fill);
  }

  @override
  bool shouldRepaint(CurvedPainter oldDelegate) =>
    oldDelegate.btnY != btnY;
}

(所有系数都是根据经验得出的)

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

颤动设计曲线布局 的相关文章

  • 非抽象类“InternalSelectableMathState”缺少这些成员的实现[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 C src flutter pub cache hosted pub dartlang org flutter math
  • Flutter - 如何在 ListView 构建器中列出 forEach() 值?

    您好 我正在尝试将数据从 JSON 列出到 Listview Builder 但 Flutter 给了我这个错误 Column s children must not contain any null values but a null v
  • 在 Firebase 重置密码表单中自定义验证和文本?

    我在我的 flutter 应用程序中使用 Firebase 身份验证 我使用 PIN 代替普通密码 这是我严格定义的 6 位数字 如果我的用户忘记了 PIN 码 我唯一的选择 或不是 是致电sendPasswordResetEmail me
  • Flutter - 将未来列表传递给 SearchDelegate

    我一直在关注 Flutter Search 教程 我一直在尝试使用从未来列表派生的列表来实现相同的功能 其中数据来自 api 在本例中是 Aqueduct 服务器 目前我的屏幕列出了 api 中的所有联系人 我现在想搜索该联系人列表 我假设
  • Flutter:在 Android 上获取本地 IP 地址

    如何在 Flutter 中获取我的 Android 设备的本地 IP 地址 这应该是 当连接到 WIFI 时 我的路由器通过 DHCP 分配的本地 IP 地址 如果连接到 VPN 则由我的 VPN 服务器分配的 VPN 网络中的本地 IP
  • 无法解析符号 FlutterActivity

    我使用 VCS gt Checkout from Version Control 将 flutter 项目从 github 导入到 Android Studio 中 现在我面临的问题是 Cannot resolve symbol Flutt
  • DraggableScrollableSheet 拖动时不会给出工作表的当前位置

    在flutter中我们有一个小部件可拖动可滚动表 现在我想要子元素拖动时的当前位置或当前大小 目前还没有办法获得该值 它在其构建器方法中提供了 ScrollController 但那是在列表滚动时而不是在拖动列表时 那么还有另一种方法可以跟
  • 使用 Flutter Flavor 运行调试?

    我正在尝试在 Visual Studio 代码上为我的 flutter 应用程序运行调试模式 单击 运行和调试 但是当我这样做时 我面临以下问题 The Xcode project defines schemes release priva
  • 是否可以从图像中获取图像 GPS 位置坐标?

    我正在构建一个 Flutter 应用程序 用户可以在其中发布照片及其位置 用户可以从相机或图库中获取图片 如果用户从相机拍照 我可以使用设备的 GPS 位置来设置图片的位置 我正在尝试根据图片的元数据获取图片的 GSP 位置 但是 我还没有
  • 如何为 flutter 绘图应用实现橡皮擦功能

    有一个关于通过 flutter 创建绘图应用程序的视频 YouTube https www youtube com watch v yyHhloFMNNA 它支持当用户点击屏幕时绘制线 点 但我找不到像 Android 本机那样擦除用户绘制
  • Riverpod - ref.refresh。应该使用“刷新”的值

    我正在将 Riverpod 与 flutter 一起使用 在我的主屏幕上 我有一个 FutureProvider 它调用 API 服务器 并在页面上显示结果 在应用程序的不同点 不同屏幕上的用户进行更改 然后我从另一个屏幕刷新提供程序 像这
  • 如何从cloud firestore获取数据,其中user.uid等于flutter中的文档id?

    我有一个显示用户信息的个人资料屏幕 用户经过身份验证后 我将数据存储在云 Firestore 中 文档 ID 等于用户 ID 现在 我想从 cloud firestore 检索数据 当前 userId 等于文档 id 现在我有这个 clas
  • Flutter:CachedNetworkImage不缓存图像

    我有一个从 Firebase 存储中检索图像的小部件 但现在我想缓存这些图像 以使用户体验更加简洁 并且还避免对 Firebase 的不必要的调用 所以我找到了 CachedNetworkImageProvider 它听起来像是我想要的一切
  • Android Studio 中缺少“生成签名包/APK”选项

    我刚刚为 Flutter 项目设置了一台新的开发机器 需要部署一个 APK 以在 Play 商店上进行测试 来自 iOS 我不熟悉部署到 Play 商店 但在我的研究中 我发现我需要使用以下选项创建一个密钥存储 Build gt Gener
  • Flutter 导航到其他页面中的特定选项卡

    我正在尝试从一个页面导航到另一页面并设置选项卡栏的索引 这是我在第一页的代码 GestureDetector onTap Navigator push context MaterialPageRoute builder context gt
  • 以阿拉伯语格式显示数字 Dart

    如何在flutter应用程序中显示阿拉伯格式的数字 我需要将它们显示为 而不是将数字显示为 1 2 3 我尝试使用 NumberFormat 类 但它不起作用 颤抖医生 Doctor summary to see all details r
  • 颤振:音频服务。如何播放本地文件?

    我想播放本地文件的播放列表 在android上 没有问题 我可以在Mediaitem id 中添加本地文件并且它可以正常播放 但在 iOS 上它不起作用 我收到这个错误 VERBOSE 2 ui dart state cc 186 Unha
  • Flutter:防止抽屉关闭

    Flutter 中是否可以防止关闭抽屉 我在用endDrawer作为网络应用程序中的表单 我已禁用滑动打开功能 并且我还希望只允许通过按钮关闭它 这样用户就不会通过单击外部意外地关闭它 但是我看不到任何布尔值 例如防止解雇或任何实施方式Wi
  • Flutter - 迭代对象键和值

    我有和反对 我想知道是否有一种简单的方法来迭代它的键和值 class Post String id String title String article Post this id this title this article 那没有 你
  • 保留选项卡视图页面之间的状态

    issue 我有两个ListViews渲染内部TabBarView用一个TabController 我如何在每个之间保留状态 由于缺乏更好的词 ListView这样 1 小部件不会重建 2 ListView选项卡之间的位置会被记住 相关代码

随机推荐

  • Gnuplot 绘制两个 CSV 文件的排序合并

    我正在尝试合并和排序两个 CSV 文件 跳过前 8 行 我尝试按我使用的第 36 列对其中一个文件进行排序 awk NR gt 8 print Hight 5x5 csv sort nk36 并合并两个文件 cat Hight 5x5 cs
  • 如何让PHP自动为每个用户创建子域?

    如何创建子域http user mywebsite example 我必须访问吗 htaccess不知何故 实际上是否可以通过纯 PHP 代码创建它 或者我需要使用一些外部脚本服务器端语言 对于那些回答的人 那么 我应该询问我的托管服务是否
  • 转换为值类型“Double”失败,因为具体化值为 null

    CODE double cafeSales db InvoiceLines Where x gt x UserId user UserId x DateCharged gt dateStart x DateCharged lt dateEn
  • 如何在 Java 中抛出一般异常?

    考虑这个简单的程序 该程序有两个文件 File 车辆 java class Vehicle private int speed 0 private int maxSpeed 100 public int getSpeed return sp
  • 将 div 浮动在右下角,但不在页脚内

    我正在尝试实现一个浮动在页面右下角的 转到顶部 按钮 我可以使用以下代码来完成此操作 但我不希望此按钮进入我的页面的页脚 当用户将页面向下滚动到页面底部时 如何阻止它进入页脚并停留在页脚顶部 CSS to top position fixe
  • C++ - 区间树实现

    有人知道有什么好办法吗interval tree在C 中实现 显然 模板驱动的东西更好boost 风格 还有一个问题 如果有人测试过 会做一个基本的测试std vector基于排序的区间树实现可以击败通用区间树 O lg 运算 在实践中 我
  • JQuery:在“内存”而不是 DOM 中构建 HTML

    有没有办法在将 HTML 片段添加到 DOM 之前 预先构建 它 例如 mysnippet append h1 hello h1 mysnippet append h1 world h1 destination append mysnipp
  • JavaScript 函数声明

    下面给出的 JavaScript 代码片段是某种函数声明吗 如果没有 有人可以概述一下它们是什么吗 some func function value some code here and show function value some c
  • 如何复制视图的所有属性?

    我正在创建一个货币汇率应用程序来学习 Android 该应用程序将在列表中列出所有汇率 每个汇率都有这样的布局 本质上
  • 指针到指针到指针[重复]

    这个问题在这里已经有答案了 可能的重复 用于多级指针取消引用 https stackoverflow com questions 758673 uses for multiple levels of pointer dereferences
  • React Native - 如何在地图函数中传递索引

    我有一个地图函数来重复动态地创建组件 假设是这样的 renderBoxes return Array map data gt this myFunction indexOfThisArray 如何传递数组的索引 这样 myFunction
  • 将视图从一种布局动画化到另一种布局

    检查附图以方便解释 翻译动画可以工作 但它会在同一视图内进行动画处理 我希望视图从一种布局飞出到另一种布局 我从这里的另一个答案尝试过这个 相同布局的动画 public class Animations public Animation f
  • 无法在 PHP 中创建不区分大小写的正则表达式

    我无法在 php 中创建有效的正则表达式 我在用着i标记为正则表达式模式 但它不会对我的脚本的结果产生影响 page Test page1 test var dump preg match test i page int 0 var dum
  • 为引用的程序集引发 FileNotFoundException

    我真的很奇怪FileNotFoundException第一次尝试使用我引用的程序集中定义的类时抛出 程序集没有更改 项目文件中的位置与磁盘上的物理路径正确对应 当我将安装程序添加到 Windows 服务和安装项目时 由两个库项目 一个 Wi
  • iOS8后台获取问题

    我在 ios8 之前使用后台获取没有问题 但在 ios8 中 当我在手机上模拟后台获取时 我首先收到一条错误消息 指出我无权播放声音 因此我没有收到任何本地通知 然后打开应用程序后 应用程序崩溃 我收到这个奇怪的错误 由于未捕获的异常而终止
  • fetch.max.wait.ms 与 poll() 方法的参数

    在提出问题之前 我想指出已经有人提出了类似的问题here https stackoverflow com questions 50302119 apache kafka understanding the relationship betw
  • 是否可以在groovy函数上设置环境变量

    我知道我可以在一个阶段有一个关于詹金斯管道 声明性 的环境部分 像这样 stage Name environment NAME value steps script Do something using these env vars 我想编
  • 删除条件格式

    我正在尝试使用 C 和以下代码添加条件格式 Microsoft Office Interop Excel FormatCondition formatConditionObj null formatConditionObj Microsof
  • 检查对象是否声明为 const

    如果对象被声明为 const 我想中断编译 以下不起作用 include
  • 颤动设计曲线布局

    在颤振中 我知道我们可以画线来设计弧形布局 如下图所示 但我只是在 flutter 上学习这个功能 我无法设计它 也许在 flutter 中我们有一些实现的库或源代码 但我无法找到和设计它 请注意 屏幕右侧和曲线之间的空白可在高度和宽度上调