JsonTheme constructor
Implementation
JsonTheme(this.name, this.json) {
for (String key in json.keys) {
int? level = int.tryParse(key);
if (level != null) {
Map<String, dynamic>? theme = json[key];
if (theme != null) {
Map<String, dynamic> l = {};
if (theme.containsKey("BackgroundColor")) {
l["BackgroundColor"] = fromHex(theme["BackgroundColor"].toString());
}
if (theme.containsKey("TextColor")) {
l["TextColor"] = fromHex(theme["TextColor"].toString());
}
if (theme.containsKey("FontSize")) {
l["FontSize"] = double.tryParse(theme["FontSize"].toString()) ?? 12;
}
if (theme.containsKey("Bold")) {
l["Bold"] = theme["Bold"];
}
if (theme.containsKey("LinkColor")) {
l["LinkColor"] = fromHex(theme["LinkColor"].toString());
}
if (theme.containsKey("LinkWidth")) {
l["LinkWidth"] = int.tryParse(theme["LinkWidth"].toString()) ?? 1;
}
if (theme.containsKey("HSpace")) {
l["HSpace"] = int.tryParse(theme["HSpace"].toString()) ?? 50;
}
if (theme.containsKey("VSpace")) {
l["VSpace"] = int.tryParse(theme["VSpace"].toString()) ?? 20;
}
if (theme.containsKey("Border")) {
Map<String, dynamic> border = theme["Border"];
Color color = Colors.transparent;
double width = 0;
double lw = 0;
double tw = 0;
double rw = 0;
double bw = 0;
if (border.containsKey("color")) {
color = fromHex(border["color"].toString());
}
if (border.containsKey("width")) {
if (border["width"] is String) {
List<String> ls = border["width"].toString().split(",");
if (ls.length == 4) {
lw = double.tryParse(ls[0]) ?? 0;
tw = double.tryParse(ls[1]) ?? 0;
rw = double.tryParse(ls[2]) ?? 0;
bw = double.tryParse(ls[3]) ?? 0;
} else {
width = double.tryParse(ls[0]) ?? 0;
}
} else {
width = double.tryParse(border["width"].toString()) ?? 0;
}
}
if (lw > 0 || tw > 0 || rw > 0 || bw > 0) {
l["Border"] = Border(
left: lw == 0
? BorderSide.none
: BorderSide(
color: color,
width: lw,
style: BorderStyle.solid,
strokeAlign: BorderSide.strokeAlignOutside,
),
top: tw == 0
? BorderSide.none
: BorderSide(
color: color,
width: tw,
style: BorderStyle.solid,
strokeAlign: BorderSide.strokeAlignOutside,
),
right: rw == 0
? BorderSide.none
: BorderSide(
color: color,
width: rw,
style: BorderStyle.solid,
strokeAlign: BorderSide.strokeAlignOutside,
),
bottom: bw == 0
? BorderSide.none
: BorderSide(
color: color,
width: bw,
style: BorderStyle.solid,
strokeAlign: BorderSide.strokeAlignOutside,
),
);
} else {
l["Border"] = Border.all(
color: color,
width: width,
style: BorderStyle.solid,
strokeAlign: BorderSide.strokeAlignOutside,
);
}
}
if (theme.containsKey("BorderRadius")) {
l["BorderRadius"] = BorderRadius.circular(
double.tryParse(theme["BorderRadius"].toString()) ?? 0,
);
}
if (theme.containsKey("Padding")) {
l["Padding"] = EdgeInsets.fromLTRB(
double.tryParse((theme["Padding"]["left"] ?? "0").toString()) ??
0,
double.tryParse((theme["Padding"]["top"] ?? "0").toString()) ?? 0,
double.tryParse((theme["Padding"]["right"] ?? "0").toString()) ??
0,
double.tryParse((theme["Padding"]["bottom"] ?? "0").toString()) ??
0,
);
}
if (theme.containsKey("Link")) {
switch (theme["Link"].toString()) {
case "PolyLineLink":
l["Link"] = PolyLineLink();
break;
case "BeerseLineLink":
l["Link"] = BeerseLineLink();
break;
case "LineLink":
l["Link"] = LineLink();
break;
}
}
if (theme.containsKey("BorderColors")) {
l["BorderColors"] = [];
for (int i = 0; i < theme["BorderColors"].length; i++) {
l["BorderColors"].add(fromHex(theme["BorderColors"][i]));
}
}
if (theme.containsKey("LinkColors")) {
l["LinkColors"] = [];
for (int i = 0; i < theme["LinkColors"].length; i++) {
l["LinkColors"].add(fromHex(theme["LinkColors"][i]));
}
}
if (theme.containsKey("BackgroundColors")) {
l["BackgroundColors"] = [];
for (int i = 0; i < theme["BackgroundColors"].length; i++) {
l["BackgroundColors"].add(fromHex(theme["BackgroundColors"][i]));
}
}
if (theme.containsKey("LinkOutOffsetMode")) {
switch (theme["LinkOutOffsetMode"]) {
case "top":
l["LinkOutOffsetMode"] = MindMapNodeLinkOffsetMode.top;
break;
case "center":
l["LinkOutOffsetMode"] = MindMapNodeLinkOffsetMode.center;
break;
case "bottom":
l["LinkOutOffsetMode"] = MindMapNodeLinkOffsetMode.bottom;
break;
}
}
if (theme.containsKey("LinkInOffsetMode")) {
switch (theme["LinkInOffsetMode"]) {
case "top":
l["LinkInOffsetMode"] = MindMapNodeLinkOffsetMode.top;
break;
case "center":
l["LinkInOffsetMode"] = MindMapNodeLinkOffsetMode.center;
break;
case "bottom":
l["LinkInOffsetMode"] = MindMapNodeLinkOffsetMode.bottom;
break;
}
}
jsonList[level] = l;
}
}
}
}