4da36aa31d
Flutter Android client for FabledAssistant with: - Session-cookie auth via persistent cookie jar (Dio + cookie_jar) - OAuth/SSO login via in-app WebView (flutter_inappwebview) - Notes: list, detail (markdown render), create/edit - Tasks: list with status tabs, create/edit with priority - Chat: SSE streaming bubbles, conversation management - Quick Capture FAB for rapid note/task creation - Settings screen (change server URL, logout) - Android home screen widget → opens chat - Riverpod state management, go_router navigation Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
63 lines
2.2 KiB
Markdown
63 lines
2.2 KiB
Markdown
# Fabled — Android App
|
|
|
|
Native Android client for [FabledAssistant](https://github.com/yourusername/fabledassistant), a self-hosted AI productivity assistant.
|
|
|
|
## Features
|
|
|
|
- **Notes** — create, edit, and browse markdown notes
|
|
- **Tasks** — manage tasks with status (To Do / In Progress / Done) and priority
|
|
- **Chat** — streaming AI conversations with real-time SSE response display
|
|
- **Quick Capture** — FAB shortcut to create a note or task from anywhere
|
|
- **OAuth / SSO** — authenticates via your server's configured OIDC provider; local username/password login also supported if enabled on the server
|
|
- **Session persistence** — stays logged in across app restarts via a persistent cookie jar
|
|
- **Home screen widget** — tap to open the chat screen directly from the Android launcher
|
|
|
|
## Requirements
|
|
|
|
- A running [FabledAssistant](https://github.com/yourusername/fabledassistant) server (self-hosted)
|
|
- Android 5.0+ (API 21)
|
|
|
|
## Getting Started
|
|
|
|
### Prerequisites
|
|
|
|
- Flutter 3.x SDK
|
|
- Android Studio (for Android SDK and emulator)
|
|
- JDK 17
|
|
|
|
### Setup
|
|
|
|
```bash
|
|
flutter pub get
|
|
flutter run
|
|
```
|
|
|
|
On first launch, enter your FabledAssistant server URL (e.g. `https://fabled.example.com`) and sign in.
|
|
|
|
## Architecture
|
|
|
|
```
|
|
lib/
|
|
├── main.dart # Entry point; resolves async deps before runApp
|
|
├── app.dart # GoRouter + auth redirect guards + shell nav
|
|
├── core/
|
|
│ ├── constants.dart # Route name constants
|
|
│ └── exceptions.dart # AppException hierarchy
|
|
├── data/
|
|
│ ├── api/ # Dio HTTP layer (one class per resource)
|
|
│ ├── models/ # Plain Dart models with fromJson/toJson
|
|
│ └── repositories/ # Thin wrappers over API classes
|
|
└── providers/ # Riverpod providers (state + dependency wiring)
|
|
screens/ # Flutter UI screens
|
|
```
|
|
|
|
**Key packages:** `flutter_riverpod`, `go_router`, `dio` + `cookie_jar`, `flutter_inappwebview`, `flutter_markdown`
|
|
|
|
## Building a Release APK
|
|
|
|
```bash
|
|
flutter build apk --release
|
|
```
|
|
|
|
The signed APK will be at `build/app/outputs/flutter-apk/app-release.apk`.
|