像气球/工具提示小部件一样的Flutter设计Instagram

不要停下来

在扑朔迷离中,我想将此布局设计为小部件

在此处输入图片说明

当前实现的代码具有以下结果:

在此处输入图片说明

您能帮我解决这个问题吗?

在那个高度/重量和角落应该是可定制的,我应该在里面放一些小部件,例如:

在此处输入图片说明

class MessageClipper extends CustomClipper<Path> {
  MessageClipper({this.borderRadius = 15});
  final double borderRadius;
  @override
  Path getClip(Size size) {
    double width = size.width;
    double height = size.height;
    double rheight = height - height / 3;
    double oneThird = width / 3;

    final path = Path()
      ..lineTo(0, rheight - borderRadius)
      ..cubicTo(0, rheight - borderRadius, 0, rheight, borderRadius, rheight)
      ..lineTo(oneThird, rheight)
      ..lineTo(width/2-borderRadius, height-borderRadius)
      ..cubicTo(width / 2 - borderRadius, height - borderRadius, width / 2,
          height, width / 2 + borderRadius, height - borderRadius )
      ..lineTo(2 * oneThird, rheight)
      ..lineTo(width-borderRadius, rheight)
      ..cubicTo(width - borderRadius, rheight, width, rheight, width,
          rheight - borderRadius)
      ..lineTo(width, 0)
      ..lineTo(0, 0);
    return path;
  }

  @override
  bool shouldReclip(CustomClipper<Path> oldClipper) => true;
}
帕勃罗·巴雷拉(Pablo Barrera)

编辑:正如在这个问题中提到的pskinkFlutter-ClipPath,这将是实现您想要的正确方法:

class TooltipShapeBorder extends ShapeBorder {
  final double arrowWidth;
  final double arrowHeight;
  final double arrowArc;
  final double radius;

  TooltipShapeBorder({
    this.radius = 16.0,
    this.arrowWidth = 20.0,
    this.arrowHeight = 10.0,
    this.arrowArc = 0.0,
  }) : assert(arrowArc <= 1.0 && arrowArc >= 0.0);

  @override
  EdgeInsetsGeometry get dimensions => EdgeInsets.only(bottom: arrowHeight);

  @override
  Path getInnerPath(Rect rect, {TextDirection textDirection}) => null;

  @override
  Path getOuterPath(Rect rect, {TextDirection textDirection}) {
    rect = Rect.fromPoints(rect.topLeft, rect.bottomRight - Offset(0, arrowHeight));
    double x = arrowWidth, y = arrowHeight, r = 1 - arrowArc;
    return Path()
      ..addRRect(RRect.fromRectAndRadius(rect, Radius.circular(radius)))
      ..moveTo(rect.bottomCenter.dx + x / 2, rect.bottomCenter.dy)
      ..relativeLineTo(-x / 2 * r, y * r)
      ..relativeQuadraticBezierTo(-x / 2 * (1 - r), y * (1 - r), -x * (1 - r), 0)
      ..relativeLineTo(-x / 2 * r, -y * r);
  }

  @override
  void paint(Canvas canvas, Rect rect, {TextDirection textDirection}) {}

  @override
  ShapeBorder scale(double t) => this;
}

这是使用方法:

@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: Text('Instagram Like Balloon Tooltip'),
    ),
    body: Center(
      child: Container(
        decoration: ShapeDecoration(
          color: Colors.red,
          shape: TooltipShapeBorder(arrowArc: 0.5),
          shadows: [
            BoxShadow(
                color: Colors.black26, blurRadius: 4.0, offset: Offset(2, 2))
          ],
        ),
        child: Padding(
          padding: EdgeInsets.all(16.0),
          child: Text('Text 22', style: TextStyle(color: Colors.white)),
        ),
      ),
    ),
  );
}

这将是结果:

Instagram喜欢Flutter中的气球工具提示

如果你想改变箭头的曲率,您可以使用arrowArc的属性格式TooltipShapeBorder,如果你将其设置为0.0它不会有任何弯曲,如果你将其设置为1.0将具有最大的曲率。

若要查看如何quadraticBezierTo工作以及如何制作其他形状,请检查以下链接:Flutter中的路径:视觉指南

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使Flutter小部件的一部分像堆栈一样

