zhaoyadi 3 سال پیش
والد
کامیت
a9626af18e
1فایلهای تغییر یافته به همراه59 افزوده شده و 0 حذف شده
  1. 59 0
      lib/src/widget/trapezoid.dart

+ 59 - 0
lib/src/widget/trapezoid.dart

@@ -0,0 +1,59 @@
+import 'package:flutter/material.dart';
+import 'package:flutter/rendering.dart';
+
+class TrapezoidBox extends MultiChildRenderObjectWidget {
+  TrapezoidBox({
+    Key? key,
+    required List<Widget> children,
+  }) : super(key: key, children: children);
+
+  @override
+  RenderObject createRenderObject(BuildContext context) {
+    return _RenderTrapezoidBox();
+  }
+}
+
+class TrapezoidParentData extends ContainerBoxParentData<RenderBox> {
+  Offset a = Offset.zero;
+  Offset b = Offset.zero;
+  Offset c = Offset.zero;
+  Offset d = Offset.zero;
+}
+
+class _RenderTrapezoidBox extends RenderBox
+    with
+        ContainerRenderObjectMixin<RenderBox, TrapezoidParentData>,
+        RenderBoxContainerDefaultsMixin<RenderBox, TrapezoidParentData> {
+  @override
+  void setupParentData(covariant RenderObject child) {
+    if (child.parentData is! TrapezoidParentData) {
+      child.parentData = TrapezoidParentData();
+    }
+  }
+
+  @override
+  void performLayout() {
+
+  }
+
+  @override
+  void paint(PaintingContext context, Offset offset) {
+    for (var child in getChildrenAsList()) {
+      _paintChild(context, offset, child);
+    }
+  }
+
+  void _paintChild(PaintingContext context, Offset offset, RenderBox child) {
+    TrapezoidParentData parentData = child.parentData as TrapezoidParentData;
+
+    context.canvas.save();
+    Path path = Path();
+    path.moveTo(parentData.a.dx, parentData.a.dy);
+    path.lineTo(parentData.b.dx, parentData.b.dy);
+    path.lineTo(parentData.c.dx, parentData.c.dy);
+    path.lineTo(parentData.d.dx, parentData.d.dy);
+    path.close();
+    context.canvas.clipPath(path);
+    context.canvas.restore();
+  }
+}