importDiagramFromJson method
dynamic
importDiagramFromJson(
- BuildContext context,
- dynamic jsonDiagram,
- BuilderStyle styleProvider
Implementation
importDiagramFromJson(
BuildContext context, dynamic jsonDiagram, BuilderStyle styleProvider) {
deleteAllComponents();
styleProvider.fromJson(jsonDiagram["entry"]);
for (var componentJson in jsonDiagram["components"]) {
var mainComponent = ComponentData(
id: componentJson["id"],
type: componentJson["type"],
data: BuilderComponentData(
parameters: (componentJson["parameters"] as List)
.map((param) => ComponentParameter.fromJson(param))
.toList(),
inputData: [], // Non utilisé lors du chargement
outputData: [], // Non utilisé lors du chargement
isOnMenu: false,
color: Color(int.parse(componentJson["color"], radix: 16)),
name: componentJson["name"],
),
position: Offset(
componentJson["position"]["x"],
componentJson["position"]["y"],
),
size: Size(
componentJson["size"]["width"],
componentJson["size"]["height"],
),
);
canvasWriter.model.addComponent(mainComponent);
componentList.add(mainComponent.id);
for (var portJson in componentJson["ports"]) {
var portData = PortData(
id: portJson["id"],
type: portJson["type"],
name: portJson["name"],
isMandatory: portJson["isMandatory"],
isInput: portJson["isInput"],
size: Size(20, 20), // Taille fixe comme dans le code original
alignmentOnComponent: Alignment(
portJson["alignment"]["x"],
portJson["alignment"]["y"],
),
builderStyle: styleProvider,
);
// Calcul de la position relative au parent
final portPosition = mainComponent.position +
mainComponent.getPointOnComponent(portData.alignmentOnComponent) -
portData.size.center(Offset.zero);
var portComponent = ComponentData(
id: portJson["id"],
type: 'port',
data: portData,
position: portPosition,
size: portData.size,
);
portComponent.zOrder -= 1;
canvasWriter.model.addComponent(portComponent);
canvasWriter.model
.setComponentParent(portComponent.id, mainComponent.id);
}
}
for (var connectionJson in jsonDiagram["connections"]) {
final sourcePortId = connectionJson["source"]["port_id"];
final targetPortId = connectionJson["target"]["port_id"];
final color = Color(int.parse(connectionJson["color"], radix: 16));
connectComponents(sourcePortId, targetPortId, color);
}
updateAllComponentStyle();
}