A descriptive statistics calculator for students, published on the Play Store as
Descriptive Statistics
(com.neteru.tixtat). It is the Flutter rewrite of a legacy native Android app.
- Three calculators: discrete variables (Xi, Ni), continuous variables (classes [L1 ; L2[, Ni) and qualitative variables (modalities, effectifs).
- Entry: row by row, bulk import, or a raw series ("3 5 5 7 3") tallied into rows. For continuous variables, classes default to the Sturges rule.
- Results: frequency table, means, mode, median, quartiles, deciles, variance, standard deviation, covariance/correlation, coefficient of variation, with a step-by-step explanation of every calculation.
- Charts: bar, line and box plot (quantitative), bar and pie (qualitative), chosen in Settings.
- Backups: save a result, reopen it in its calculator, share it as text.
- Languages: French, English, German, Spanish, Portuguese. English is the fallback for other device languages.
- Privacy policy: bundled with the app, in Settings.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
The Play Store images, in English; other languages are in store/screenshots/<lang>/.
- Flutter (stable channel), Dart SDK
>=3.8.0 <4.0.0 - State: Riverpod with code generation (
riverpod_generator) - Routing: go_router
- Storage: Hive CE (backups) + SharedPreferences (settings)
- i18n: Slang
- Charts: fl_chart (the box plot is a
CustomPainter) - Android build: Gradle 9.3.1, AGP 9.1.0, Kotlin 2.4.0, Java 17
cp .env.example .env
flutter pub get
dart run slang
dart run build_runner build --delete-conflicting-outputs
flutter run.env is bundled as an asset, so everything in it is public. It only holds the theme
colors:
| Variable | Description | Example |
|---|---|---|
APP_PRIMARY_COLOR |
Primary theme color, hex | #353839 |
APP_SECONDARY_COLOR |
Secondary theme color, hex | #009ee3 |
APP_ACCENT_COLOR |
Accent theme color, hex | #f5f5f5 |
flutter test
# with coverage, as run in CI:
flutter test --coverageUnit and widget tests live under test/, mirroring lib/. Infrastructure singletons
are mocked with mocktail through a GetIt test-locator override
(test/helpers/test_utils.dart).
lib/main.dart: entry point.lib/core/bootstrap/app_bootstrap.dart: env, Hive, DI and locale setup.lib/app.dart: root widget, theme and router.lib/core/stats/: the calculations, as pure functions (computeDiscreteStats,computeContinuousStats,computeQualitativeStats, raw-series grouping). They have no Flutter dependency and are the most heavily tested part.lib/core/providers/: Riverpod providers (calculator entry state, settings, home tab).lib/core/data/backups/: saved results (Hive).lib/view/screens/: calculators, backups, documentation, tutorial, settings, onboarding.lib/view/components/calculators/: entry form, dialogs, stats table, explanations, charts.
Generated files (*.g.dart, locator.config.dart) are not committed; rebuild them with
dart run slang and dart run build_runner build.
dart format .
flutter analyze
flutter testThe privacy policy ships in the app (assets/docs/<locale>/privacy_policy.html, one per app language, opened from Settings). The store listings link to the public copy at https://netersoft.github.io/descriptive-statistics/privacy/ (English: /en/), served by GitHub Pages from the public netersoft/netersoft.github.io repository. After editing the policy, regenerate the pages and push that repository:
python3 tool/build_privacy_pages.py ~/Dev/Projects/Web/netersoft.github.io-
Bump
versioninpubspec.yaml(on a branch + PR). -
Build the App Bundle with the release keystore (
android/key.properties, never committed):flutter build appbundle --release --flavor prod
-
Upload
build/app/outputs/bundle/prodRelease/app-prod-release.aabto the Play Console.
CI (.github/workflows/flutter.yml) runs formatting, analysis, tests and a coverage
floor on every PR and push to master. On v* tags or a manual dispatch, it also builds
a release APK (debug-signed, for QA only) and an unsigned iOS build. Nothing is
published to a store.
dev, staging and prod only change the app identity (applicationId suffix and
name), so they can be installed side by side:
flutter run --flavor deviOS has no flavor schemes; build it without --flavor.
- Maintainer: Noé Gnanih (@noeGnh)
Descriptive Statistics is free software by Netersoft.
- Code: the source code (
lib/,test/,tool/and the platform folders) is licensed under the GNU General Public License v3.0. - Content: the texts, translations and pictures made by Netersoft for the app are licensed under Creative Commons Attribution-ShareAlike 4.0.
- Third-party files keep their own licenses: the Montserrat, Open Sans and Noto Sans Greek fonts (SIL Open Font License 1.1,
assets/fonts/*/OFL.txt), and the KaTeX fonts thatflutter_math_forkrenders the course formulas with (MIT,assets/licenses/katex_fonts.txt, registered in the app's license list at startup). - Names and icons: the Netersoft name, the app names (Descriptive Statistics, Statistique Descriptive, Deskriptive Statistik, Estadística Descriptiva, Estatística Descritiva), and the app icons and logos (
assets/images/launcher/) are not covered by these licenses. A modified version must use another name and icon.
Copyright © 2018-2026 Netersoft.





