Project-based statistical analysis suite written in Flutter with Learn & Quiz modules.
📖 Documentation: https://maicarons.github.io/stats-flutter/
中文文档 / Chinese README: README_zh.md
Splash → Global tabs
├─ Projects ← multi-project dataset manager (home)
├─ Learn ← 8 concept lessons
├─ Quiz ← 20-question bank
└─ Settings ← theme / language / about
Open a project → Workspace
├─ Data ← editable grid, variables, CSV
├─ Analysis ← statistical procedures
└─ Transform ← COMPUTE / RECODE / SORT …
Learn / Quiz / Settings are global. Data / Analysis / Transform live inside a project.
- Create (blank / demo), open, rename, duplicate, delete
- JSON persistence under
documents/stats_flutter_projects/
- Double-click to edit; Enter / Tab / Esc navigation
- Variable view: type, measure, label, decimals
- Value-label CRUD, missing values
- Value labels hidden by default (toggle in toolbar)
- CSV import/export, weight cases, split file, find
COMPUTE · RECODE · COUNT · RANK · SORT CASES · SELECT IF · AGGREGATE · FLIP
| Area | Procedures |
|---|---|
| Describe | descriptives, frequencies, histogram, bar, scatter, normality |
| Means | one-sample / independent / paired t-tests, Oneway ANOVA, MEANS, Tukey |
| Association | Pearson/Spearman, crosstabs chi-square |
| Predict | linear regression, logistic regression, ROC, K-Means, PCA |
| Nonparametric | Mann-Whitney, Wilcoxon, Kruskal-Wallis |
| Reliability | Cronbach α |
Executable subset: DESCRIPTIVES FREQUENCIES T-TEST CORRELATIONS COMPUTE RECODE RANK SORT SELECT IF LIST HELP
Language layer: PSPP comment semantics (* / COMMENT), macros (DEFINE, positional & keyword arguments, !LET / !IF / !DO, !CONCAT …), INCLUDE with relative paths and cycle protection, per-command error locations, .sps round-trip (BOM stripping, invalid bytes → U+FFFD)
- Session output tree: one card per run, newest first, newest expanded
- Per card: copy, share, delete, export; "Export all" merges every card of the procedure
- PDF (bundled CJK subset font, running header, page x / y), HTML, Markdown
- Shared table styling: numeric columns right-aligned, p-value stars and colours, variable / value labels
- i18n: English / 中文 (flutter gen-l10n)
- Theme: light / dark / system + 8 seed colors
- Unified brand logo (splash / launcher / docs)
- CJK text: bundled Noto Sans SC subset renamed
StatsSansSC(OFL-1.1, reproducible viatools/subset_cjk_font.py); Latin uses Inter
Pure Dart, no Flutter dependency. 13 test groups.
import 'package:statkit/statkit.dart';
final d = Descriptives.compute([1, 2, 3, 4, 5]);
final t = TTest.oneSample(data, mu0: 70);
final r = Regression.simple(x, y);git clone https://github.com/Maicarons/stats-flutter.git
cd stats-flutter
flutter pub get
flutter run -d windows # or macos / linuxcd packages/statkit && dart test
cd ../.. && flutter testcd docs && npm install && npm run docs:devPublished at: https://maicarons.github.io/stats-flutter/
- Gradle distribution:
https://mirrors.cloud.tencent.com/gradle/ - Maven: Aliyun
maven.aliyun.com
stats-flutter/
├── packages/statkit/ # reusable pure-Dart stats kernel
├── lib/
│ ├── core/ # models / transforms / syntax / theme
│ ├── l10n/ # ARB (en / zh)
│ ├── features/
│ │ ├── projects/ # project list + workspace
│ │ ├── data_editor/
│ │ ├── analysis/
│ │ ├── transform/
│ │ ├── syntax/
│ │ ├── learn/ quiz/
│ │ └── settings/
│ └── shared/ # stores + BrandLogo
├── docs/ # VitePress (zh / en)
└── android/ # Tencent Gradle + Aliyun Maven
Tag a release and GitHub Actions publishes packages/statkit to pub.dev automatically.
# bump version in packages/statkit/pubspec.yaml + CHANGELOG
git tag v0.2.0
git push origin main v0.2.0Workflow: .github/workflows/publish.yml · Guide: docs/guide/publish-statkit.md
One-time: enable Automated publishing from GitHub Actions on pub.dev/packages/statkit/admin.
- Source code in this repository: AGPL-3.0