• global position


    观察,

    GestureDetector(
                child: CustomPaint(painter: StudyPaint(points: _points)),
                onPanEnd: (DragEndDetails details)=>_points.add(null),
                onPanUpdate: (DragUpdateDetails details){
                  var a = details.globalPosition;
                  RenderBox referenceBox = context.findRenderObject();
                  Offset localPosition = referenceBox.globalToLocal(details.globalPosition);
                  print('a: $a, localposition: $localPosition');
                  setState(() {
                    _points = List.from(_points)..add(localPosition);
                  });
                },
              ),
    

      

     减了3个 h

    import 'package:flutter/material.dart';
    
    main() => runApp(MyApp());
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        // TODO: implement build
        return MaterialApp(
          home: HomePage(),
        );
      }
    }
    
    class HomePage extends StatefulWidget {
      @override
      State<StatefulWidget> createState() {
        // TODO: implement createState
        return HomePageState();
      }
    }
    
    class HomePageState extends State<HomePage> {
      List<Offset> _points = <Offset>[];
    
      @override
      Widget build(BuildContext context) {
    //    print(_points);
      var h = MediaQuery.of(context).padding.top;
      var b = MediaQuery.of(context).padding.bottom;
    //  print('h: $h, b: $b');
    
        return Scaffold(
          appBar: AppBar(title: Text('Painter'),),
          body: Container(
               MediaQuery.of(context).size.width, height: MediaQuery.of(context).size.height-h,
              child: Stack(
                children: <Widget>[
                  GestureDetector(
    //                child:
                    onPanEnd: (DragEndDetails details)=>_points.add(null),
                    onPanUpdate: (DragUpdateDetails details){
                      var a = details.globalPosition;
                      var x = Offset(a.dx, a.dy-h-h-h);
                      RenderBox referenceBox = context.findRenderObject();
                      Offset localPosition = referenceBox.globalToLocal(details.globalPosition);
    //              print('a: $a, x: $x, localposition: $localPosition');
                      setState(() {
                        _points = List.from(_points)..add(x);
                      });
                    },
                  ),
                  CustomPaint(painter: StudyPaint(points: _points)),
                ],
              )
          ),
        );
      }
    }
    
    class StudyPaint extends CustomPainter {
      StudyPaint({this.points});
      List<Offset> points;
    
      @override
      void paint(Canvas canvas, Size size) {
        print(points);
        Paint paint = Paint()
            ..color = Colors.blue
            ..strokeCap = StrokeCap.round
            ..isAntiAlias = true
          ..strokeJoin = StrokeJoin.bevel
            ..strokeWidth = 12.0;
    
        for(int i=0; i<points.length; i++){
          if(points[i]!=null && points[i+1]!=null)
            canvas.drawLine(points[i], points[i+1], paint);
        }
    
      }
    
      @override
      bool shouldRepaint(StudyPaint other) => other.points!=points;
    }
    

      

    import 'package:flutter/material.dart';
    
    main() => runApp(MyApp());
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        // TODO: implement build
        return MaterialApp(
          home: HomePage(),
        );
      }
    }
    
    class HomePage extends StatefulWidget {
      @override
      State<StatefulWidget> createState() {
        // TODO: implement createState
        return HomePageState();
      }
    }
    
    class HomePageState extends State<HomePage> {
      List<Offset> _points = <Offset>[];
    
      @override
      Widget build(BuildContext context) {
    //    print(_points);
      var h = MediaQuery.of(context).padding.top;
      print('h: $h');
        return Scaffold(
          appBar: AppBar(title: Text('Painter'),),
          body: Center(
            child: Container(
               double.infinity, height: double.infinity,
              child: GestureDetector(
                child: CustomPaint(painter: StudyPaint(points: _points)),
                onPanEnd: (DragEndDetails details)=>_points.add(null),
                onPanUpdate: (DragUpdateDetails details){
                  var a = details.globalPosition;
                  RenderBox referenceBox = context.findRenderObject();
                  Offset localPosition = referenceBox.globalToLocal(details.globalPosition);
                  print('a: $a, localposition: $localPosition');
                  setState(() {
                    _points = List.from(_points)..add(localPosition);
                  });
                },
              ),
            ),
          ),
        );
      }
    }
    
    class StudyPaint extends CustomPainter {
      StudyPaint({this.points});
      List<Offset> points;
    
      @override
      void paint(Canvas canvas, Size size) {
        Paint paint = Paint()
            ..color = Colors.blue
            ..strokeCap = StrokeCap.round
            ..isAntiAlias = true
            ..strokeWidth = 12.0
            ..strokeJoin = StrokeJoin.bevel;
    
        for(int i=0; i<points.length; i++){
          if(points[i]!=null && points[i+1]!=null)
            canvas.drawLine(points[i], points[i+1], paint);
        }
    
      }
    
      @override
      bool shouldRepaint(StudyPaint other) => other.points!=points;
    }
    

      

  • 相关阅读:
    python测试开发django186.使用 jquery 的 .val() 无法获取input框的输入值(已解决) 上海
    2022年第 10 期《python接口web自动化+测试开发》课程,2月13号开学! 上海
    python测试开发django185.bootstraptable 后端搜索功能实现(queryParams) 上海
    python测试开发django184.bootstraptable 前端分页搜索相关配置 上海
    python测试开发django181.自定义过滤器(除法取余) 上海
    python测试开发django180.dockercompose部署django+mysql环境 上海
    python测试开发django183.bootstrapformvalidation重置校验的方法 上海
    pytest文档79 内置 fixtures 之 cache 写入和读取缓存数据 上海
    python测试开发django182.jQuery重置form表单 上海
    golang interface用法
  • 原文地址:https://www.cnblogs.com/pythonClub/p/10925187.html
Copyright © 2020-2023  润新知