diff --git a/charts_flutter/lib/src/chart_gesture_detector.dart b/charts_flutter/lib/src/chart_gesture_detector.dart index 8c8249ea4..1f40717ee 100644 --- a/charts_flutter/lib/src/chart_gesture_detector.dart +++ b/charts_flutter/lib/src/chart_gesture_detector.dart @@ -19,6 +19,7 @@ import 'package:flutter/material.dart' show BuildContext, GestureDetector, + MouseRegion, ScaleEndDetails, ScaleStartDetails, ScaleUpdateDetails, @@ -59,7 +60,9 @@ class ChartGestureDetector { _listeningForLongPress = desiredGestures.contains(GestureType.onLongPress); return new GestureDetector( - child: chartContainer, + child: new MouseRegion( + child: chartContainer, + onHover: (e) => onHover(e.position.dx, e.position.dy)), onTapDown: wantTapDown ? onTapDown : null, onTapUp: wantTap ? onTapUp : null, onScaleStart: wantDrag ? onScaleStart : null, @@ -68,6 +71,12 @@ class ChartGestureDetector { ); } + void onHover(double x, y) { + final container = _containerResolver(); + _lastTapPoint = new Point(x, y); + container.gestureProxy.onHover(_lastTapPoint); + } + void onTapDown(TapDownDetails d) { final container = _containerResolver(); final localPosition = container.globalToLocal(d.globalPosition); diff --git a/charts_flutter/lib/src/util.dart b/charts_flutter/lib/src/util.dart index b39174825..54cfaa76a 100644 --- a/charts_flutter/lib/src/util.dart +++ b/charts_flutter/lib/src/util.dart @@ -16,6 +16,7 @@ import 'package:flutter/rendering.dart' show RenderBox, + RenderMouseRegion, RenderSemanticsGestureHandler, RenderPointerListener, RenderCustomMultiChildLayoutBox; @@ -36,9 +37,13 @@ ChartContainerRenderObject getChartContainerRenderObject(RenderBox box) { (semanticHandler as RenderSemanticsGestureHandler).child; assert(renderPointerListener is RenderPointerListener); - final chartContainerRenderObject = + final renderMouseRegion = (renderPointerListener as RenderPointerListener).child; + assert(renderMouseRegion is RenderMouseRegion); + final chartContainerRenderObject = + (renderMouseRegion as RenderMouseRegion).child; + assert(chartContainerRenderObject is ChartContainerRenderObject); return chartContainerRenderObject as ChartContainerRenderObject; diff --git a/charts_flutter/test/user_managed_state_test.dart b/charts_flutter/test/user_managed_state_test.dart index f34ef1b1d..313d62b8e 100644 --- a/charts_flutter/test/user_managed_state_test.dart +++ b/charts_flutter/test/user_managed_state_test.dart @@ -15,6 +15,7 @@ import 'package:flutter/widgets.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'package:flutter/material.dart'; import 'package:charts_flutter/flutter.dart' as charts; @@ -35,7 +36,9 @@ void main() { final testChart = new TestChart(selectionChangedListener, onTapSelection); - await tester.pumpWidget(testChart); + await tester.pumpWidget(MaterialApp( + home: testChart, + )); expect(currentSelectionModel, isNull);