Files

3.6 KiB

Enil (line)

English | 简体中文

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 entities
  • lib/services: database, backup, profile, quote services
  • lib/viewmodels: state + business logic
  • lib/views: UI pages and flows
  • lib/widgets: reusable UI components

Runtime Notes

  • Locale is currently fixed to Simplified Chinese (zh_CN) in main.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): Flutter 3.35.0
  • Xcode (for iOS), Android SDK/Studio (for Android)

Quick Start

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

  1. Replace default widget test with real flow tests for project/timeline CRUD and sort/search behavior.
  2. Add a lightweight release and changelog process (version bump + release notes template).
  3. Standardize localization strategy if multi-language support is planned.