APP_NEW/lib/Class/Result/constitution_result.dart
2025-03-11 21:17:14 +08:00

181 lines
5.9 KiB
Dart

import 'package:flutter/material.dart';
import 'package:lamiter/Class/Diagnosis/constitution.dart';
import 'package:lamiter/Provider/Diagnosis/Diagnosis_Item/constitution_provider.dart';
import 'package:provider/provider.dart';
class ConstitutionResult {
String? id;
int balanced_constitution_score;
int qi_deficiency_score;
int yang_deficiency_score;
int yin_deficiency_score;
int blood_deficiency_score;
int damp_heat_score;
int phlegm_damp_score;
int blood_stasis_score;
int qi_stagnation_score;
int sensitive_constitution_score;
ConstitutionResult({
this.balanced_constitution_score = 0,
this.qi_deficiency_score = 0,
this.yang_deficiency_score = 0,
this.yin_deficiency_score = 0,
this.blood_deficiency_score = 0,
this.damp_heat_score = 0,
this.phlegm_damp_score = 0,
this.blood_stasis_score = 0,
this.qi_stagnation_score = 0,
this.sensitive_constitution_score = 0,
});
ConstitutionResult.fromJson(Map<String, dynamic> json)
: balanced_constitution_score =
json['balanced_constitution_score'] as int,
qi_deficiency_score = json['qi_deficiency_score'] as int,
yang_deficiency_score = json['yang_deficiency_score'] as int,
yin_deficiency_score = json['yin_deficiency_score'] as int,
blood_deficiency_score = json['blood_deficiency_score'] as int,
damp_heat_score = json['damp_heat_score'] as int,
phlegm_damp_score = json['phlegm_damp_score'] as int,
blood_stasis_score = json['blood_stasis_score'] as int,
qi_stagnation_score = json['qi_stagnation_score'] as int,
sensitive_constitution_score =
json['sensitive_constitution_score'] as int;
Map<String, dynamic> toJson() => {
'balanced_constitution_score': balanced_constitution_score,
'qi_deficiency_score': qi_deficiency_score,
'yang_deficiency_score': yang_deficiency_score,
'yin_deficiency_score': yin_deficiency_score,
'blood_deficiency_score': blood_deficiency_score,
'damp_heat_score': damp_heat_score,
'phlegm_damp_score': phlegm_damp_score,
'blood_stasis_score': blood_stasis_score,
'qi_stagnation_score': qi_stagnation_score,
'sensitive_constitution_score': sensitive_constitution_score,
};
// void debug() {
// print(balanced_constitution_score);
// print(qi_deficiency_score);
// print(yang_deficiency_score);
// print(yin_deficiency_score);
// print(blood_deficiency_score);
// print(damp_heat_score);
// print(phlegm_damp_score);
// print(blood_stasis_score);
// print(qi_stagnation_score);
// print(sensitive_constitution_score);
// }
final String balanced_title = '體質平衡指數';
final int max_score = 100;
final int status_length = 3;
final List<Color> balanced_status_colors = [
Colors.red,
Colors.amber,
Colors.green
];
final List<int> balanced_status_thresh = <int>[50, 25, 25];
final List<String> balanced_status_labels = ['需要醫療介入', '亞健康', '健康'];
final List<Color> constitution_status_colors = [
Colors.grey,
Colors.amber,
Colors.red,
];
final int constitution_low_threshold = 75;
final int constitution_high_threshold = 100;
int _balanced_status() {
int temp = balanced_constitution_score;
for (int i = 0; i < status_length; i++) {
if (temp <= balanced_status_thresh[i]) return i;
temp -= balanced_status_thresh[i];
}
return status_length - 1;
}
double balanced_factor() {
return balanced_constitution_score.toDouble() / max_score.toDouble();
}
Color balanced_color() {
return balanced_status_colors[_balanced_status()];
}
String balanced_label() {
return balanced_status_labels[_balanced_status()];
}
int _constitution_status(Constitution constitution) {
int score = constitution_score(constitution);
if (score < constitution_low_threshold) return 0;
if (score < constitution_high_threshold) return 1;
return 2;
}
Color constitution_color(Constitution constitution) {
return constitution_status_colors[_constitution_status(constitution)];
}
int constitution_score(Constitution constitution) {
switch (constitution.id) {
case 'qi_deficiency':
return qi_deficiency_score;
case 'yang_deficiency':
return yang_deficiency_score;
case 'yin_deficiency':
return yin_deficiency_score;
case 'blood_deficiency':
return blood_deficiency_score;
case 'damp_heat':
return damp_heat_score;
case 'phlegm_damp':
return phlegm_damp_score;
case 'blood_stasis':
return blood_stasis_score;
case 'qi_stagnation':
return qi_stagnation_score;
case 'sensitive_constitution':
return sensitive_constitution_score;
default:
return 0;
}
}
List<Constitution> main_constitutions(BuildContext context) {
final constitutions = context.read<ConstitutionProvider>().elements;
return constitutions
.where(
(constitution) =>
constitution_score(constitution) >= constitution_high_threshold,
)
.toList();
}
List<Constitution> sub_constitutions(BuildContext context) {
final constitutions = context.read<ConstitutionProvider>().elements;
return constitutions
.where(
(constitution) =>
constitution_score(constitution) >= constitution_low_threshold &&
constitution_score(constitution) < constitution_high_threshold,
)
.toList();
}
List<Constitution> report_display_constitutions(BuildContext context) {
final constitutions = context.read<ConstitutionProvider>().elements;
return constitutions;
}
// 用於產品/課程/療程的篩選對應
List<Constitution> risk_constitutions(BuildContext context) {
List<Constitution> temp = [];
temp.addAll(main_constitutions(context));
temp.addAll(sub_constitutions(context));
return temp;
}
}