Repository navigation
Releases: Maicarons/stats-flutter
Release list
Stats-flutter v1.5.0 · 语法语言与 PDF 导出
Stats-flutter v1.5.0 · 语法语言与 PDF 导出 / Scripting language & PDF export
v1.4.0 把统计口径理清之后,这一版补上两处「用得下去」的能力:数据页的语法编辑器补齐 PSPP 语法层(注释 / 宏 / INCLUDE / 定位 / .sps 往返),分析结果从「一份报告」变成会话级输出树,并补上长期缺的PDF 导出——纯 Dart 渲染、内置 2.3 MB 子集化中文字体,中文内容在屏幕 / HTML / PDF 三处一致。
App 版本 1.5.0+7,内置 statkit 0.5.1(本版未改动统计内核,数值与 v1.4.0 一致)。
亮点 / Highlights — M3:语法语言层
- 注释按 PSPP 语义:
*/COMMENT持续到「行尾句点」或空行,而不是「本行剩余部分」;行内/* … */剥离;整行注释会结束未闭合命令;漏写句点时给提示,而不是静默把后面的命令一起吃掉 - 宏:
DEFINE … !ENDDEFINE,位置参数!POSITIONAL与关键字参数、!TOKENS(n)/!CHAREND('/')/!CMDEND/!DEFAULT(值);宏函数!CONCAT !QUOTE !UNQUOTE !UPCASE !LENGTH !SUBSTR !HEAD !TAIL !INDEX !EVAL !BLANKS !NULL;!LET/!IF !THEN !ELSE !ENDIF/!DO !TO !BY !DOEND;调用支持!m a=1.与!m(1).两种写法;重复定义覆盖,递归有深度上限 INCLUDE:被包含文件注入当前脚本一起执行、宏表延续;相对路径按当前.sps文件所在目录解析;循环包含报错,嵌套上限 16 层;包含文件出错即中止后续命令(PSPP 语义)- 定位:每条命令带起止位置,失败标注「第 N 行」可点击跳回源码;宏展开产生的命令能回溯到原始位置,不因展开丢行列信息
.sps往返:打开先剥 UTF-8 BOM、非法字节替换为 U+FFFD 并提示数量;保存写出无 BOM 的 UTF-8,PSPP 可直接读取- 本版不做的可选宏构造(
!DO !v !IN (…)、!ENCLOSE、!NOEXPAND/!OFFEXPAND/!ONEXPAND)明确报「未支持」,不静默忽略
亮点 / Highlights — M4:输出树与 PDF 导出
- 会话级输出树:每次运行生成一张卡片,最新在前、默认只展开最新一张,可手动折叠;同一分析连跑多次不再互相覆盖(清空走「清空输出」按钮,带确认对话框)
- 每张卡片:复制纯文本 / 分享 / 导出 PDF·HTML·Markdown;卡片右上角可删除,AppBar 的「导出全部输出 / 分享全部输出」把该分析的每张卡片合成为一份;v1.4 的分区导出菜单保留
- PDF 导出(新增):
pdf纯 Dart 渲染(不引入printing),A4 分页、页眉(标题 + 生成时间)、页脚「第 x / y 页」、表头跨页自动重复、数值列右对齐、p 值加星着色;导出期间显示进度提示 - 内置中文字体:Google Fonts Noto Sans SC 子集化(
wght=400静态实例 + GB2312 常用字 + Latin + 标点),按 OFL 要求改名StatsSansSC,实测 2.3 MB 随包分发(未子集的完整字重为 17 MB,故不采用);Latin 仍用 Inter,中文走fontFallback。罕见字 / 繁体可能缺字(渲染为空白) - 变量与值标签:表格行 / 表头 / 标题 / 副标题优先显示变量标签与值标签,注释给出「标签 = 变量名」对应关系;数值列识别扩展到
<.001、≤0.05、1.2e-05、12.5%、1,204等写法,并剔除行尾显著性星号 - 共享样式收敛到
report_style.dart,屏幕 / HTML / PDF 三处的数值对齐、p 值格式与星号口径一致
文档 / Docs
- 新增中英双语页面:语法语言(注释 / 宏 /
INCLUDE/ 定位 /.sps往返)与输出与导出(输出树 / 三种格式 / 标签 / PDF 与字体说明) - 首页特性卡、README(中英)、分析页「导出」小节同步更新;
docs:build通过
质量 / Quality
dart analyze lib test:无问题flutter test --exclude-tags "golden || benchmark":301 项;flutter test --tags golden:17 项(Windows 生成基线);packages/statkit的dart test:91 项- 新增测试:
output_tree_test、report_style_test、report_pdf_test、report_labels_test;golden 用例补OutputStore.reset(),修掉静态输出树在测试间串用的问题
构建环境 / Requirements
- Flutter 3.41.9 stable(Dart SDK
^3.11.5) statkit 0.5.1(v1.5.0 未改动统计内核;PDF 依赖pdf ^3.12.0)
产物 / Artifacts
CI 会为本次发布构建并附加:Android APK、Windows x64(zip)、Linux x64(tar.gz)、macOS(zip)。
完整变更清单 / Full changelog:git log app-v1.4.0..app-v1.5.0
Stats-flutter v1.4.0 · 统计能力升级
Stats-flutter v1.4.0 · 统计能力升级 / Statistical capability upgrade
v1.3.1 收尾了表现层,这一版回到「会不会算、算得对不对」:统计内核 statkit 升到 0.5.0(新增 4 个过程、修掉 2 处缺陷),数据层补上 5 个 SPSS / PSPP 命令,并把「哪些个案参与计算」从零散实现收敛成一套写清楚、有对拍的口径。
注意:本版修正了若干统计口径(Levene 改为对组均值、Mann-Whitney 补结校正、多变量按个案对齐、二元 logistic 的 IRLS),与旧版本数值不同之处请以本版本为准,逐条见下方「口径修正」。
亮点 / Highlights — M1:statkit 0.5.0
- 有序趋势检验 Jonckheere-Terpstra(分组本身有序时的单调趋势;结对计数 O(n log n)、含结校正方差、支持频数权重、单尾 p 在
extra['pOneTail']) - 置换检验:
Permutation.random/Permutation.exact、两独立样本均值差、配对差;p 用(1 + #{|s| ≥ |obs|}) / (1 + B)(Phipson & Smyth 2010),固定默认种子保证可复现,小样本可精确枚举 - Lilliefors 校正的正态性检验 p(参数由样本估计时,原先的渐近 p 几乎不会拒绝)
- 多项 logistic 回归(三分类及以上名义因变量,softmax + IRLS,Wald / OR)
- 协方差分析 ANCOVA(控制协变量后的组间比较,Type III 平方和)
- 新增过程均标注
@experimental:次版本内接口可能调整
亮点 / Highlights — M2:数据层命令
RANK补全:/RANK /N /RFRACTION /PROPORTION /PERCENT /NORMAL /NTILES(k)、/TIES=MEAN|LOW|HIGH|CONDENSE、升 / 降序、/INTO自定义目标变量名AUTORECODE:字符串与数值统一编码 1..k 并自动加值标签;用户缺失值恒排最后、缺失码超过 3 个自动改用缺失范围(与 PSPP 一致)SAMPLE:按比例抽样,或SAMPLE n FROM N精确抽 n 个,/SEED=可复现MRSETS多重响应集:MDGROUP/MCGROUP定义,/DISPLAY、/FREQUENCIES、/CROSSTABS、/DELETE;响应表同时给出应答数与应答个案数两个分母COMBINE FILES:ADD FILES纵向追加、MATCH FILES /BY横向匹配(哈希连接,不要求输入已排序),/IN=生成来源指示变量,/KEEP/DROP/RENAME调整变量;字典按 PSPPmerge_dictionaries规则合并(先出现的文件胜出、字符串宽度取最大、类型冲突报错)- 这些命令既能在语法编辑器里执行,也有图形化入口(数据页菜单「合并数据集…」)
亮点 / Highlights — M5:口径复核、PSPP 对拍与性能基准
- 缺失值口径收敛为五条规则并逐过程文档化(新增文档页「缺失值口径 / Missing values」):A 单变量过程只看该变量;B 多变量过程按个案对齐(相关矩阵成对删除,需要完整个案的过程整行删除);C 加权统计要求值与权重都有效;D 分组变量或分析变量缺失的个案不入任何组;E 分类过程把用户缺失值计为「缺失」而非一个类别
- 顺带修掉一处多变量个案错位缺陷:此前部分过程先各自过滤列、再按位置截断,变量之间会错开一格
- 与 PSPP 2.1.2 对拍:期望值取自 PSPP 源码树自带测试的期望输出(AUTORECODE、RANK、ONEWAY、CORRELATIONS 成对删除、NPAR TESTS Mann-Whitney),固化进 CI 每次运行
- 性能基准:10 万行 × 5 列的核心分析路径逐步计时(本机总耗时 497 ms),CI 中作为
continue-on-error的影子任务,只告警、不挡发布
口径修正 / Statistical conventions
- Levene 方差齐性改为以组均值为中心(PSPP 与 SPSS 的 ONEWAY / T-TEST / GLM 口径);此前用的组中位数是 Brown-Forsythe,现由
useMean: false提供 - Mann-Whitney U 的渐近方差补上结校正
σ² = n1·n2·[(n+1)/12 − Σ(t³−t)/(12·n·(n−1))],p 用2·Φ(z)(PSPP 的 Asymp. Sig.(双尾)),报告里的 Z 与 p 由此自洽;连续性校正后的 Z / p(SPSS、Rcorrect = TRUE)另存于extra['zContinuityCorrected']/extra['pContinuityCorrected'] - 二元 logistic 回归:IRLS 迭代此前在两点之间振荡、截距标准误取了标准化尺度;系数、OR、SE、p 现在来自真正的极大似然点
质量 / Quality
flutter analyze:无问题;packages/statkit的dart analyze通过flutter test --exclude-tags "golden || benchmark":213 项;flutter test --tags golden:17 项(Windows 生成基线);packages/statkit的dart test:91 项- 文档站点:
npm ci+npm run docs:build通过(26 个页面,新增中英「缺失值口径」与数据层命令说明) dart pub publish --dry-run:0 warnings
构建环境 / Requirements
- Flutter 3.41.9 stable(Dart SDK
^3.11.5) statkit 0.5.0(本版一并发布到 pub.dev)
产物 / Artifacts
CI 会为本次发布构建并附加:Android APK、Windows x64(zip)、Linux x64(tar.gz)、macOS(zip)。
完整变更清单 / Full changelog:git log app-v1.3.1..app-v1.4.0
Stats-flutter v1.3.1 - UI/UX polish II
Stats-flutter v1.3.1 · UI/UX polish II / 表现层收尾
v1.3.0 把整套界面与交互重做了一遍,计划里还剩一批「延期到 v1.3.1」的条目;本版本把它们全部补完。
统计内核 packages/statkit 依旧未改动,计算口径与 v1.3.0 完全一致,可以直接替换旧版本。
亮点 / Highlights
- 📊 图表补齐:真正的箱线图(须 / 四分位箱 / 中位数 / 均值菱形 / 离群点,多组并列);新增误差条图(分析目录 32 → 33 项,均值 ± 1.96×SE 须 + 总体均值参考线);Q-Q 图补 45° 参考线与理论/样本分位轴标题;碎石图补肘部虚线(曲率最大处)。
- 🗂 图表配套:四种图表统一图例与空数据提示(点数不足、方差为零等情形都给出人话说明);tooltip 统一到同一套卡片样式;箱线图分组超过 6 组时折叠为前 6 组,并在图下与报告备注中写明「其余 N 组未显示」。
- 🧊 数据表格冻结首列:宽屏(≥ 600)冻结「行号 + 首个变量列」,冻结区与滚动区纵向逐像素同步;窄屏只冻结行号列,变量列全部参与横向滚动。
- ⌨️ 键盘可达:方向键选格、选中后 Enter / F2 进入编辑、Esc 取消、Tab 右移;分析中心 Ctrl/Cmd+K 聚焦搜索框;确认对话框首焦落在主行动按钮;快捷键提示直接写在数据表格工具栏上。
- ✨ 动效与焦点:分析中心与工程列表的入场 stagger(24 ms 步长、总时长封顶 300 ms,自动尊重系统「减少动效」);自绘焦点环只在键盘操作时出现,触摸点击不闪环,且不额外占用 Tab 位。
- 📤 分区单独导出:每个报告分区右上角可复制 Markdown、或单独导出 Markdown / HTML(文件名含报告名、分区标题与日期)。
- 🔐 依赖安全:docs 站点的 5 条 Dependabot 公告全部升到修复版本(vite 5.4.21 → 6.4.4、esbuild 0.21.5 → 0.25.12、source-map-js 1.2.1 → 1.2.2)。
顺带修掉的缺陷 / Bug fixes
- 数据表格单元格编辑的 Esc / Enter / Tab 在桌面端从未生效(v1.3.0 文档「双击编辑」一节已写明这三个键):按键处理器原先挂在
KeyboardListener上,而它在 build 时会把自己包装后的回调传给Focus,FocusNode.attach执行this.onKeyEvent = onKeyEvent ?? this.onKeyEvent时把节点自带的处理器悄悄覆盖掉。改为把处理器挂到单元格TextField自己使用的FocusNode上,并补上方向键与 F2。 - 分析参数选择器(变量下拉)在变量名较长时溢出。
- 图表文字此前就地新建
TextStyle:CustomPaint里的TextPainter不继承DefaultTextStyle,会丢掉主题字体族(golden 下退化成实心方块);改为从主题TextTheme派生。 - 误差条图的置信区间颜色与图例「95% 置信区间」不一致。
- 分类轴出现半格刻度造成的重复标签(
PC1 PC1 …);碎石图 x 轴与主成分点位对不齐。
质量 / Quality
flutter analyze:无警告flutter test:124 项全部通过(widget / 单元 / 无障碍 / 响应式 / 导出 / 数据网格)- 视觉基线:15 张 golden(新增「分组箱线图 · 浅色」「箱线图 · 手机 · 深色」「数据表格 · 冻结首列 · 宽屏 · 浅色」),基线由 Windows 生成,CI 上以
--exclude-tags golden排除,本地用flutter test --tags golden验证 - 文档站点:
npm ci+npm run docs:build通过(24 个页面)
构建环境 / Requirements
- Flutter 3.41.9 stable(Dart SDK
^3.11.5) statkit 0.4.0(本地 path 依赖,未变更)
产物 / Artifacts
CI 会为本次发布构建并附加:Android APK、Windows x64(zip)、Linux x64(tar.gz)、macOS(zip)。
完整变更清单 / Full changelog:git log app-v1.3.0..app-v1.3.1
Stats-flutter v1.3.0 - UI/UX overhaul
Stats-flutter v1.3.0 · UI/UX overhaul / 界面与体验升级
冲「专业、克制的统计分析工作台」重做了一遍表现层与交互层。统计内核 packages/statkit 未改动,计算口径与 v1.2 完全一致;这是一个可以放心替换旧版本的界面升级。
亮点 / Highlights
- 🎨 设计地基:新增
design_tokens.dart(间距 / 圆角 / 字号 / 动效 / 语义色),重写app_theme.dart,明暗两套主题同等优先级。 - 🔤 字体本地打包:内置 Inter(400/500/600/700,拉丁与数字),中文回退系统字体;移除
google_fonts,离线启动不再掉字体、不再有首屏 FOUT。数值统一启用等宽数字(tabular figures)。 - 🧩 通用组件库:
AppCardSectionHeaderStatTile/StatChipEmptyStateLoadingSkeletonAnalysisTileParamVarPickerSignificanceBadgeChartCard+AdaptiveNavScaffold。 - 🔍 分析中心:32 项分析 / 8 个分类可折叠分组,支持搜索、最近使用、收藏(本地持久化)。
- 📊 报告与图表:自绘表格(等宽数字、数值右对齐、表头吸顶、斑马纹、横向滚动);p 值按阈值着色 + 星级 + 文字标注(色盲友好);分区可一键复制;HTML / Markdown 导出带新配色、深色模式与打印样式。
- 📱 响应式:断点 600 / 840 / 1200,正文最大宽度 960 居中;手机底部导航 ↔ 宽屏侧栏(状态保持);375 / 768 / 1024 / 1440 四档无横向滚动。
- ✨ 动效:
FadeForwards页面转场、骨架屏加载,全局响应系统「减少动态效果」设置。 - 🌏 双语:ARB 各 576 条文案;学习课程与题库内容双语;版本号从
AppInfo读取,与pubspec.yaml一致。 - ♿ 可访问性:明暗两套正文对比度达 AA、交互元素满足 44×44 触摸目标、图标按钮带 tooltip 与语义标签、状态不只靠颜色区分。
顺带修掉的缺陷 / Bug fixes
- 组件主题(按钮 / 标签 / Tab / 导航栏)此前使用裸
TextStyle,真机上会退回系统字体而不是 Inter。 - 未选中的 chip 标签几乎不可见(覆盖了默认颜色,对比度仅 1.05)。
- 收藏分析项时,新插入的收藏区块会把已展开的分类折叠回去(列表元素缺少稳定 key)。
- 答题页底部按钮在 375px 宽度下溢出 15px。
质量 / Quality
flutter analyze:无告警flutter test:72 项全部通过(widget / 单元 / 无障碍 / 响应式回归)- 视觉基线:8 张 golden(学习页明·暗·宽屏、测试页明·暗、课程详情明·暗、自适应导航),基线由 Windows 生成,CI 上以
--exclude-tags golden排除,本地用flutter test --tags golden验证
构建环境 / Requirements
- Flutter 3.41.9 stable(Dart SDK
^3.11.5) statkit 0.4.0(本地 path 依赖,未变更)
产物 / Artifacts
CI 会为本次发布构建并附加:Android APK、Windows x64(zip)、Linux x64(tar.gz)、macOS(zip)。
完整变更清单 / Full changelog:git log app-v1.2.0..app-v1.3.0
app-v1.2.0
chore: remove tool/ from repo (local-only working scripts)
Stats-flutter v1.1.0 — SPSS interoperability
v1.1.0
SPSS .sav import
- Read dictionary, value labels, compressed/uncompressed cases
- Validated on 7 PSPP example files including real SPSS Windows output
- Data menu: 导入 SPSS .sav
Reports
- Export analysis reports as HTML (styled, shareable) and Markdown
Data quality
- User missing values excluded from descriptives and analysis helpers
Syntax
- Open / save .sps\ syntax files
Note
- Excel .xlsx: export to CSV for now (CSV importer available)
Stats-flutter v1.0.0
Stats-flutter 1.0.0
移动优先的统计分析套件,灵感来自 GNU PSPP。
亮点
- 工程化统计表管理(多工程、持久化)
- 双击编辑数据表格、值标签、缺失值
- 描述/t检验/ANOVA/相关/回归/卡方/非参数/信度/聚类/ROC/因子/逻辑回归
- PSPP 风格数据变换与语法子集执行器
- 学习 + 测试模块
- 中英双语 i18n、主题色、开屏与统一 Logo
- 可复用纯 Dart 统计内核 \packages/statkit\
- Android 构建使用腾讯 Gradle / 阿里 Maven 镜像
安装
\\�ash
git clone https://github.com/Maicarons/stats-flutter.git
cd stats-flutter
flutter pub get
flutter run -d windows
\\