56 lines
1.7 KiB
Dart
56 lines
1.7 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:lamiter/Class/Form/zong_fu_index_form.dart';
|
|
import 'package:lamiter/Provider/Diagnosis/Diagnosis_Item/zong_fu_organ_provider.dart';
|
|
import 'package:provider/provider.dart';
|
|
|
|
class ZongFuIndexResult {
|
|
String? id;
|
|
List<String> zongFuOrgansIds;
|
|
|
|
ZongFuIndexResult({
|
|
this.id,
|
|
required this.zongFuOrgansIds,
|
|
});
|
|
|
|
ZongFuIndexResult.fromJson(Map<String, dynamic> json)
|
|
: zongFuOrgansIds = (json["zongFuOrgansIds"] as List<dynamic>?)
|
|
?.map((item) => item as String)
|
|
.toList() ??
|
|
[];
|
|
|
|
Map<String, dynamic> toJson() => {'zongFuOrgansIds': zongFuOrgansIds};
|
|
|
|
ZongFuIndexResult.fromForm(BuildContext context, ZongFuIndexForm form)
|
|
: zongFuOrgansIds = _calculateZongFuOrgans(context, form);
|
|
|
|
static List<String> _calculateZongFuOrgans(
|
|
BuildContext context,
|
|
ZongFuIndexForm form,
|
|
) {
|
|
Map<String, int> zongFuScores = {};
|
|
for (var score in form.scores.entries) {
|
|
// _zong_fu_index_${zfg.name}_question_$i
|
|
List<String> splits = score.key.split('_');
|
|
String zongFuOrgan = splits[4];
|
|
if (zongFuScores.containsKey(zongFuOrgan)) {
|
|
zongFuScores[zongFuOrgan] =
|
|
zongFuScores[zongFuOrgan]! + score.value.score;
|
|
} else {
|
|
zongFuScores[zongFuOrgan] = score.value.score;
|
|
}
|
|
}
|
|
|
|
final zongFuOrgans = context.read<ZongFuOrganProvider>().elements;
|
|
List<String> temp = [];
|
|
for (int max_score = 6; max_score > 2; max_score--) {
|
|
if (temp.length >= 2) break;
|
|
for (var zongFuOrgan in zongFuOrgans) {
|
|
if ((zongFuScores[zongFuOrgan.id] ?? -1) == max_score) {
|
|
temp.add(zongFuOrgan.id);
|
|
}
|
|
}
|
|
}
|
|
return temp;
|
|
}
|
|
}
|