2a35fe5532
- Collapsible search in notes and tasks: magnifying glass in AppBar expands to a text field inline; close button resets the filter - Offline capture queue: failed quick-captures (NetworkException) are persisted to SharedPreferences and retried automatically on next successful submit or app start; badge shows pending count - App icon: book-with-sparkle logo from FabledAssistant SVG rendered at all Android densities with adaptive icon (indigo #6366f1 bg) - Dark mode subtitle fix: use colorScheme.onSurfaceVariant for note preview and conversation timestamp text - Remove swipe-to-delete (accidental deletions); long-press remains - Chat: SSE streaming reliability, polling fallback, title patching - Settings: theme toggle (system/light/dark) persisted to prefs - Notes: delete button in edit screen; body preview in list - Tasks: fix delete dialog context; description search support Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
50 lines
1.3 KiB
Dart
50 lines
1.3 KiB
Dart
import 'package:dio/dio.dart';
|
|
|
|
import 'api_client.dart';
|
|
|
|
/// Result returned by POST /api/quick-capture.
|
|
/// type is one of: "note", "task", "event", "todo"
|
|
class CaptureResult {
|
|
final String type;
|
|
final String message; // human-readable summary from the server
|
|
final bool fallback; // true when the server used a note as a fallback
|
|
final int? id;
|
|
final String title;
|
|
|
|
const CaptureResult({
|
|
required this.type,
|
|
required this.message,
|
|
this.fallback = false,
|
|
this.id,
|
|
required this.title,
|
|
});
|
|
|
|
factory CaptureResult.fromJson(Map<String, dynamic> json) {
|
|
final data = json['data'] as Map<String, dynamic>? ?? {};
|
|
return CaptureResult(
|
|
type: json['type'] as String? ?? 'note',
|
|
message: json['message'] as String? ?? '',
|
|
fallback: json['fallback'] as bool? ?? false,
|
|
id: data['id'] as int?,
|
|
title: data['title'] as String? ?? '',
|
|
);
|
|
}
|
|
}
|
|
|
|
class QuickCaptureApi {
|
|
final Dio _dio;
|
|
const QuickCaptureApi(this._dio);
|
|
|
|
Future<CaptureResult> capture(String text) async {
|
|
try {
|
|
final response = await _dio.post(
|
|
'/api/quick-capture',
|
|
data: {'text': text},
|
|
);
|
|
return CaptureResult.fromJson(response.data as Map<String, dynamic>);
|
|
} on DioException catch (e) {
|
|
throw dioToApp(e);
|
|
}
|
|
}
|
|
}
|