我有三节课。
展示台:
经理,仅处理小部件上的手势(告诉其他类以调用其
函数,例如:onTap:(){AVisualizer.onTap});
GraphVisulizer: 将数据可视化为图形。
MazeVisualizer: 将数据可视化为迷宫。
来自AVisualizer的MazeVisualizer和GraphVisulizer继承,其中包括onTap()函数,AVisualizer = MazeVisualizer || GraphVisulizer
Visualizer的孩子是AVisualizer。
我从Java转到了扑扑。 (我知道有一个解决方案,其中我只能使用GraphVisulizer,MazeVisualizer代替。但是,如果将来我想添加另一个可视化器,它将变得更加困难。)
可视化工具具有位置。但是,我想使用图类绘制顶点。 顶点大小根据屏幕大小而变化。我想检查顶点是否可以 如果在寄宿生中,则可以通过破解将其添加到GraphVisulizer中:
bool isInBorder(Offset position){//relative position from the left corner of widget
return (position.dx > vertexRadious && position.dx < widgetSize - vertexRadious) &&
(position.dy > vertexRadious && position.dy < widgetSize - vertexRadious);
}
但是vertexSize存在问题,我在graphVisulizer的构建方法中定义了该问题。
The error:
NoSuchMethodError: '<Unexpected Null Value>'
method not found
Receiver: null
Arguments: []
预先感谢,加油!
下面是一些代码:
class GraphVisualizer extends StatefulWidget {
double size;
final Function notifyObserver;
GraphVisualizer({Key key, @required this.size, @required this.notifyObserver})
: super(key: key);
double vertexSize;
/* When been taped by user */
void onTap(position) {
print(isInBorders(position));
}
bool isInBorders(Offset position) {
double border = vertexSize / 4;
return true;
// return ((position.dx > border && position.dx < size - border) &&
// (position.dy > border && position.dy < size - border));
}
@override
_GraphVisualizerState createState() => _GraphVisualizerState();
}
lass _GraphVisualizerState extends State<GraphVisualizer> {
HashSet<Vertex> _vertex; // hash set of all vertex
HashSet<Edge> _edges; //hash map of all edges
GraphDesign _graphDesign; // all the design info
@override
void initState() {
super.initState();
setState(() {
_vertex = HashSet();
_edges = HashSet();
// addVertex(startPoint);
// addVertex(startPoint);
});
}
/**__________________________________________________________________ */
@override
Widget build(BuildContext context) {
widget.vertexSize = _graphDesign.getVertexSize();//use contex to caculate size
return Stack(
children: [
Stack(
children: _edges.toList(),
),
Stack(
children: _vertex.toList(),
),
],
);
}
@override
Widget build(BuildContext context) {
VisualizerDesign design = VisualizerDesign(context);
_graphVisualizer = GraphVisualizer(
size: design.getSize(),
notifyObserver: refresh,
);
Align visulizeBuild = Align(
key: _graphKey,
alignment: Alignment.center,
child: Container(
child: PositionedTapDetector(
behavior: HitTestBehavior.translucent,
onTap: (position) {
Offset relative = _getRelativePosition(position.global);
_graphVisualizer.onTap(relative);
},
child: _graphVisualizer,
),
),
);
return visulizeBuild;
}