LCOV - code coverage report
Current view: top level - components/widget_info_inspector - widget_info_inspector.dart (source / functions) Hit Total Coverage
Test: new_lcov.info Lines: 36 43 83.7 %
Date: 2021-11-22 14:23:42 Functions: 0 0 -

          Line data    Source code
       1             : import 'dart:convert';
       2             : 
       3             : import 'package:flutter/widgets.dart';
       4             : import 'package:flutter_ume/flutter_ume.dart';
       5             : import 'package:flutter_ume_kit_ui/components/hit_test.dart';
       6             : import 'icon.dart' as icon;
       7             : 
       8             : class WidgetInfoInspector extends StatefulWidget implements Pluggable {
       9           2 :   const WidgetInfoInspector({Key? key}) : super(key: key);
      10             : 
      11           1 :   @override
      12           1 :   _WidgetInfoInspectorState createState() => _WidgetInfoInspectorState();
      13             : 
      14           1 :   @override
      15             :   Widget buildWidget(BuildContext? context) => this;
      16             : 
      17           1 :   @override
      18             :   String get name => 'WidgetInfo';
      19             : 
      20           0 :   @override
      21             :   String get displayName => 'WidgetInfo';
      22             : 
      23           1 :   @override
      24             :   void onTrigger() {}
      25             : 
      26           1 :   @override
      27             :   ImageProvider<Object> get iconImageProvider =>
      28           2 :       MemoryImage(base64Decode(icon.iconData));
      29             : }
      30             : 
      31             : class _WidgetInfoInspectorState extends State<WidgetInfoInspector>
      32             :     with WidgetsBindingObserver {
      33           1 :   _WidgetInfoInspectorState()
      34           2 :       : selection = WidgetInspectorService.instance.selection;
      35             : 
      36             :   final window = WidgetsBinding.instance!.window;
      37             : 
      38             :   Offset? _lastPointerLocation;
      39             : 
      40             :   final InspectorSelection selection;
      41             : 
      42           1 :   void _inspectAt(Offset? position) {
      43             :     final List<RenderObject> selected =
      44           1 :         HitTest.hitTest(position, edgeHitMargin: 2.0);
      45           2 :     setState(() {
      46           2 :       selection.candidates = selected;
      47             :     });
      48             :   }
      49             : 
      50           1 :   void _handlePanDown(DragDownDetails event) {
      51           2 :     _lastPointerLocation = event.globalPosition;
      52           2 :     _inspectAt(event.globalPosition);
      53             :   }
      54             : 
      55           0 :   void _handlePanEnd(DragEndDetails details) {
      56             :     final Rect bounds =
      57           0 :         (Offset.zero & (window.physicalSize / window.devicePixelRatio))
      58           0 :             .deflate(1.0);
      59           0 :     if (!bounds.contains(_lastPointerLocation!)) {
      60           0 :       setState(() {
      61           0 :         selection.clear();
      62             :       });
      63             :     }
      64             :   }
      65             : 
      66           1 :   void _handleTap() {
      67           1 :     if (_lastPointerLocation != null) {
      68           2 :       _inspectAt(_lastPointerLocation);
      69             :     }
      70             :   }
      71             : 
      72           1 :   @override
      73             :   void initState() {
      74           1 :     super.initState();
      75           2 :     selection.clear();
      76             :   }
      77             : 
      78           1 :   @override
      79             :   Widget build(BuildContext context) {
      80           1 :     List<Widget> children = <Widget>[];
      81           1 :     GestureDetector gesture = GestureDetector(
      82           1 :       onTap: _handleTap,
      83           1 :       onPanDown: _handlePanDown,
      84           1 :       onPanEnd: _handlePanEnd,
      85             :       behavior: HitTestBehavior.opaque,
      86           1 :       child: IgnorePointer(
      87           1 :           child: Container(
      88           3 :               width: MediaQuery.of(context).size.width,
      89           3 :               height: MediaQuery.of(context).size.height)),
      90             :     );
      91           1 :     children.add(gesture);
      92           3 :     children.add(InspectorOverlay(selection: selection));
      93           1 :     return Stack(children: children, textDirection: TextDirection.ltr);
      94             :   }
      95             : }

Generated by: LCOV version 1.15