3.6 KiB
3.6 KiB
Enil (line)
Enil is a Flutter-based timeline app for project management and life recording.
It focuses on local-first data ownership (SQLite), rich media records (images, music, comments), and share-ready visual exports.
Current Status
The project is in an active MVP-to-v1 stabilization phase:
- Core user flows are implemented: project management, timeline recording, tag management, statistics, theming, backup/restore.
- A recent consistency fix aligned search/sort behavior across project and timeline views.
- Test coverage is still minimal and currently includes only the default Flutter widget test scaffold.
Feature Overview
1. Project Management
- Create, edit, delete projects
- Search projects by title, description, and tags
- Sort by created time / updated time / title (ascending or descending)
- Export single project and project list as styled images
2. Timeline & Records
- Per-project timeline with chronological sort toggle
- Add, edit, delete records
- Record details with images, tags, optional music booth data
- Comments under records (text, images, emoji)
- Timeline and record image export workflows
3. Tags
- Hierarchical tag support (parent/child)
- Tag search, create, edit, delete
- Project-tag and record-tag association
4. Home & Insights
- Home dashboard with greeting, profile card, daily quote, random project card, and time progress cards
- Statistics page for project count, active project count, total record count, tag count, and time-based summaries
5. Settings & Data Safety
- Theme mode: light / dark / system
- Interface style switching (custom action area vs bottom tab style)
- Custom font import/removal
- Backup to ZIP and restore from ZIP (database + images)
- Data cleanup options (clear images, data optimization, clear local data)
Architecture
- Framework: Flutter (Material + Cupertino components)
- State management:
provider - Local persistence:
sqflite+shared_preferences - File/media tooling:
image_picker,file_picker,widgets_to_image,image_gallery_saver_plus - Networking/audio utilities available in codebase (
dio,audioplayers,record)
Core layers:
lib/models: domain entitieslib/services: database, backup, profile, quote serviceslib/viewmodels: state + business logiclib/views: UI pages and flowslib/widgets: reusable UI components
Runtime Notes
- Locale is currently fixed to Simplified Chinese (
zh_CN) inmain.dart. - Primary app title shown in UI:
Enil. - App version in
pubspec.yaml:1.0.0+1.
Prerequisites
- Flutter SDK compatible with
pubspec.yaml(sdk: ^3.7.2) - Recommended local toolchain (from
.fvmrc): Flutter3.35.0 - Xcode (for iOS), Android SDK/Studio (for Android)
Quick Start
Using FVM (recommended)
fvm install
fvm flutter pub get
fvm flutter run
Without FVM
flutter pub get
flutter run
Build
# Android APK
flutter build apk
# iOS (requires macOS + Xcode setup)
flutter build ios
Known Gaps
- Automated testing is not yet aligned with the current app behavior.
- Some settings sub-pages exist in codebase but are not fully wired into the primary settings navigation.
- Repository documentation beyond this README is still limited.
Suggested Next Engineering Steps
- Replace default widget test with real flow tests for project/timeline CRUD and sort/search behavior.
- Add a lightweight release and changelog process (version bump + release notes template).
- Standardize localization strategy if multi-language support is planned.