feat(divination): 重构手动起卦教程,支持三硬币交互选择

This commit is contained in:
qzl
2026-04-07 18:41:08 +08:00
parent f904286ba7
commit f394df9362
29 changed files with 873 additions and 326 deletions
@@ -11,6 +11,7 @@ class DivinationResultData {
required this.lowerName,
required this.signType,
required this.keywords,
required this.focusPoints,
required this.conclusion,
required this.analysis,
required this.suggestion,
@@ -29,6 +30,7 @@ class DivinationResultData {
final String lowerName;
final String signType;
final String keywords;
final List<String> focusPoints;
final String conclusion;
final String analysis;
final String suggestion;
@@ -50,6 +52,7 @@ class DivinationResultData {
'lowerName': lowerName,
'signType': signType,
'keywords': keywords,
'focusPoints': focusPoints,
'conclusion': conclusion,
'analysis': analysis,
'suggestion': suggestion,
@@ -86,6 +89,7 @@ class DivinationResultData {
lowerName: _requiredString(json, 'lowerName'),
signType: _requiredString(json, 'signType'),
keywords: _requiredString(json, 'keywords'),
focusPoints: _requiredStringList(json, 'focusPoints'),
conclusion: _requiredString(json, 'conclusion'),
analysis: _requiredString(json, 'analysis'),
suggestion: _requiredString(json, 'suggestion'),
@@ -113,6 +117,21 @@ class DivinationResultData {
}
}
List<String> _requiredStringList(Map<String, dynamic> json, String key) {
final raw = json[key];
if (raw is! List<dynamic>) {
throw FormatException('Invalid $key payload');
}
return raw
.map((item) {
if (item is! String) {
throw FormatException('Invalid $key item payload');
}
return item;
})
.toList(growable: false);
}
class GanzhiData {
const GanzhiData({
required this.yearGanZhi,