bySolar function
FunctionalAstrolabe
bySolar(
- String solarDateStr,
- int timeIndex,
- GenderName gender, [
- bool fixLeap = true,
通过阳历获取星盘信息
@param solarDateStr 阳历日期【YYYY-M-D】 @param timeIndex 出生时辰序号【0~12】 @param gender 性别【男|女】 @param fixLeap 是否调整闰月情况【默认 true】,假入调整闰月,则闰月的前半个月算上个月,后半个月算下个月 @param language 输出语言 @returns 星盘信息
Implementation
FunctionalAstrolabe bySolar(
String solarDateStr,
int timeIndex,
GenderName gender, [
bool fixLeap = true,
]) {
List<IFunctionalPalace> palaces = [];
var heavenlyEarthlyBranch = getHeavenlyStemAndEarthlyBranchSolarDate(
solarDateStr,
timeIndex,
getConfig().yearDivide,
);
var earthlyBranchOfYear = getMyEarthlyBranchNameFrom(
heavenlyEarthlyBranch.yearly[1],
);
var heavenlyStemOfYear = getMyHeavenlyStemNameFrom(
heavenlyEarthlyBranch.yearly[0],
);
var soulAndBody = getSoulAndBody(solarDateStr, timeIndex, fixLeap);
final palaceNames = getPalaceNames(soulAndBody.soulIndex);
final majorStars = getMajorStar(solarDateStr, timeIndex, fixLeap);
final minorStars = getMinorStar(solarDateStr, timeIndex, fixLeap);
final adjectiveStars = getAdjectiveStar(solarDateStr, timeIndex, fixLeap);
final changSheng12 = getChangSheng12(
solarDateStr,
timeIndex,
gender,
fixLeap,
);
final boshi12 = getBoShi12(solarDateStr, gender);
final yearly12Maps = getYearly12(
solarDateStr,
); // {"jiangqian12": jiangqian12, "suiqian12": suiqian12};
final jiangqian12 = yearly12Maps["jiangqian12"] ?? [];
final suiqian12 = yearly12Maps["suiqian12"] ?? [];
final horoscope = getHoroscope(solarDateStr, timeIndex, gender, fixLeap);
final decadals = horoscope?["decades"];
final ages = horoscope?["ages"];
List<YearlyStemsBranches> yearlyStemsBranches = horoscope?["yearlies"];
for (int i = 0; i < 12; i++) {
final heavenlyStemOfPalace =
heavenlyStems[fixIndex(
heavenlyStems.indexOf(soulAndBody.heavenlyStenName.key) -
soulAndBody.soulIndex +
i,
max: 10,
)];
final earthlyBranchOfPalace = earthlyBranches[fixIndex(2 + i)];
bool isOriginalPalace =
!["ziEarthly", "chouEarthly"].contains(earthlyBranchOfPalace) &&
heavenlyStemOfPalace == heavenlyStemOfYear.key;
final filerMajorStars =
majorStars[i] +
minorStars[i]
.where((e) => ['luCun', 'tianMa'].contains(e.type.key))
.toList();
final yealyAges =
yearlyStemsBranches
.firstWhere((e) => e.earthlyBranchName.key == earthlyBranchOfPalace)
.ages;
palaces.add(
FunctionalPalace(
Palace(
index: i,
name: palaceNames[i],
isBodyPalace: soulAndBody.bodyIndex == i,
isOriginalPalace: isOriginalPalace,
heavenlySten: getMyHeavenlyStemNameFrom(heavenlyStemOfPalace),
earthlyBranch: getMyEarthlyBranchNameFrom(earthlyBranchOfPalace),
majorStars: filerMajorStars,
minorStars:
minorStars[i]
.where((star) => !['luCun', 'tianMa'].contains(star.type.key))
.toList(),
adjectiveStars: adjectiveStars[i],
changShen12: changSheng12[i],
boShi12: boshi12[i],
jiangQian12: jiangqian12[i],
suiQian12: suiqian12[i],
decadal: decadals[i],
ages: ages[i],
yearlies: yealyAges,
),
),
);
}
// 宫位从寅宫开始,而寅宫的索引位2,所以需要加2
final earthlyBranchOfSoulPalace =
earthlyBranches[fixIndex(soulAndBody.soulIndex + 2)];
final earthlyBranchOfBoudyPalace =
earthlyBranches[fixIndex(soulAndBody.bodyIndex + 2)];
var soulStar = getStarNameFrom(
earthlyBranchesMap[earthlyBranchOfSoulPalace]?["soul"],
);
final chineseDate = getHeavenlyStemAndEarthlyBranchSolarDate(
solarDateStr,
timeIndex,
getConfig().yearDivide,
);
final lunarDate = solar2Lunar(solarDateStr);
final result = FunctionalAstrolabe(
Astrolabe(
gender: gender.title,
solarDate: solarDateStr,
lunarDate: lunarDate.toChString(true),
chineseDate: chineseDate.toString(),
rawDates: LunarDateObj(lunarDate: lunarDate, chineseDate: chineseDate),
time: chineseTimes[timeIndex].tr,
timeRage: timeRanges[timeIndex],
sign: getSignBySolarDate(solarDateStr),
zodiac: getZodiacBySolarDate(solarDateStr).tr,
earthlyBranchOfSoulPalace: getMyEarthlyBranchNameFrom(
earthlyBranchOfSoulPalace,
),
earthlyBranchOfBodyPalace: getMyEarthlyBranchNameFrom(
earthlyBranchOfBoudyPalace,
),
soul: getStarNameFrom(
earthlyBranchesMap[earthlyBranchOfSoulPalace]?["soul"],
),
body: getStarNameFrom(
earthlyBranchesMap[earthlyBranchOfYear.key]?["body"],
),
fiveElementClass: getFiveElementClass(
soulAndBody.heavenlyStenName,
soulAndBody.earthlyBranchName,
),
palaces: palaces,
copyright: "copyright @2024",
),
);
return result;
}