From 83606f137402ddc979c4efa7bc8104257dfd16e8 Mon Sep 17 00:00:00 2001 From: Patrick Schmidt Date: Thu, 17 Oct 2024 22:24:56 +0200 Subject: [PATCH] Respect canvas transformations --- example/pubspec.lock | 140 ++++++++++++++++--------- lib/src/touchy_canvas.dart | 209 +++++++++++++++++++++---------------- pubspec.lock | 137 +++++++++++++++--------- pubspec.yaml | 1 + 4 files changed, 303 insertions(+), 184 deletions(-) diff --git a/example/pubspec.lock b/example/pubspec.lock index aecadfe..765d85e 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -5,58 +5,58 @@ packages: dependency: transitive description: name: async - url: "https://pub.dartlang.org" + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + url: "https://pub.dev" source: hosted - version: "2.6.1" + version: "2.11.0" boolean_selector: dependency: transitive description: name: boolean_selector - url: "https://pub.dartlang.org" + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" characters: dependency: transitive description: name: characters - url: "https://pub.dartlang.org" + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + url: "https://pub.dev" source: hosted - version: "1.1.0" - charcode: - dependency: transitive - description: - name: charcode - url: "https://pub.dartlang.org" - source: hosted - version: "1.2.0" + version: "1.3.0" clock: dependency: transitive description: name: clock - url: "https://pub.dartlang.org" + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.1.1" collection: dependency: transitive description: name: collection - url: "https://pub.dartlang.org" + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + url: "https://pub.dev" source: hosted - version: "1.15.0" + version: "1.18.0" cupertino_icons: dependency: "direct main" description: name: cupertino_icons - url: "https://pub.dartlang.org" + sha256: caac504f942f41dfadcf45229ce8c47065b93919a12739f20d6173a883c5ec73 + url: "https://pub.dev" source: hosted version: "1.0.2" fake_async: dependency: transitive description: name: fake_async - url: "https://pub.dartlang.org" + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.3.1" flutter: dependency: "direct main" description: flutter @@ -67,27 +67,62 @@ packages: description: flutter source: sdk version: "0.0.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05" + url: "https://pub.dev" + source: hosted + version: "10.0.5" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806" + url: "https://pub.dev" + source: hosted + version: "3.0.5" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" matcher: dependency: transitive description: name: matcher - url: "https://pub.dartlang.org" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + url: "https://pub.dev" + source: hosted + version: "0.12.16+1" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec + url: "https://pub.dev" source: hosted - version: "0.12.10" + version: "0.11.1" meta: dependency: transitive description: name: meta - url: "https://pub.dartlang.org" + sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 + url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.15.0" path: dependency: transitive description: name: path - url: "https://pub.dartlang.org" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + url: "https://pub.dev" source: hosted - version: "1.8.0" + version: "1.9.0" sky_engine: dependency: transitive description: flutter @@ -97,64 +132,73 @@ packages: dependency: transitive description: name: source_span - url: "https://pub.dartlang.org" + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + url: "https://pub.dev" source: hosted - version: "1.8.1" + version: "1.10.0" stack_trace: dependency: transitive description: name: stack_trace - url: "https://pub.dartlang.org" + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" + url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.11.1" stream_channel: dependency: transitive description: name: stream_channel - url: "https://pub.dartlang.org" + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.2" string_scanner: dependency: transitive description: name: string_scanner - url: "https://pub.dartlang.org" + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.2.0" term_glyph: dependency: transitive description: name: term_glyph - url: "https://pub.dartlang.org" + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.1" test_api: dependency: transitive description: name: test_api - url: "https://pub.dartlang.org" + sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb" + url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "0.7.2" touchable: dependency: "direct main" description: path: ".." relative: true source: path - version: "1.0.0" - typed_data: + version: "1.0.1" + vector_math: dependency: transitive description: - name: typed_data - url: "https://pub.dartlang.org" + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" source: hosted - version: "1.3.0" - vector_math: + version: "2.1.4" + vm_service: dependency: transitive description: - name: vector_math - url: "https://pub.dartlang.org" + name: vm_service + sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d" + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "14.2.5" sdks: - dart: ">=2.12.0 <3.0.0" + dart: ">=3.3.0 <4.0.0" + flutter: ">=3.18.0-18.0.pre.54" diff --git a/lib/src/touchy_canvas.dart b/lib/src/touchy_canvas.dart index b674e06..3891024 100644 --- a/lib/src/touchy_canvas.dart +++ b/lib/src/touchy_canvas.dart @@ -1,8 +1,6 @@ -import 'dart:math'; import 'dart:typed_data'; import 'dart:ui'; -import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart' hide Image; import 'package:touchable/src/canvas_touch_detector.dart'; import 'package:touchable/src/shape_handler.dart'; @@ -20,6 +18,9 @@ import 'package:touchable/src/shapes/util.dart'; class TouchyCanvas { final Canvas _canvas; + late final Matrix4 initialTransform; + late final Matrix4 inverseInitialTransform; + final ShapeHandler _shapeHandler = ShapeHandler(); ///[TouchyCanvas] helps you add gesture callbacks to the shapes you draw. @@ -32,6 +33,8 @@ class TouchyCanvas { ScrollController? scrollController, AxisDirection scrollDirection = AxisDirection.down, }) { + initialTransform = Matrix4.fromFloat64List(_canvas.getTransform()); + inverseInitialTransform = Matrix4.inverted(initialTransform); var touchController = TouchDetectionController.of(context); touchController?.addListener((event) { _shapeHandler.handleGestureEvent( @@ -77,28 +80,30 @@ class TouchyCanvas { GestureTapDownCallback? onSecondaryTapDown, GestureTapUpCallback? onSecondaryTapUp, }) { + var matrix4 = _transformationsAppliedToCanvas(Matrix4.fromFloat64List(_canvas.getTransform())); _canvas.drawCircle(c, radius, paint); _shapeHandler.addShape(Circle( - center: c, - radius: radius, - paint: paint, - hitTestBehavior: hitTestBehavior, - gestureMap: TouchCanvasUtil.getGestureCallbackMap( - onTapDown: onTapDown, - onTapUp: onTapUp, - onLongPressStart: onLongPressStart, - onLongPressEnd: onLongPressEnd, - onLongPressMoveUpdate: onLongPressMoveUpdate, - onForcePressStart: onForcePressStart, - onForcePressEnd: onForcePressEnd, - onForcePressPeak: onForcePressPeak, - onForcePressUpdate: onForcePressUpdate, - onPanStart: onPanStart, - onPanUpdate: onPanUpdate, - onPanDown: onPanDown, - onSecondaryTapDown: onSecondaryTapDown, - onSecondaryTapUp: onSecondaryTapUp, - ))); + center: MatrixUtils.transformPoint(matrix4, c), + radius: radius, + paint: paint, + hitTestBehavior: hitTestBehavior, + gestureMap: TouchCanvasUtil.getGestureCallbackMap( + onTapDown: onTapDown, + onTapUp: onTapUp, + onLongPressStart: onLongPressStart, + onLongPressEnd: onLongPressEnd, + onLongPressMoveUpdate: onLongPressMoveUpdate, + onForcePressStart: onForcePressStart, + onForcePressEnd: onForcePressEnd, + onForcePressPeak: onForcePressPeak, + onForcePressUpdate: onForcePressUpdate, + onPanStart: onPanStart, + onPanUpdate: onPanUpdate, + onPanDown: onPanDown, + onSecondaryTapDown: onSecondaryTapDown, + onSecondaryTapUp: onSecondaryTapUp, + ), + )); } void drawLine( @@ -122,8 +127,11 @@ class TouchyCanvas { GestureTapDownCallback? onSecondaryTapDown, GestureTapUpCallback? onSecondaryTapUp, }) { + var matrix4 = _transformationsAppliedToCanvas(Matrix4.fromFloat64List(_canvas.getTransform())); _canvas.drawLine(p1, p2, paint); - _shapeHandler.addShape(Line(p1, p2, + _shapeHandler.addShape(Line( + MatrixUtils.transformPoint(matrix4, p1), + MatrixUtils.transformPoint(matrix4, p2), paint: paint, hitTestBehavior: hitTestBehavior, gestureMap: TouchCanvasUtil.getGestureCallbackMap( @@ -141,7 +149,8 @@ class TouchyCanvas { onPanDown: onPanDown, onSecondaryTapDown: onSecondaryTapDown, onSecondaryTapUp: onSecondaryTapUp, - ))); + ), + )); } void drawOval( @@ -164,8 +173,10 @@ class TouchyCanvas { GestureTapDownCallback? onSecondaryTapDown, GestureTapUpCallback? onSecondaryTapUp, }) { + var matrix4 = _transformationsAppliedToCanvas(Matrix4.fromFloat64List(_canvas.getTransform())); _canvas.drawOval(rect, paint); - _shapeHandler.addShape(Oval(rect, + _shapeHandler.addShape(Oval( + MatrixUtils.transformRect(matrix4, rect), paint: paint, hitTestBehavior: hitTestBehavior, gestureMap: TouchCanvasUtil.getGestureCallbackMap( @@ -183,9 +194,11 @@ class TouchyCanvas { onPanDown: onPanDown, onSecondaryTapDown: onSecondaryTapDown, onSecondaryTapUp: onSecondaryTapUp, - ))); + ), + )); } + void drawParagraph(Paragraph paragraph, Offset offset) { _canvas.drawParagraph(paragraph, offset); // _shapeHandler.addShape(Rectangle(Rect.fromLTWH(offset.dx, offset.dy, paragraph.width, paragraph.height), @@ -193,27 +206,28 @@ class TouchyCanvas { } void drawPath( - Path path, - Paint paint, { - HitTestBehavior? hitTestBehavior, - GestureTapDownCallback? onTapDown, - PaintingStyle? paintStyleForTouch, - GestureTapUpCallback? onTapUp, - GestureLongPressStartCallback? onLongPressStart, - GestureLongPressEndCallback? onLongPressEnd, - GestureLongPressMoveUpdateCallback? onLongPressMoveUpdate, - GestureForcePressStartCallback? onForcePressStart, - GestureForcePressEndCallback? onForcePressEnd, - GestureForcePressPeakCallback? onForcePressPeak, - GestureForcePressUpdateCallback? onForcePressUpdate, - GestureDragStartCallback? onPanStart, - GestureDragUpdateCallback? onPanUpdate, - GestureDragDownCallback? onPanDown, - GestureTapDownCallback? onSecondaryTapDown, - GestureTapUpCallback? onSecondaryTapUp, - }) { + Path path, + Paint paint, { + HitTestBehavior? hitTestBehavior, + GestureTapDownCallback? onTapDown, + PaintingStyle? paintStyleForTouch, + GestureTapUpCallback? onTapUp, + GestureLongPressStartCallback? onLongPressStart, + GestureLongPressEndCallback? onLongPressEnd, + GestureLongPressMoveUpdateCallback? onLongPressMoveUpdate, + GestureForcePressStartCallback? onForcePressStart, + GestureForcePressEndCallback? onForcePressEnd, + GestureForcePressPeakCallback? onForcePressPeak, + GestureForcePressUpdateCallback? onForcePressUpdate, + GestureDragStartCallback? onPanStart, + GestureDragUpdateCallback? onPanUpdate, + GestureDragDownCallback? onPanDown, + GestureTapDownCallback? onSecondaryTapDown, + GestureTapUpCallback? onSecondaryTapUp, + }) { + final matrix4 = _transformationsAppliedToCanvas(Matrix4.fromFloat64List(_canvas.getTransform())); _canvas.drawPath(path, paint); - _shapeHandler.addShape(PathShape(path, + _shapeHandler.addShape(PathShape(path.transform(matrix4.storage), paint: paint, hitTestBehavior: hitTestBehavior, gestureMap: TouchCanvasUtil.getGestureCallbackMap( @@ -255,8 +269,10 @@ class TouchyCanvas { GestureTapDownCallback? onSecondaryTapDown, GestureTapUpCallback? onSecondaryTapUp, }) { + var matrix4 = _transformationsAppliedToCanvas(Matrix4.fromFloat64List(_canvas.getTransform())); _canvas.drawPoints(pointMode, points, paint); - _shapeHandler.addShape(Point(pointMode, points, + var transformedPoints = points.map((point) => MatrixUtils.transformPoint(matrix4, point)).toList(); + _shapeHandler.addShape(Point(pointMode, transformedPoints, paint: paint, hitTestBehavior: hitTestBehavior, gestureMap: TouchCanvasUtil.getGestureCallbackMap( @@ -274,7 +290,8 @@ class TouchyCanvas { onPanDown: onPanDown, onSecondaryTapDown: onSecondaryTapDown, onSecondaryTapUp: onSecondaryTapUp, - ))); + ), + )); } void drawRRect( @@ -319,9 +336,8 @@ class TouchyCanvas { ))); } - void drawRawPoints( - PointMode pointMode, - Float32List points, + void drawRect( + Rect rect, Paint paint, { HitTestBehavior? hitTestBehavior, GestureTapDownCallback? onTapDown, @@ -340,12 +356,10 @@ class TouchyCanvas { GestureTapDownCallback? onSecondaryTapDown, GestureTapUpCallback? onSecondaryTapUp, }) { - _canvas.drawRawPoints(pointMode, points, paint); - List offsetPoints = []; - for (int i = 0; i < points.length; i += 2) { - offsetPoints.add(Offset(points[i], points[i + 1])); - } - _shapeHandler.addShape(Point(pointMode, offsetPoints, + var matrix4 = _transformationsAppliedToCanvas(Matrix4.fromFloat64List(_canvas.getTransform())); + _canvas.drawRect(rect, paint); + _shapeHandler.addShape(Rectangle( + MatrixUtils.transformRect(matrix4, rect), paint: paint, hitTestBehavior: hitTestBehavior, gestureMap: TouchCanvasUtil.getGestureCallbackMap( @@ -363,11 +377,13 @@ class TouchyCanvas { onPanDown: onPanDown, onSecondaryTapDown: onSecondaryTapDown, onSecondaryTapUp: onSecondaryTapUp, - ))); + ), + )); } - void drawRect( - Rect rect, + void drawRawPoints( + PointMode pointMode, + Float32List points, Paint paint, { HitTestBehavior? hitTestBehavior, GestureTapDownCallback? onTapDown, @@ -386,8 +402,13 @@ class TouchyCanvas { GestureTapDownCallback? onSecondaryTapDown, GestureTapUpCallback? onSecondaryTapUp, }) { - _canvas.drawRect(rect, paint); - _shapeHandler.addShape(Rectangle(rect, + var matrix4 = _transformationsAppliedToCanvas(Matrix4.fromFloat64List(_canvas.getTransform())); + _canvas.drawRawPoints(pointMode, points, paint); + List offsetPoints = []; + for (int i = 0; i < points.length; i += 2) { + offsetPoints.add(MatrixUtils.transformPoint(matrix4, Offset(points[i], points[i + 1]))); + } + _shapeHandler.addShape(Point(pointMode, offsetPoints, paint: paint, hitTestBehavior: hitTestBehavior, gestureMap: TouchCanvasUtil.getGestureCallbackMap( @@ -405,12 +426,8 @@ class TouchyCanvas { onPanDown: onPanDown, onSecondaryTapDown: onSecondaryTapDown, onSecondaryTapUp: onSecondaryTapUp, - ))); - } - - void drawShadow(Path path, Color color, double elevation, bool transparentOccluder) { - _canvas.drawShadow(path, color, elevation, transparentOccluder); - // _shapeHandler.addShape(PathShape(path)); + ), + )); } void drawImage( @@ -434,26 +451,29 @@ class TouchyCanvas { GestureTapDownCallback? onSecondaryTapDown, GestureTapUpCallback? onSecondaryTapUp, }) { + var matrix4 = _transformationsAppliedToCanvas(Matrix4.fromFloat64List(_canvas.getTransform())); _canvas.drawImage(image, p, paint); - _shapeHandler.addShape(Rectangle(Rect.fromLTWH(p.dx, p.dy, image.width.toDouble(), image.height.toDouble()), - paint: paint, - hitTestBehavior: hitTestBehavior, - gestureMap: TouchCanvasUtil.getGestureCallbackMap( - onTapDown: onTapDown, - onTapUp: onTapUp, - onLongPressStart: onLongPressStart, - onLongPressEnd: onLongPressEnd, - onLongPressMoveUpdate: onLongPressMoveUpdate, - onForcePressStart: onForcePressStart, - onForcePressEnd: onForcePressEnd, - onForcePressPeak: onForcePressPeak, - onForcePressUpdate: onForcePressUpdate, - onPanStart: onPanStart, - onPanUpdate: onPanUpdate, - onPanDown: onPanDown, - onSecondaryTapDown: onSecondaryTapDown, - onSecondaryTapUp: onSecondaryTapUp, - ))); + _shapeHandler.addShape(Rectangle( + MatrixUtils.transformRect(matrix4, Rect.fromLTWH(p.dx, p.dy, image.width.toDouble(), image.height.toDouble())), + paint: paint, + hitTestBehavior: hitTestBehavior, + gestureMap: TouchCanvasUtil.getGestureCallbackMap( + onTapDown: onTapDown, + onTapUp: onTapUp, + onLongPressStart: onLongPressStart, + onLongPressEnd: onLongPressEnd, + onLongPressMoveUpdate: onLongPressMoveUpdate, + onForcePressStart: onForcePressStart, + onForcePressEnd: onForcePressEnd, + onForcePressPeak: onForcePressPeak, + onForcePressUpdate: onForcePressUpdate, + onPanStart: onPanStart, + onPanUpdate: onPanUpdate, + onPanDown: onPanDown, + onSecondaryTapDown: onSecondaryTapDown, + onSecondaryTapUp: onSecondaryTapUp, + ), + )); } void drawArc( @@ -479,8 +499,13 @@ class TouchyCanvas { GestureTapDownCallback? onSecondaryTapDown, GestureTapUpCallback? onSecondaryTapUp, }) { + var matrix4 = _transformationsAppliedToCanvas(Matrix4.fromFloat64List(_canvas.getTransform())); _canvas.drawArc(rect, startAngle, sweepAngle, useCenter, paint); - var arc = Arc(rect, startAngle, sweepAngle, useCenter, + var arc = Arc( + MatrixUtils.transformRect(matrix4, rect), + startAngle, + sweepAngle, + useCenter, paint: paint, hitTestBehavior: hitTestBehavior, gestureMap: TouchCanvasUtil.getGestureCallbackMap( @@ -498,10 +523,16 @@ class TouchyCanvas { onPanDown: onPanDown, onSecondaryTapDown: onSecondaryTapDown, onSecondaryTapUp: onSecondaryTapUp, - )); + ), + ); _shapeHandler.addShape(arc); } + Matrix4 _transformationsAppliedToCanvas(Matrix4 transformedMatrix) { + // Step 2: Multiply the inverted initial matrix by the transformed matrix + return inverseInitialTransform * transformedMatrix; + } + // // void drawDRRect(RRect outer, RRect inner, Paint paint) { // _canvas.drawDRRect(outer, inner, paint); diff --git a/pubspec.lock b/pubspec.lock index ad6d1df..a928873 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,51 +5,50 @@ packages: dependency: transitive description: name: async - url: "https://pub.dartlang.org" + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + url: "https://pub.dev" source: hosted - version: "2.6.1" + version: "2.11.0" boolean_selector: dependency: transitive description: name: boolean_selector - url: "https://pub.dartlang.org" + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" characters: dependency: transitive description: name: characters - url: "https://pub.dartlang.org" + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + url: "https://pub.dev" source: hosted - version: "1.1.0" - charcode: - dependency: transitive - description: - name: charcode - url: "https://pub.dartlang.org" - source: hosted - version: "1.2.0" + version: "1.3.0" clock: dependency: transitive description: name: clock - url: "https://pub.dartlang.org" + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.1.1" collection: dependency: transitive description: name: collection - url: "https://pub.dartlang.org" + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + url: "https://pub.dev" source: hosted - version: "1.15.0" + version: "1.18.0" fake_async: dependency: transitive description: name: fake_async - url: "https://pub.dartlang.org" + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.3.1" flutter: dependency: "direct main" description: flutter @@ -60,27 +59,62 @@ packages: description: flutter source: sdk version: "0.0.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05" + url: "https://pub.dev" + source: hosted + version: "10.0.5" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806" + url: "https://pub.dev" + source: hosted + version: "3.0.5" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" matcher: dependency: transitive description: name: matcher - url: "https://pub.dartlang.org" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + url: "https://pub.dev" source: hosted - version: "0.12.10" + version: "0.12.16+1" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec + url: "https://pub.dev" + source: hosted + version: "0.11.1" meta: dependency: transitive description: name: meta - url: "https://pub.dartlang.org" + sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 + url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.15.0" path: dependency: transitive description: name: path - url: "https://pub.dartlang.org" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + url: "https://pub.dev" source: hosted - version: "1.8.0" + version: "1.9.0" sky_engine: dependency: transitive description: flutter @@ -90,57 +124,66 @@ packages: dependency: transitive description: name: source_span - url: "https://pub.dartlang.org" + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + url: "https://pub.dev" source: hosted - version: "1.8.1" + version: "1.10.0" stack_trace: dependency: transitive description: name: stack_trace - url: "https://pub.dartlang.org" + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" + url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.11.1" stream_channel: dependency: transitive description: name: stream_channel - url: "https://pub.dartlang.org" + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.2" string_scanner: dependency: transitive description: name: string_scanner - url: "https://pub.dartlang.org" + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.2.0" term_glyph: dependency: transitive description: name: term_glyph - url: "https://pub.dartlang.org" + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.1" test_api: dependency: transitive description: name: test_api - url: "https://pub.dartlang.org" + sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb" + url: "https://pub.dev" source: hosted - version: "0.3.0" - typed_data: - dependency: transitive + version: "0.7.2" + vector_math: + dependency: "direct main" description: - name: typed_data - url: "https://pub.dartlang.org" + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" source: hosted - version: "1.3.0" - vector_math: + version: "2.1.4" + vm_service: dependency: transitive description: - name: vector_math - url: "https://pub.dartlang.org" + name: vm_service + sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d" + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "14.2.5" sdks: - dart: ">=2.12.0 <3.0.0" + dart: ">=3.3.0 <4.0.0" + flutter: ">=3.18.0-18.0.pre.54" diff --git a/pubspec.yaml b/pubspec.yaml index e844d94..c8f803f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -10,6 +10,7 @@ environment: dependencies: flutter: sdk: flutter + vector_math: ^2.1.4 dev_dependencies: flutter_test: