Interchange export/import for Phase 1 (data-model §7): - JSON: canonical, versioned envelope (formatVersion 1) with all sync metadata verbatim, photos embedded as base64, tombstones excluded. Species are re-resolved on import by scientific name (catalog ids are per-install). Reader tolerates unknown fields/enum values (§5.2) and rejects newer format versions with a clear error. - CSV: export-only spreadsheet flatten, one row per lot, RFC 4180 escaping, never any photo bytes. - Import merges by UUIDv7 id in one transaction: insert-if-unknown preserving original stamps, last-writer-wins by packed HLC for known mutable rows, append-only movements; afterwards the local clock receiveEvent()s the newest imported stamp so it never runs behind. - Settings gains a Backup section (export CSV/JSON, import JSON with confirmation); file dialogs behind a FileService interface backed by file_picker (MIT). - Tests: codec round-trip and tolerance, reconciler LWW, repository export→import round-trip (fresh DB, idempotent re-import, newer-local wins, clock monotonicity, species re-resolution), backup widget flows.
109 lines
2.8 KiB
YAML
109 lines
2.8 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
|
||
|
||
# Secure key storage (OS keystore).
|
||
flutter_secure_storage: ^9.2.4
|
||
|
||
# Routing + media + paths.
|
||
go_router: ^14.6.2
|
||
image_picker: ^1.1.2
|
||
# Save/open dialogs for the inventory export/import (MIT license).
|
||
file_picker: ^10.1.2
|
||
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"
|
||
|
||
# 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
|
||
fonts:
|
||
# Custom seed-themed icon glyphs (chars a–k). See docs/mockups/seedks-glyphs.png.
|
||
- family: seedks
|
||
fonts:
|
||
- asset: fonts/seedks.ttf
|