bySolar function
FunctionalAstrolabe
bySolar(
- String solarDate,
- 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 solarDate,
int timeIndex,
GenderName gender, [
bool fixLeap = true,
]) {
List<IFunctionalPalace> palaces = [];
var heavenlyEarthlyBranch = getHeavenlyStemAndEarthlyBranchSolarDate(
solarDate,
timeIndex,
getConfig().yearDivide,
);
var earthlyBranchOfYear = getMyEarthlyBranchNameFrom(
heavenlyEarthlyBranch.yearly[1],
);
var heavenlyStemOfYear = getMyHeavenlyStemNameFrom(
heavenlyEarthlyBranch.yearly[0],
);
final params = AstrolabeParams(
solarDate: solarDate,
timeIndex: timeIndex,
fixLeap: fixLeap,
gender: gender,
);
var soulAndBody = getSoulAndBody(params);
final palaceNames = getPalaceNames(soulAndBody.soulIndex);
final majorStars = getMajorStar(params);
final minorStars = getMinorStar(solarDate, timeIndex, fixLeap);
final adjectiveStars = getAdjectiveStar(params);
final changSheng12 = getChangSheng12(params);
final boshi12 = getBoShi12(solarDate, gender);
final yearly12Maps = getYearly12(
solarDate,
); // {"jiangqian12": jiangqian12, "suiqian12": suiqian12};
final jiangqian12 = yearly12Maps["jiangqian12"] ?? [];
final suiqian12 = yearly12Maps["suiqian12"] ?? [];
final horoscope = getHoroscope(params);
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: majorStars[i],
minorStars: minorStars[i],
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(
solarDate,
timeIndex,
getConfig().yearDivide,
);
final lunarDate = solar2Lunar(solarDate);
final result = FunctionalAstrolabe(
Astrolabe(
gender: gender.title,
solarDate: solarDate,
lunarDate: lunarDate.toChString(true),
chineseDate: chineseDate.toString(),
rawDates: LunarDateObj(lunarDate: lunarDate, chineseDate: chineseDate),
time: chineseTimes[timeIndex].tr,
timeRage: timeRanges[timeIndex],
sign: getSignBySolarDate(solarDate),
zodiac: getZodiacBySolarDate(solarDate).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;
}