123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505 |
- import 'package:fis_jsonrpc/rpc.dart';
- /// 国家规范计算儿童身高和体重的标准
- class ComputeChildrenLevel {
- static int findClosestMonthIndex(List<int> monthsArray, int targetMonth) {
- int closestIndex = 0;
- int closestDiff = 2147483647; // 使用一个较大的整数值代替 Infinity
- for (int i = 0; i < monthsArray.length; i++) {
- int diff = targetMonth - monthsArray[i];
- if (diff >= 0 && diff < closestDiff) {
- closestDiff = diff;
- closestIndex = i;
- }
- }
- return closestIndex;
- }
- /// 计算儿童体重水平
- static String calculateWidthStatus(
- GenderEnum gender,
- int ageInMonths,
- double weight,
- ) {
- List<List<double>> boyWeightData = [
- [2.8, 3.0, 3.2, 3.5, 3.7, 4.0, 4.2],
- [3.7, 3.9, 4.2, 4.6, 4.9, 5.2, 5.6],
- [4.7, 5.0, 5.4, 5.8, 6.2, 6.7, 7.1],
- [5.5, 5.9, 6.3, 6.8, 7.3, 7.8, 8.3],
- [6.1, 6.5, 7.0, 7.5, 8.1, 8.6, 9.2],
- [6.6, 7.0, 7.5, 8.0, 8.6, 9.2, 9.8],
- [6.9, 7.4, 7.9, 8.4, 9.1, 9.7, 10.3],
- [7.2, 7.7, 8.2, 8.8, 9.5, 10.1, 10.8],
- [7.5, 8.0, 8.5, 9.1, 9.8, 10.4, 11.1],
- [7.7, 8.2, 8.7, 9.4, 10.1, 10.8, 11.5],
- [7.9, 8.4, 9.0, 9.6, 10.3, 11.0, 11.8],
- [8.1, 8.6, 9.2, 9.8, 10.6, 11.3, 12.0],
- [8.3, 8.8, 9.4, 10.1, 10.8, 11.5, 12.3],
- [8.4, 9.0, 9.6, 10.3, 11.0, 11.7, 12.5],
- [8.6, 9.1, 9.7, 10.5, 11.3, 12.1, 12.9],
- [8.8, 9.3, 9.9, 10.7, 11.4, 12.2, 13.0],
- [9.0, 9.5, 10.1, 10.9, 11.7, 12.4, 13.3],
- [9.1, 9.7, 10.3, 11.1, 11.9, 12.7, 13.5],
- [9.3, 9.9, 10.5, 11.3, 12.1, 12.9, 13.8],
- [9.5, 10.1, 10.7, 11.5, 12.3, 13.2, 14.0],
- [9.7, 10.3, 10.9, 11.7, 12.6, 13.4, 14.3],
- [9.8, 10.5, 11.1, 11.9, 12.8, 13.7, 14.6],
- [10.0, 10.6, 11.3, 12.2, 13.0, 13.9, 14.8],
- [10.2, 10.8, 11.5, 12.4, 13.3, 14.2, 15.1],
- [10.4, 11.0, 11.7, 12.6, 13.5, 14.4, 15.4],
- [10.8, 11.5, 12.2, 13.1, 14.1, 15.1, 16.1],
- [11.2, 12.0, 12.7, 13.7, 14.7, 15.7, 16.7],
- [11.6, 12.4, 13.2, 14.2, 15.2, 16.3, 17.4],
- [12.0, 12.8, 13.6, 14.6, 15.8, 16.9, 18.0],
- [12.4, 13.2, 14.1, 15.2, 16.3, 17.5, 18.7],
- [12.8, 13.7, 14.6, 15.7, 16.9, 18.1, 19.4],
- [13.2, 14.1, 15.1, 16.2, 17.5, 18.7, 20.1],
- [13.6, 14.5, 15.5, 16.7, 18.1, 19.4, 20.8],
- [14.0, 15.0, 16.0, 17.3, 18.7, 20.1, 21.6],
- [14.5, 15.4, 16.5, 17.9, 19.3, 20.8, 22.4],
- [14.9, 15.9, 17.1, 18.4, 20.0, 21.6, 23.3],
- [15.3, 16.4, 17.6, 19.1, 20.7, 22.4, 24.2],
- [15.8, 16.9, 18.1, 19.7, 21.4, 23.2, 25.1],
- [16.2, 17.4, 18.7, 20.3, 22.2, 24.0, 26.0],
- [16.6, 17.9, 19.3, 21.0, 22.9, 24.8, 27.0],
- [17.1, 18.3, 19.8, 21.6, 23.6, 25.7, 27.9]
- ];
- List<List<double>> girlWeightData = [
- [2.7, 2.9, 3.1, 3.3, 3.6, 3.8, 4.1],
- [3.5, 3.7, 4.0, 4.3, 4.6, 4.9, 5.3],
- [4.4, 4.7, 5.0, 5.4, 5.8, 6.2, 6.6],
- [5.1, 5.4, 5.8, 6.2, 6.7, 7.2, 7.6],
- [5.6, 6.0, 6.4, 6.9, 7.4, 7.9, 8.4],
- [6.0, 6.4, 6.9, 7.4, 7.9, 8.5, 9.1],
- [6.4, 6.8, 7.2, 7.8, 8.4, 9.0, 9.6],
- [6.7, 7.1, 7.6, 8.1, 8.8, 9.4, 10.0],
- [6.9, 7.4, 7.9, 8.4, 9.1, 9.7, 10.4],
- [7.2, 7.6, 8.1, 8.7, 9.4, 10.0, 10.8],
- [7.4, 7.8, 8.3, 9.0, 9.6, 10.3, 11.1],
- [7.6, 8.0, 8.6, 9.2, 9.9, 10.6, 11.4],
- [7.7, 8.2, 8.8, 9.4, 10.1, 10.9, 11.6],
- [7.9, 8.4, 9.0, 9.6, 10.4, 11.1, 11.9],
- [8.1, 8.6, 9.2, 9.8, 10.6, 11.3, 12.2],
- [8.3, 8.8, 9.4, 10.1, 10.8, 11.5, 12.3],
- [8.4, 9.0, 9.6, 10.3, 11.0, 11.7, 12.5],
- [8.6, 9.2, 9.7, 10.5, 11.2, 12.0, 12.8],
- [8.8, 9.3, 9.9, 10.7, 11.4, 12.2, 13.0],
- [9.0, 9.5, 10.1, 10.9, 11.7, 12.4, 13.3],
- [9.1, 9.7, 10.3, 11.1, 12.0, 12.8, 13.8],
- [9.3, 9.9, 10.5, 11.3, 12.2, 13.1, 14.0],
- [9.5, 10.1, 10.7, 11.5, 12.4, 13.3, 14.3],
- [9.7, 10.3, 10.9, 11.7, 12.6, 13.6, 14.6],
- [9.8, 10.4, 11.1, 11.9, 12.9, 13.8, 14.8],
- [10.3, 10.9, 11.6, 12.5, 13.5, 14.4, 15.5],
- [10.7, 11.4, 12.1, 13.0, 14.1, 15.1, 16.2],
- [11.1, 11.8, 12.6, 13.6, 14.6, 15.7, 16.9],
- [11.5, 12.3, 13.1, 14.1, 15.3, 16.4, 17.7],
- [12.0, 12.7, 13.6, 14.7, 15.9, 17.1, 18.4],
- [12.4, 13.2, 14.1, 15.2, 16.4, 17.7, 19.1],
- [12.8, 13.6, 14.5, 15.7, 17.0, 18.3, 19.8],
- [13.1, 14.0, 15.0, 16.2, 17.6, 18.9, 20.5],
- [13.5, 14.4, 15.4, 16.7, 18.1, 19.6, 21.1],
- [13.9, 14.8, 15.9, 17.2, 18.7, 20.2, 21.9],
- [14.3, 15.3, 16.4, 17.8, 19.3, 20.9, 22.6],
- [14.7, 15.8, 16.9, 18.4, 20.0, 21.6, 23.4],
- [15.1, 16.2, 17.5, 19.0, 20.7, 22.4, 24.3],
- [15.5, 16.7, 18.0, 19.6, 21.4, 23.2, 25.1],
- [15.9, 17.1, 18.5, 20.2, 22.0, 23.9, 26.0],
- [16.3, 17.6, 19.0, 20.7, 22.7, 24.7, 26.8]
- ];
- List<List<double>> weightData =
- gender == GenderEnum.Male ? boyWeightData : girlWeightData;
- List<int> monthsArray = [
- 0,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6,
- 7,
- 8,
- 9,
- 10,
- 11,
- 12,
- 13,
- 14,
- 15,
- 16,
- 17,
- 18,
- 19,
- 20,
- 21,
- 22,
- 23,
- 24,
- 27,
- 30,
- 33,
- 36,
- 39,
- 42,
- 45,
- 48,
- 51,
- 54,
- 57,
- 60,
- 63,
- 66,
- 69,
- 72
- ];
- int adjustedAge = findClosestMonthIndex(monthsArray, ageInMonths);
- const lowerBound = 1;
- const upperBound = 4;
- if (weight < weightData[adjustedAge][lowerBound]) {
- return "下";
- } else if (weight >= weightData[adjustedAge][lowerBound] &&
- weight <= weightData[adjustedAge][upperBound]) {
- return "中";
- } else {
- return "上";
- }
- }
- /// 计算儿童身高水平
- static String calculateHeightStatus(
- GenderEnum gender, int ageInMonths, double height) {
- List<List<double>> boyHeightData = [
- [47.6, 48.7, 49.9, 51.2, 52.5, 53.6, 54.8],
- [51.3, 52.5, 53.8, 55.1, 56.5, 57.7, 59.0],
- [54.9, 56.2, 57.5, 59.0, 60.4, 61.7, 63.0],
- [58.0, 59.4, 60.7, 62.2, 63.7, 65.1, 66.4],
- [60.5, 61.9, 63.3, 64.8, 66.4, 67.8, 69.1],
- [62.5, 63.9, 65.4, 66.9, 68.5, 69.9, 71.3],
- [64.2, 65.7, 67.1, 68.7, 70.3, 71.8, 73.2],
- [65.7, 67.2, 68.7, 70.3, 71.9, 73.4, 74.9],
- [67.1, 68.6, 70.1, 71.7, 73.4, 74.9, 76.4],
- [68.3, 69.8, 71.4, 73.1, 74.7, 76.3, 77.8],
- [69.5, 71.0, 72.6, 74.3, 76.0, 77.6, 79.1],
- [70.7, 72.2, 73.8, 75.5, 77.3, 78.8, 80.4],
- [71.7, 73.3, 74.9, 76.7, 78.5, 80.1, 81.6],
- [72.8, 74.4, 76.0, 77.8, 79.6, 81.2, 82.8],
- [73.8, 75.4, 77.1, 78.9, 80.7, 82.4, 84.0],
- [74.8, 76.5, 78.1, 80.0, 81.8, 83.5, 85.1],
- [75.8, 77.5, 79.2, 81.0, 82.9, 84.6, 86.3],
- [76.8, 78.5, 80.2, 82.1, 84.0, 85.7, 87.4],
- [77.7, 79.4, 81.2, 83.1, 85.0, 86.8, 88.5],
- [78.6, 80.4, 82.1, 84.1, 86.1, 87.8, 89.6],
- [79.6, 81.3, 83.1, 85.1, 87.1, 88.9, 90.6],
- [80.5, 82.3, 84.1, 86.1, 88.1, 89.9, 91.7],
- [81.4, 83.2, 85.0, 87.0, 89.1, 90.9, 92.7],
- [82.2, 84.1, 85.9, 88.0, 90.0, 91.9, 93.7],
- [82.4, 84.2, 86.1, 88.2, 90.3, 92.2, 94.0],
- [84.8, 86.7, 88.6, 90.8, 93.0, 94.9, 96.8],
- [87.0, 88.9, 91.0, 93.2, 95.4, 97.4, 99.4],
- [89.0, 91.0, 93.1, 95.4, 97.7, 99.8, 101.8],
- [90.9, 93.0, 95.1, 97.5, 99.9, 102.0, 104.1],
- [92.7, 94.8, 97.0, 99.5, 101.9, 104.1, 106.2],
- [94.4, 96.6, 98.8, 101.3, 103.8, 106.1, 108.3],
- [96.0, 98.3, 100.6, 103.1, 105.7, 108.0, 110.2],
- [97.6, 99.9, 102.3, 104.9, 107.5, 109.8, 112.2],
- [99.2, 101.6, 104.0, 106.6, 109.3, 111.7, 114.1],
- [100.8, 103.2, 105.7, 108.4, 111.1, 113.6, 116.0],
- [102.4, 104.9, 107.4, 110.2, 113.0, 115.5, 117.9],
- [104.1, 106.6, 109.1, 112.0, 114.8, 117.4, 119.9],
- [105.7, 108.2, 110.9, 113.7, 116.6, 119.2, 121.8],
- [107.2, 109.9, 112.5, 115.5, 118.4, 121.1, 123.7],
- [108.8, 111.4, 114.1, 117.1, 120.2, 122.9, 125.5],
- [110.3, 113.0, 115.7, 118.8, 121.9, 124.6, 127.3]
- ];
- List<List<double>> girlHeightData = [
- [46.8, 47.9, 49.1, 50.3, 51.6, 52.7, 53.8],
- [50.4, 51.6, 52.8, 54.1, 55.4, 56.6, 57.8],
- [53.8, 55.0, 56.3, 57.7, 59.1, 60.4, 61.6],
- [56.7, 58.0, 59.3, 60.8, 62.2, 63.5, 64.8],
- [59.1, 60.4, 61.7, 63.3, 64.8, 66.1, 67.4],
- [61.0, 62.4, 63.8, 65.3, 66.9, 68.2, 69.6],
- [62.7, 64.1, 65.5, 67.1, 68.7, 70.1, 71.5],
- [64.2, 65.6, 67.1, 68.7, 70.3, 71.7, 73.1],
- [65.6, 67.0, 68.5, 70.1, 71.7, 73.2, 74.7],
- [66.8, 68.3, 69.8, 71.5, 73.1, 74.6, 76.1],
- [68.1, 69.6, 71.1, 72.8, 74.5, 76.0, 77.5],
- [69.2, 70.8, 72.3, 74.0, 75.7, 77.3, 78.8],
- [70.4, 71.9, 73.5, 75.2, 77.0, 78.6, 80.1],
- [71.4, 73.0, 74.6, 76.4, 78.2, 79.8, 81.4],
- [72.5, 74.1, 75.7, 77.5, 79.3, 81.0, 82.6],
- [73.5, 75.2, 76.8, 78.6, 80.5, 82.1, 83.8],
- [74.6, 76.2, 77.9, 79.7, 81.6, 83.3, 84.9],
- [75.5, 77.2, 78.9, 80.8, 82.7, 84.4, 86.1],
- [76.5, 78.2, 79.9, 81.9, 83.8, 85.5, 87.2],
- [77.5, 79.2, 80.9, 82.9, 84.8, 86.6, 88.3],
- [78.4, 80.2, 81.9, 83.9, 85.9, 87.6, 89.4],
- [79.3, 81.1, 82.9, 84.9, 86.9, 88.7, 90.4],
- [80.2, 82.0, 83.8, 85.8, 87.9, 89.7, 91.5],
- [81.1, 82.9, 84.7, 86.8, 88.8, 90.7, 92.5],
- [81.2, 83.0, 84.9, 87.0, 89.1, 90.9, 92.8],
- [83.6, 85.5, 87.4, 89.5, 91.7, 93.6, 95.5],
- [85.7, 87.7, 89.7, 91.9, 94.1, 96.1, 98.1],
- [87.7, 89.8, 91.8, 94.1, 96.4, 98.4, 100.5],
- [89.7, 91.8, 93.9, 96.2, 98.5, 100.7, 102.7],
- [91.5, 93.6, 95.8, 98.2, 100.6, 102.8, 104.9],
- [93.2, 95.4, 97.6, 100.1, 102.5, 104.8, 106.9],
- [94.9, 97.1, 99.4, 101.9, 104.4, 106.7, 108.9],
- [96.5, 98.8, 101.1, 103.7, 106.3, 108.6, 110.9],
- [98.1, 100.4, 102.8, 105.4, 108.1, 110.4, 112.8],
- [99.7, 102.1, 104.5, 107.2, 109.9, 112.3, 114.7],
- [101.3, 103.8, 106.2, 109.0, 111.8, 114.2, 116.7],
- [103.0, 105.5, 108.0, 110.8, 113.6, 116.1, 118.6],
- [104.6, 107.1, 109.7, 112.6, 115.4, 118.0, 120.6],
- [106.1, 108.7, 111.3, 114.3, 117.2, 119.8, 122.4],
- [107.6, 110.3, 112.9, 115.9, 118.9, 121.6, 124.2],
- [109.0, 111.7, 114.5, 117.5, 120.6, 123.3, 126.0]
- ];
- List<List<double>> heightData =
- gender == GenderEnum.Male ? boyHeightData : girlHeightData;
- List<int> monthsArray = [
- 0,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6,
- 7,
- 8,
- 9,
- 10,
- 11,
- 12,
- 13,
- 14,
- 15,
- 16,
- 17,
- 18,
- 19,
- 20,
- 21,
- 22,
- 23,
- 24,
- 27,
- 30,
- 33,
- 36,
- 39,
- 42,
- 45,
- 48,
- 51,
- 54,
- 57,
- 60,
- 63,
- 66,
- 69,
- 72
- ];
- int adjustedAge = findClosestMonthIndex(monthsArray, ageInMonths);
- const lowerBound = 1;
- const upperBound = 4;
- if (height < heightData[adjustedAge][lowerBound]) {
- return "下";
- } else if (height >= heightData[adjustedAge][lowerBound] &&
- height <= heightData[adjustedAge][upperBound]) {
- return "中";
- } else {
- return "上";
- }
- }
- /// 计算儿童BMI水平
- static String calculateBmiStatus(
- GenderEnum gender,
- int ageInMonths,
- double weight,
- double height,
- ) {
- List<List<double>> boyBmiData = [
- [11.2, 11.8, 12.5, 13.2, 14.0, 14.8, 15.5],
- [13.0, 13.6, 14.3, 15.1, 16.0, 16.8, 17.6],
- [14.3, 15.0, 15.8, 16.7, 17.6, 18.5, 19.5],
- [14.9, 15.7, 16.5, 17.4, 18.5, 19.5, 20.5],
- [15.2, 16.0, 16.8, 17.8, 18.8, 19.9, 21.0],
- [15.3, 16.1, 16.9, 17.9, 19.0, 20.0, 21.1],
- [15.3, 16.1, 16.9, 17.9, 18.9, 20.0, 21.1],
- [15.3, 16.0, 16.8, 17.8, 18.9, 19.9, 21.0],
- [15.3, 16.0, 16.8, 17.7, 18.8, 19.8, 20.9],
- [15.2, 15.9, 16.7, 17.6, 18.6, 19.6, 20.7],
- [15.1, 15.8, 16.5, 17.5, 18.5, 19.4, 20.5],
- [15.0, 15.7, 16.4, 17.3, 18.3, 19.2, 20.3],
- [14.9, 15.5, 16.3, 17.1, 18.1, 19.1, 20.1],
- [14.8, 15.4, 16.1, 17.0, 17.9, 18.9, 19.9],
- [14.7, 15.3, 16.0, 16.8, 17.8, 18.7, 19.7],
- [14.6, 15.2, 15.9, 16.7, 17.6, 18.5, 19.5],
- [14.5, 15.1, 15.8, 16.6, 17.5, 18.4, 19.4],
- [14.4, 15.0, 15.7, 16.5, 17.4, 18.3, 19.2],
- [14.3, 14.9, 15.6, 16.4, 17.2, 18.1, 19.1],
- [14.2, 14.8, 15.5, 16.3, 17.1, 18.0, 19.0],
- [14.2, 14.8, 15.4, 16.2, 17.0, 17.9, 18.9],
- [14.1, 14.7, 15.3, 16.1, 17.0, 17.8, 18.8],
- [14.0, 14.6, 15.2, 16.0, 16.9, 17.7, 18.7],
- [14.0, 14.6, 15.2, 15.9, 16.8, 17.6, 18.6],
- [14.1, 14.7, 15.3, 16.1, 17.0, 17.9, 18.8],
- [14.0, 14.5, 15.2, 15.9, 16.8, 17.6, 18.6],
- [13.9, 14.4, 15.0, 15.8, 16.6, 17.4, 18.4],
- [13.7, 14.3, 14.9, 15.6, 16.5, 17.3, 18.2],
- [13.7, 14.2, 14.8, 15.5, 16.3, 17.2, 18.1],
- [13.6, 14.1, 14.7, 15.4, 16.3, 17.1, 18.0],
- [13.5, 14.1, 14.7, 15.4, 16.2, 17.0, 17.9],
- [13.5, 14.0, 14.6, 15.3, 16.2, 17.0, 17.9],
- [13.4, 14.0, 14.6, 15.3, 16.1, 17.0, 17.9],
- [13.4, 13.9, 14.5, 15.3, 16.1, 17.0, 17.9],
- [13.4, 13.9, 14.5, 15.3, 16.1, 17.0, 18.0],
- [13.3, 13.9, 14.5, 15.3, 16.1, 17.1, 18.1],
- [13.3, 13.8, 14.5, 15.3, 16.2, 17.1, 18.2],
- [13.2, 13.8, 14.5, 15.3, 16.2, 17.2, 18.3],
- [13.2, 13.8, 14.5, 15.3, 16.3, 17.3, 18.5],
- [13.2, 13.8, 14.5, 15.3, 16.3, 17.4, 18.6],
- [13.2, 13.8, 14.5, 15.4, 16.4, 17.5, 18.8]
- ];
- List<List<double>> girlBmiData = [
- [11.1, 11.7, 12.3, 13.1, 13.8, 14.5, 15.3],
- [12.7, 13.3, 13.9, 14.7, 15.5, 16.3, 17.1],
- [13.9, 14.5, 15.2, 16.1, 17.0, 17.9, 18.9],
- [14.4, 15.1, 15.8, 16.7, 17.7, 18.7, 19.8],
- [14.7, 15.4, 16.2, 17.1, 18.1, 19.1, 20.2],
- [14.8, 15.5, 16.3, 17.3, 18.3, 19.3, 20.5],
- [14.9, 15.6, 16.4, 17.3, 18.4, 19.4, 20.5],
- [14.9, 15.6, 16.3, 17.3, 18.3, 19.3, 20.5],
- [14.8, 15.5, 16.3, 17.2, 18.2, 19.2, 20.3],
- [14.8, 15.4, 16.2, 17.1, 18.1, 19.1, 20.2],
- [14.7, 15.3, 16.1, 17.0, 17.9, 18.9, 20.0],
- [14.6, 15.2, 15.9, 16.8, 17.8, 18.7, 19.8],
- [14.5, 15.1, 15.8, 16.7, 17.6, 18.5, 19.6],
- [14.4, 15.0, 15.7, 16.5, 17.4, 18.4, 19.4],
- [14.3, 14.9, 15.6, 16.4, 17.3, 18.2, 19.2],
- [14.2, 14.8, 15.5, 16.3, 17.2, 18.1, 19.0],
- [14.1, 14.7, 15.4, 16.2, 17.0, 17.9, 18.9],
- [14.0, 14.6, 15.3, 16.0, 16.9, 17.8, 18.7],
- [14.0, 14.5, 15.2, 15.9, 16.8, 17.7, 18.6],
- [13.9, 14.5, 15.1, 15.9, 16.7, 17.6, 18.5],
- [13.8, 14.4, 15.0, 15.8, 16.6, 17.5, 18.4],
- [13.8, 14.3, 14.9, 15.7, 16.5, 17.4, 18.3],
- [13.7, 14.3, 14.9, 15.6, 16.5, 17.3, 18.2],
- [13.7, 14.2, 14.8, 15.6, 16.4, 17.2, 18.1],
- [13.8, 14.4, 15.0, 15.8, 16.6, 17.4, 18.4],
- [13.7, 14.2, 14.8, 15.6, 16.4, 17.3, 18.2],
- [13.6, 14.1, 14.7, 15.5, 16.3, 17.1, 18.0],
- [13.5, 14.0, 14.6, 15.4, 16.2, 17.0, 17.9],
- [13.4, 13.9, 14.5, 15.3, 16.1, 16.9, 17.9],
- [13.3, 13.9, 14.5, 15.2, 16.1, 16.9, 17.8],
- [13.3, 13.8, 14.4, 15.2, 16.0, 16.9, 17.8],
- [13.2, 13.7, 14.4, 15.1, 16.0, 16.8, 17.8],
- [13.1, 13.7, 14.3, 15.1, 15.9, 16.8, 17.8],
- [13.1, 13.6, 14.3, 15.0, 15.9, 16.8, 17.8],
- [13.0, 13.6, 14.2, 15.0, 15.9, 16.8, 17.9],
- [13.0, 13.6, 14.2, 15.0, 15.9, 16.8, 17.9],
- [13.0, 13.5, 14.2, 15.0, 15.9, 16.9, 18.0],
- [12.9, 13.5, 14.2, 15.0, 15.9, 16.9, 18.0],
- [12.9, 13.5, 14.2, 15.0, 16.0, 17.0, 18.1],
- [12.9, 13.5, 14.2, 15.0, 16.0, 17.0, 18.2],
- [12.9, 13.5, 14.1, 15.0, 16.0, 17.1, 18.3]
- ];
- List<List<double>> bmiData =
- gender == GenderEnum.Male ? boyBmiData : girlBmiData;
- List<int> monthsArray = [
- 0,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6,
- 7,
- 8,
- 9,
- 10,
- 11,
- 12,
- 13,
- 14,
- 15,
- 16,
- 17,
- 18,
- 19,
- 20,
- 21,
- 22,
- 23,
- 24,
- 27,
- 30,
- 33,
- 36,
- 39,
- 42,
- 45,
- 48,
- 51,
- 54,
- 57,
- 60,
- 63,
- 66,
- 69,
- 72
- ];
- int adjustedAge = findClosestMonthIndex(monthsArray, ageInMonths);
- const lowerBound = 1;
- const upperBound = 4;
- var bmi = weight / ((height / 100) * (height / 100));
- if (bmi < bmiData[adjustedAge][lowerBound]) {
- return "下";
- } else if (bmi >= bmiData[adjustedAge][lowerBound] &&
- bmi <= bmiData[adjustedAge][upperBound]) {
- return "中";
- } else {
- return "上";
- }
- }
- static String calculateMonthsFromBirthday(DateTime? birthday) {
- if (birthday == null) {
- return "0";
- }
- DateTime now = DateTime.now();
- int months = (now.year - birthday.year) * 12 + now.month - birthday.month;
- if (now.day < birthday.day) {
- months--;
- }
- if (months <= 0) {
- return '0';
- } else {
- return '$months';
- }
- }
- }
|