A framework for building convergent cross-platform Nextcloud clients using Flutter.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

93 lines
2.0 KiB

part of '../neon_notes.dart';
abstract class NotesBlocEvents {
void createNote({
final String title = '',
final String category = '',
});
void updateNote(
final int id,
final String etag, {
final String? title,
final String? category,
final String? content,
final bool? favorite,
});
void deleteNote(final int id);
}
abstract class NotesBlocStates {
BehaviorSubject<Result<List<NextcloudNotesNote>>> get notes;
}
class NotesBloc extends InteractiveBloc implements NotesBlocEvents, NotesBlocStates {
NotesBloc(
this.options,
this.requestManager,
this.client,
) {
unawaited(refresh());
}
final NotesAppSpecificOptions options;
final RequestManager requestManager;
final NextcloudClient client;
@override
void dispose() {
unawaited(notes.close());
super.dispose();
}
@override
BehaviorSubject<Result<List<NextcloudNotesNote>>> notes = BehaviorSubject<Result<List<NextcloudNotesNote>>>();
@override
Future refresh() async {
await requestManager.wrapNextcloud<List<NextcloudNotesNote>, Iterable<NextcloudNotesNote>>(
client.id,
'notes-notes',
notes,
() async => client.notes.getNotes(),
(final response) => response.toList(),
);
}
@override
void createNote({final String title = '', final String category = ''}) {
wrapAction(
() async => client.notes.createNote(
title: title,
category: category,
),
);
}
@override
void deleteNote(final int id) {
wrapAction(() async => client.notes.deleteNote(id: id));
}
@override
void updateNote(
final int id,
final String etag, {
final String? title,
final String? category,
final String? content,
final bool? favorite,
}) {
wrapAction(
() async => client.notes.updateNote(
id: id,
title: title,
category: category,
content: content,
favorite: favorite ?? false ? 1 : 0,
ifMatch: '"$etag"',
),
);
}
}