flutter - 如何在颤动中连接两个小部件
问题描述
我想画一条连接两个小部件的直线,它应该由用户连接。
我试过了。
import 'package:flutter/material.dart';
class Homedemo extends StatefulWidget {
@override
_HomedemoState createState() => _HomedemoState();
}
class _HomedemoState extends State<Homedemo> {
List<Offset> points = <Offset>[];
@override
Widget build(BuildContext context) {
final Container sketchArea = Container(
margin: EdgeInsets.all(1.0),
alignment: Alignment.topLeft,
color: Colors.blueGrey[50],
child: CustomPaint(
painter: Sketcher(points),
),
);
return Container(
child: Stack(
children: <Widget>[
GestureDetector(
onPanUpdate: (DragUpdateDetails details) {
setState(() {
RenderBox box = context.findRenderObject();
Offset point = box.globalToLocal(details.globalPosition);
points[points.length-1] = point;
print(points);
});
},
onPanStart: (DragStartDetails details){
setState(() {
print("start");
print(points);
RenderBox box = context.findRenderObject();Offset point = box.globalToLocal(details.globalPosition);
point = point.translate(0.0, -(AppBar().preferredSize.height));
points = List.from(points)..add(point);
});
},
onPanEnd: (DragEndDetails details) {
setState(() {
// points.clear();
});
},
child: sketchArea,
),
Positioned(
top: 50.0,
left: 50.0,
child: new Container(
height: 50.0,
width: 50.0,
color: Colors.amberAccent,
),
),
Positioned(
top: 250.0,
left: 350.0,
child: new Container(
height: 50.0,
width: 50.0,
color: Colors.green,
),
),
],
),
);
}
}
class Sketcher extends CustomPainter {
final List<Offset> points ;
Sketcher(this.points);
@override
bool shouldRepaint(Sketcher oldDelegate) {
return true;
}
void paint(Canvas canvas, Size size) {
Paint paint = Paint()
..color = Colors.black
..strokeCap = StrokeCap.round
..strokeWidth = 10.0;
for (int i = 0; i < points.length - 1; i++) {
if (points[i] != null && points[i + 1] != null) {
canvas.drawLine(points[i], points[i+1], paint);
}
}
}
}
我可以画一条直线,但我不知道如何准确地开始和停止,所以我看起来像两个小部件连接在一起。
解决方案
推荐阅读
- php - 如何检查给定键值对的多维数组,即。完全相同的键和值?
- java - 在 Android Studio 3.5.1 中这是什么类型的问题?
- php - 文件上传在 AWS Linux 2 服务器中不能超过 10mb?
- c# - 使用 JsonSerializer.DeserializeAsync 反序列化 JSON 不使用我的 JsonConverter
- android - 无法在android中进行无线调试(ADB)
- python - tflite.allocate_tensors() 在更改输入大小后失败
- swift - Braintree,跳过显示 Dropin 并直接选择 PayPal
- javascript - 第一个兄弟 div 被视为第二个动态 div 的背景
- typescript - 不兼容的相同类型
- excel - 如何在vba中绘制具有已知列索引的图表