feat: extract snippets into widgets, code cleanup document details

This commit is contained in:
Anton Stubenbord
2023-02-11 16:37:51 +01:00
parent 45684010d6
commit a10c6efb00
29 changed files with 460 additions and 412 deletions

View File

@@ -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;
}
}