181 lines
5.9 KiB
Dart
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;
|
|
}
|
|
}
|