来自分类Dev

如何显示像弹出窗口一样的小部件

来自分类Dev

Kivy:像小部件一样控制视频深度

来自分类Dev

Kendo是否有像asp.net Ajax一样的向导式ui小部件?

来自分类Dev

如何使小部件像按钮一样短暂地改变颜色

来自分类Dev

我可以在Container中溢出小部件以使其像修剪的一样吗?

来自分类Dev

Qt:如何制作像 QTextField 一样对齐的自定义小部件

来自分类Dev

像Nodejs一样的工具?

来自分类Dev

像instagram app一样使用Fragment的更改来更改工具栏

来自分类Dev

Safari工具栏UI设计,如何像Safari一样集成添加按钮?

来自分类Dev

Safari工具栏UI设计,如何像Safari一样集成添加按钮?

来自分类Dev

如何让 Highstock 工具提示像 Highcharts 一样制作动画?

来自分类Dev

像instagram一样快速的启动画面

来自分类Dev

像代号One中的Instagram一样水平滚动

来自分类Dev

像appbar一样的instagram个人资料页

来自分类Dev

如何使相机预览像Instagram一样方形

来自分类Dev

使标签栏项像instagram一样弹出viewcontroller

来自分类Dev

下载像 RSS Feed 一样的 Instagram 照片

来自分类Dev

像 Instagram 一样的回收者视图

来自分类Dev

设计UIImages像圆形动画一样滚动

来自分类Dev

如何像预期的布局一样设计布局

来自分类Dev

像Windows一样的命令提示符

来自分类Dev

像截图工具一样突出显示效果

来自分类Dev

像Google的“搜索工具”一样的CSS动画

来自分类Dev

HTML显示div,就像td的工具提示一样

来自分类Dev

Flutter:-如何像Android“ SingleTask”一样管理backstack?

来自分类Dev

像背包一样

来自分类Dev

在新的材料设计中,是否有像流行的 Android 应用程序一样在工具栏上居中标题的官方 API?

来自分类Dev

显示工具提示时“实时”更新小部件的工具提示

Related 相关文章

  1. 1

    如何使Flutter小部件的一部分像堆栈一样

  2. 2

    如何显示像弹出窗口一样的小部件

  3. 3

    Kivy:像小部件一样控制视频深度

  4. 4

    Kendo是否有像asp.net Ajax一样的向导式ui小部件?

  5. 5

    如何使小部件像按钮一样短暂地改变颜色

  6. 6

    我可以在Container中溢出小部件以使其像修剪的一样吗?

  7. 7

    Qt:如何制作像 QTextField 一样对齐的自定义小部件

  8. 8

    像Nodejs一样的工具?

  9. 9

    像instagram app一样使用Fragment的更改来更改工具栏

  10. 10

    Safari工具栏UI设计,如何像Safari一样集成添加按钮?

  11. 11

    Safari工具栏UI设计,如何像Safari一样集成添加按钮?

  12. 12

    如何让 Highstock 工具提示像 Highcharts 一样制作动画?

  13. 13

    像instagram一样快速的启动画面

  14. 14

    像代号One中的Instagram一样水平滚动

  15. 15

    像appbar一样的instagram个人资料页

  16. 16

    如何使相机预览像Instagram一样方形

  17. 17

    使标签栏项像instagram一样弹出viewcontroller

  18. 18

    下载像 RSS Feed 一样的 Instagram 照片

  19. 19

    像 Instagram 一样的回收者视图

  20. 20

    设计UIImages像圆形动画一样滚动

  21. 21

    如何像预期的布局一样设计布局

  22. 22

    像Windows一样的命令提示符

  23. 23

    像截图工具一样突出显示效果

  24. 24

    像Google的“搜索工具”一样的CSS动画

  25. 25

    HTML显示div,就像td的工具提示一样

  26. 26

    Flutter:-如何像Android“ SingleTask”一样管理backstack?

  27. 27

    像背包一样

  28. 28

    在新的材料设计中,是否有像流行的 Android 应用程序一样在工具栏上居中标题的官方 API?

  29. 29

    显示工具提示时“实时”更新小部件的工具提示

热门标签

归档