A silent safety net against in-app data loss or DB corruption, with zero friction. Driven off the app lifecycle (startup + when hidden), it writes a sealed .tanemaki copy into the app's private storage once a week, keeping the newest 3 (rotating). Reuses the manual backup's encryption via the extracted ExportImportService.buildSealedBackup(); never throws, so a failed copy can't crash startup or backgrounding. Not registered on web (no file storage). Settings shows a quiet reassurance line with the date of the last automatic copy (localised via intl), hidden where no automatic backup exists.
137 lines
4.1 KiB
YAML
137 lines
4.1 KiB
YAML
name: tane
|
||
description: "Tanemaki — local-first, encrypted, decentralized traditional-seed inventory."
|
||
publish_to: 'none'
|
||
version: 0.1.0+1
|
||
|
||
environment:
|
||
sdk: ^3.11.5
|
||
|
||
resolution: workspace
|
||
|
||
dependencies:
|
||
flutter:
|
||
sdk: flutter
|
||
flutter_localizations:
|
||
sdk: flutter
|
||
|
||
commons_core:
|
||
path: ../../packages/commons_core
|
||
|
||
# State management (Cubit-first). Drift streams are the source of truth.
|
||
flutter_bloc: ^9.1.1
|
||
equatable: ^2.0.5
|
||
|
||
# Stream combinators (StreamGroup) for reactive multi-table reads.
|
||
async: ^2.11.0
|
||
|
||
# Encrypted local database. NOTE: do NOT add sqlite3_flutter_libs / drift_flutter
|
||
# — their bundled plain SQLite collides (same symbols) with SQLCipher and
|
||
# segfaults on desktop. SQLCipher is the only native sqlite provider here.
|
||
drift: ^2.28.0
|
||
sqlite3: ^2.7.5
|
||
sqlcipher_flutter_libs: ^0.6.5
|
||
|
||
# Dependency injection composition root.
|
||
get_it: ^8.0.3
|
||
|
||
# i18n (Weblate-friendly JSON per locale).
|
||
slang: ^4.7.0
|
||
slang_flutter: ^4.7.0
|
||
# ICU date/number formatting (locale-aware, never ad-hoc).
|
||
intl: ^0.20.2
|
||
|
||
# Secure key storage (OS keystore).
|
||
flutter_secure_storage: ^9.2.4
|
||
|
||
# Routing + media + paths.
|
||
go_router: ^14.6.2
|
||
image_picker: ^1.1.2
|
||
# On-device OCR (Tesseract, Apache-2.0/BSD) to suggest a name from a packet
|
||
# photo. Offline, no Google/cloud. Mobile-only; other platforms use a no-op.
|
||
flutter_tesseract_ocr: ^0.4.31
|
||
# Pure-Dart image preprocessing (grayscale/contrast/upscale) before OCR to
|
||
# lift accuracy on blurry packet photos.
|
||
image: ^4.3.0
|
||
# Save/open dialogs for the inventory export/import (MIT license).
|
||
file_picker: ^10.1.2
|
||
# Pure-Dart PDF generation (Apache-2.0) for the printable "what I share"
|
||
# catalog. No platform channels, so the whole flow is host-testable.
|
||
pdf: ^3.11.3
|
||
path: ^1.9.0
|
||
path_provider: ^2.1.5
|
||
|
||
cupertino_icons: ^1.0.8
|
||
material_symbols_icons: ^4.2951.0
|
||
url_launcher: ^6.3.2
|
||
package_info_plus: ^9.0.1
|
||
|
||
dev_dependencies:
|
||
flutter_test:
|
||
sdk: flutter
|
||
integration_test:
|
||
sdk: flutter
|
||
|
||
flutter_lints: ^6.0.0
|
||
build_runner: ^2.4.13
|
||
drift_dev: ^2.28.0
|
||
slang_build_runner: ^4.7.0
|
||
mocktail: ^1.0.4
|
||
flutter_launcher_icons: ^0.14.4
|
||
flutter_native_splash: ^2.4.7
|
||
|
||
# App launcher icon: a white sprout on brand green (#2F7D34) for strong
|
||
# contrast. Regenerate with: dart run flutter_launcher_icons
|
||
flutter_launcher_icons:
|
||
image_path: assets/icon.png
|
||
android: true
|
||
ios: true
|
||
remove_alpha_ios: true
|
||
adaptive_icon_background: "#2F7D34"
|
||
adaptive_icon_foreground: assets/icon_foreground.png
|
||
web:
|
||
generate: true
|
||
image_path: assets/icon.png
|
||
background_color: "#2F7D34"
|
||
theme_color: "#2F7D34"
|
||
windows:
|
||
generate: true
|
||
image_path: assets/icon.png
|
||
icon_size: 256
|
||
|
||
# Native splash: white sprout on brand green, a darker green in dark mode.
|
||
# Regenerate with: dart run flutter_native_splash:create
|
||
flutter_native_splash:
|
||
color: "#2F7D34"
|
||
color_dark: "#22521E"
|
||
image: assets/splash_logo.png
|
||
android_12:
|
||
image: assets/splash_logo.png
|
||
color: "#2F7D34"
|
||
color_dark: "#22521E"
|
||
|
||
flutter:
|
||
uses-material-design: true
|
||
# Seed strings for slang live under lib/i18n (not a Flutter asset; compiled).
|
||
assets:
|
||
- assets/catalog/species.json
|
||
- assets/logo.png
|
||
# Bundled so the Linux runner can use it as the GTK window icon.
|
||
- assets/icon.png
|
||
# Tesseract OCR language data (tessdata_fast: eng + spa). Bundled for
|
||
# offline, on-device label OCR on mobile.
|
||
- assets/tessdata/
|
||
- assets/tessdata_config.json
|
||
# Real packet photos for the on-device OCR validation integration test.
|
||
# Remove before shipping if you don't want them in the bundle.
|
||
- assets/ocr_fixtures/
|
||
# Embedded in generated PDFs (printable catalog). DejaVu covers Latin
|
||
# (extended), Cyrillic and Greek; like the OCR packs, PDF fonts are a
|
||
# per-locale resource — swap in wider coverage (Arabic, CJK) as locales
|
||
# land. Free license (Bitstream Vera / public domain additions).
|
||
- assets/fonts/DejaVuSans.ttf
|
||
- assets/fonts/DejaVuSans-Bold.ttf
|
||
fonts:
|
||
# Custom seed-themed icon glyphs (chars a–k). See docs/mockups/seedks-glyphs.png.
|
||
- family: seedks
|
||
fonts:
|
||
- asset: fonts/seedks.ttf
|