fix: 修复历史卦象列表无法显示及六爻解卦提示词逻辑错误

后端 Pydantic schema 添加 Hant 繁体字段支持(guaNameHant,
targetGuaNameHant, spiritNameHant, relationNameHant),解决
DerivedDivinationData extra=forbid 拒绝 AI 输出的繁体字段导致
agent_output 解析失败、历史记录为空的问题。

六爻解卦提示词修复:增加静卦五行生克链分析、假破假空降权、
六冲中性判断、用神核对防捏造、空亡数据对照等硬约束。

前端 Dart model 同步添加 Hant 字段(反向兼容,缺省为空字符串)。

其他:硬币翻转动画修复、弹窗单按钮居中、起卦按钮布局调整、
繁体 l10n 清理、pre-commit 排除集成测试。
This commit is contained in:
qzl
2026-04-14 12:37:19 +08:00
parent 97976b20bf
commit 55bac03eb0
14 changed files with 126 additions and 313 deletions
+62 -42
View File
@@ -97,54 +97,74 @@ class AppModalDialog extends StatelessWidget {
),
),
const SizedBox(height: AppSpacing.lg),
Row(
children: actions
.map((action) {
final child = action.primary
? FilledButton(
onPressed: action.onPressed,
style: FilledButton.styleFrom(
backgroundColor: action.destructive
? colors.error
: colors.primary,
foregroundColor: action.destructive
? colors.onError
: colors.onPrimary,
minimumSize: const Size.fromHeight(44),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(
AppRadius.full,
if (actions.length == 1)
Center(
child: FilledButton(
onPressed: actions[0].onPressed,
style: FilledButton.styleFrom(
backgroundColor: actions[0].destructive
? colors.error
: colors.primary,
foregroundColor: actions[0].destructive
? colors.onError
: colors.onPrimary,
minimumSize: const Size.fromHeight(44),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(AppRadius.full),
),
),
child: Text(actions[0].label),
),
)
else
Row(
children: actions
.map((action) {
final child = action.primary
? FilledButton(
onPressed: action.onPressed,
style: FilledButton.styleFrom(
backgroundColor: action.destructive
? colors.error
: colors.primary,
foregroundColor: action.destructive
? colors.onError
: colors.onPrimary,
minimumSize: const Size.fromHeight(44),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(
AppRadius.full,
),
),
),
),
child: Text(action.label),
)
: OutlinedButton(
onPressed: action.onPressed,
style: OutlinedButton.styleFrom(
foregroundColor: colors.onSurface,
side: BorderSide(color: colors.outline),
minimumSize: const Size.fromHeight(44),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(
AppRadius.full,
child: Text(action.label),
)
: OutlinedButton(
onPressed: action.onPressed,
style: OutlinedButton.styleFrom(
foregroundColor: colors.onSurface,
side: BorderSide(color: colors.outline),
minimumSize: const Size.fromHeight(44),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(
AppRadius.full,
),
),
),
),
child: Text(action.label),
);
child: Text(action.label),
);
return Expanded(
child: Padding(
padding: const EdgeInsets.symmetric(
horizontal: AppSpacing.xs,
return Expanded(
child: Padding(
padding: const EdgeInsets.symmetric(
horizontal: AppSpacing.xs,
),
child: child,
),
child: child,
),
);
})
.toList(growable: false),
),
);
})
.toList(growable: false),
),
],
),
),