mirror of
https://github.com/Xevion/paperless-mobile.git
synced 2026-01-31 12:24:58 -06:00
feat: extract snippets into widgets, code cleanup document details
This commit is contained in:
+2
-4
@@ -1,17 +1,15 @@
|
||||
import 'dart:developer';
|
||||
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:paperless_api/paperless_api.dart';
|
||||
import 'package:paperless_mobile/core/notifier/document_changed_notifier.dart';
|
||||
|
||||
import 'model/paged_documents_state.dart';
|
||||
import 'paged_documents_state.dart';
|
||||
|
||||
///
|
||||
/// Mixin which can be used on cubits that handle documents.
|
||||
/// This implements all paging and filtering logic.
|
||||
///
|
||||
mixin PagedDocumentsMixin<State extends PagedDocumentsState>
|
||||
mixin DocumentPagingBlocMixin<State extends DocumentPagingState>
|
||||
on BlocBase<State> {
|
||||
PaperlessDocumentsApi get api;
|
||||
DocumentChangedNotifier get notifier;
|
||||
+2
-2
@@ -5,13 +5,13 @@ import 'package:paperless_api/paperless_api.dart';
|
||||
/// Base state for all blocs/cubits using a paged view of documents.
|
||||
/// [T] is the return type of the API call.
|
||||
///
|
||||
abstract class PagedDocumentsState extends Equatable {
|
||||
abstract class DocumentPagingState extends Equatable {
|
||||
final bool hasLoaded;
|
||||
final bool isLoading;
|
||||
final List<PagedSearchResult<DocumentModel>> value;
|
||||
final DocumentFilter filter;
|
||||
|
||||
const PagedDocumentsState({
|
||||
const DocumentPagingState({
|
||||
this.value = const [],
|
||||
this.hasLoaded = false,
|
||||
this.isLoading = false,
|
||||
@@ -0,0 +1,43 @@
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:paperless_api/paperless_api.dart';
|
||||
import 'package:paperless_mobile/features/paged_document_view/cubit/document_paging_bloc_mixin.dart';
|
||||
import 'package:paperless_mobile/helpers/message_helpers.dart';
|
||||
import 'package:paperless_mobile/features/inbox/cubit/inbox_cubit.dart';
|
||||
|
||||
mixin DocumentPagingViewMixin<T extends StatefulWidget> on State<T> {
|
||||
ScrollController get pagingScrollController;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
pagingScrollController.addListener(shouldLoadMoreDocumentsListener);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
pagingScrollController.removeListener(shouldLoadMoreDocumentsListener);
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
DocumentPagingBlocMixin get _bloc => context.read<DocumentPagingBlocMixin>();
|
||||
|
||||
void shouldLoadMoreDocumentsListener() async {
|
||||
if (shouldLoadMoreDocuments) {
|
||||
try {
|
||||
await _bloc.loadMore();
|
||||
} on PaperlessServerException catch (error, stackTrace) {
|
||||
showErrorMessage(context, error, stackTrace);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool get shouldLoadMoreDocuments {
|
||||
final currState = _bloc.state;
|
||||
return pagingScrollController.position.maxScrollExtent != 0 &&
|
||||
!currState.isLoading &&
|
||||
!currState.isLastPageLoaded &&
|
||||
pagingScrollController.offset >=
|
||||
pagingScrollController.position.maxScrollExtent * 0.75;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user