Advertisement
Guest User

Untitled

a guest
Oct 13th, 2019
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.98 KB | None | 0 0
  1. import 'package:flutter/material.dart';
  2.  
  3. void main() => runApp(MyApp());
  4.  
  5. class MyApp extends StatelessWidget {
  6. @override
  7. Widget build(BuildContext context) {
  8. return MaterialApp(
  9. title: 'Draggable elements',
  10. theme: ThemeData(
  11. primarySwatch: Colors.blue,
  12. ),
  13. home: Scaffold(
  14. body: TextOverflowDemo(),
  15. ),
  16. );
  17. }
  18. }
  19.  
  20. class TextOverflowDemo extends StatefulWidget {
  21. @override
  22. _TextOverflowDemoState createState() => _TextOverflowDemoState();
  23. }
  24.  
  25. class _TextOverflowDemoState extends State<TextOverflowDemo> {
  26. Map<String, Offset> offsets = {
  27. 'start': Offset(70, 100),
  28. 'finish': Offset(200, 100),
  29. 'center': Offset(100, 200),
  30. };
  31.  
  32. Function onDragStart(String name) => (x, y) {
  33. print('$x, $y');
  34. setState(() {
  35. offsets[name] = Offset(x, y);
  36. });
  37. };
  38.  
  39. @override
  40. Widget build(BuildContext context) {
  41. return Stack(
  42. children: <Widget>[
  43. CustomPaint(
  44. size: Size(double.infinity, double.infinity),
  45. painter: CurvedPainter(
  46. start: offsets['start'],
  47. finish: offsets['finish'],
  48. center: offsets['center'],
  49. ),
  50. ),
  51. ManipulatingBall(
  52. onDragStart: onDragStart('start'),
  53. offset: offsets['start'],
  54. ),
  55. ManipulatingBall(
  56. onDragStart: onDragStart('finish'),
  57. offset: offsets['finish'],
  58. ),
  59. ManipulatingBall(
  60. onDragStart: onDragStart('center'),
  61. offset: offsets['center'],
  62. ),
  63. ],
  64. );
  65. }
  66. }
  67.  
  68. class ManipulatingBall extends StatelessWidget {
  69. ManipulatingBall({Key key, this.offset, this.onDragStart});
  70.  
  71. final double diameter = 30;
  72. final Offset offset;
  73. final Function onDragStart;
  74.  
  75. _handleDrag(details) {
  76. var x = details.globalPosition.dx;
  77. var y = details.globalPosition.dy;
  78. onDragStart(x, y);
  79. }
  80.  
  81. @override
  82. Widget build(BuildContext context) {
  83. return Positioned(
  84. left: offset.dx - diameter / 2,
  85. top: offset.dy - diameter / 2,
  86. child: GestureDetector(
  87. onPanStart: _handleDrag,
  88. onPanUpdate: _handleDrag,
  89. child: Container(
  90. width: diameter,
  91. height: diameter,
  92. decoration: BoxDecoration(
  93. color: Colors.blue.withOpacity(0.5),
  94. shape: BoxShape.circle,
  95. ),
  96. ),
  97. ),
  98. );
  99. }
  100. }
  101.  
  102. class CurvedPainter extends CustomPainter {
  103. CurvedPainter({
  104. this.start,
  105. this.finish,
  106. this.center,
  107. });
  108.  
  109. final Offset start;
  110. final Offset finish;
  111. final Offset center;
  112.  
  113. @override
  114. void paint(Canvas canvas, Size size) {
  115. canvas.drawLine(
  116. start,
  117. finish,
  118. Paint()
  119. ..color = Colors.red
  120. ..strokeWidth = 2,
  121. );
  122.  
  123. canvas.drawRect(
  124. Rect.fromCenter(
  125. center: center,
  126. width: 100,
  127. height: 100,
  128. ),
  129. Paint()
  130. ..color = Colors.greenAccent
  131. ..strokeWidth = 2,
  132. );
  133. }
  134.  
  135. @override
  136. bool shouldRepaint(CurvedPainter oldDelegate) => true;
  137. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement