From 8b8950a992741e13d634df750c03fe0c78f35942 Mon Sep 17 00:00:00 2001 From: jantunesmessias Date: Wed, 19 Feb 2025 10:43:20 -0300 Subject: [PATCH] WIP --- assets/files/document.pdf | Bin 35523 -> 0 bytes lib/features/documents/documents.dart | 37 +++--- lib/shared/widgets/enhanced_list_view.dart | 128 ++++++++++++------- lib/shared/widgets/enhanced_search_view.dart | 76 +++++++++++ 4 files changed, 177 insertions(+), 64 deletions(-) delete mode 100644 assets/files/document.pdf create mode 100644 lib/shared/widgets/enhanced_search_view.dart diff --git a/assets/files/document.pdf b/assets/files/document.pdf deleted file mode 100644 index 9a84c2fc28b6e3e4d6d04277044d9f10eee8d5af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35523 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 diff --git a/lib/features/documents/documents.dart b/lib/features/documents/documents.dart index 59bf9b22..f3c7ce6c 100644 --- a/lib/features/documents/documents.dart +++ b/lib/features/documents/documents.dart @@ -118,18 +118,25 @@ class DocumentManagerScreen extends StatelessScreen { } Widget buildBody(BuildContext context) { - final SizedBox space = SizedBox(height: 30); + const SizedBox space = SizedBox(height: 10); + final controller = EnhancedListViewController( + headerBuilder: model.itemHeaderBuilder, + bodyBuilder: model.itemBodyBuilder, + footerBuilder: model.itemFooterBuilder, + ); + final repository = EnhancedListViewRepository( + fetchHeader: model.generateHeaderItems, + fetchBody: model.generateBodyItems, + fetchFooter: model.generateFooterItems, + ); + return Column( children: [ Expanded( - child: EnhancedListView( + child: EnhancedListView( key: model.vehicleScreenManager, - headerBuilder: model.itemHeaderBuilder, - headerItems: model.generateHeaderItems, - bodyBuilder: model.itemBodyBuilder, - bodyItems: model.generateBodyItems, - footerBuilder: model.itemFooterBuilder, - footerItems: model.generateFooterItems, + controller: controller, + repository: repository, ), ), ] // @@ -235,7 +242,7 @@ class DocumentModel extends FlutterFlowModel { final DocumentPageBlocType bloc; DocumentModel(this.bloc); - late EnhancedListViewKey + late EnhancedListViewKey vehicleScreenManager; late DocumentKey vehicleScreenViewer; late PagingController _pagingController; @@ -247,7 +254,7 @@ class DocumentModel extends FlutterFlowModel { @override void initState(BuildContext context) { vehicleScreenManager = - EnhancedListViewKey(); + EnhancedListViewKey(); vehicleScreenViewer = DocumentKey(); _pagingController = PagingController(firstPageKey: 1); @@ -388,7 +395,7 @@ class DocumentModel extends FlutterFlowModel { /// [Header] - Widget itemHeaderBuilder( + Widget itemHeaderBuilder( Future> Function() generateHeaderItems) { return Builder(builder: (context) { final theme = FlutterFlowTheme.of(context); @@ -462,8 +469,8 @@ class DocumentModel extends FlutterFlowModel { }); } - Future> generateHeaderItems() async { - final Search item = Search(); + Future> generateHeaderItems() async { + final SearchField item = SearchField(); return [item] as List; } @@ -537,8 +544,8 @@ class DocumentPageBloc extends $DocumentPageBloc { abstract interface class Archive extends Entity {} -interface class Search extends Archive { - Search(); +interface class SearchField extends Archive { + SearchField(); } interface class Document extends Archive { diff --git a/lib/shared/widgets/enhanced_list_view.dart b/lib/shared/widgets/enhanced_list_view.dart index 66e62fbe..79f01caf 100644 --- a/lib/shared/widgets/enhanced_list_view.dart +++ b/lib/shared/widgets/enhanced_list_view.dart @@ -5,17 +5,19 @@ part of 'widgets.dart'; typedef EnhancedListViewKey = GlobalKey< EnhancedListViewState>; -typedef PaginatedListViewHeaderBuilder = Widget Function( +typedef HeaderTileBuilder = Widget Function( Future> Function() headerItems); -typedef PaginatedListViewBodyBuilder = Widget Function( +typedef BodyTileBuilder = Widget Function( BuildContext context, BodyType item, int index); -typedef PaginatedListViewFooterBuilder = Widget Function( +typedef FooterTileBuilder = Widget Function( Future> Function() footerItems); typedef Query = QueryType?; -typedef BodyItemsBuilder = Future> +typedef BodyRetrievalUseCase = Future> Function(int page, int pageSize, QueryType query); -typedef HeaderItemsBuilder = Future> Function(); -typedef FooterItemsBuilder = Future> Function(); +typedef HeaderRetrievalUseCase = Future> + Function(); +typedef FooterRetrievalUseCase = Future> + Function(); /// [Extensions] ---------------------------------------------------- extension PaginatedListMergeExtensions @@ -54,20 +56,20 @@ extension StreamStartWithExtension on Stream { } extension QueryBlocStreamExtensions on Stream { - Stream>> fetchData( - EnhancedListViewRepository repository, - PaginatedListViewBodyBuilder builder, - BehaviorSubject> paginatedList, - ) => - switchMap((reset) { - if (reset) { - paginatedList.add(paginatedList.value.resetAll()); - } - final nextPage = paginatedList.value.currentPage + 1; - return repository - .fetchPage(nextPage, paginatedList.value.pageSize, builder) - .asResultStream(); - }); + // Stream>> fetchData( + // EnhancedListViewRepository repository, + // PaginatedListViewBodyBuilder builder, + // BehaviorSubject> paginatedList, + // ) => + // switchMap((reset) { + // if (reset) { + // paginatedList.add(paginatedList.value.resetAll()); + // } + // final nextPage = paginatedList.value.currentPage + 1; + // return repository + // .fetchPage(nextPage, paginatedList.value.pageSize, builder) + // .asResultStream(); + // }); } /// [Interfaces] ---------------------------------------------------- @@ -167,21 +169,15 @@ mixin EnhancedListViewMixin { class EnhancedListView extends EnhancedListViewBase { - final BodyItemsBuilder bodyItems; - final PaginatedListViewBodyBuilder bodyBuilder; - final HeaderItemsBuilder? headerItems; - final PaginatedListViewHeaderBuilder? headerBuilder; - final FooterItemsBuilder? footerItems; - final PaginatedListViewFooterBuilder? footerBuilder; + final EnhancedListViewRepository + repository; + final EnhancedListViewController + controller; const EnhancedListView({ Key? key, - required this.bodyItems, - required this.bodyBuilder, - this.headerItems, - this.headerBuilder, - this.footerItems, - this.footerBuilder, + required this.repository, + required this.controller, }) : super(key: key); @override @@ -198,9 +194,9 @@ class EnhancedListViewState super.initState(); bloc = EnhancedListViewBloc( - bodyItemsBuilder: widget.bodyItems, - headerItemsBuilder: widget.headerItems ?? () async => [], - footerItemsBuilder: widget.footerItems ?? () async => [], + bodyItemsBuilder: widget.repository.fetchBody, + headerItemsBuilder: widget.repository.fetchHeader ?? () async => [], + footerItemsBuilder: widget.repository.fetchFooter ?? () async => [], ); bloc.events.loadBodyItems(); bloc.events.loadHeaderItems(); @@ -219,7 +215,8 @@ class EnhancedListViewState } else if (!headerSnapshot.hasData || headerSnapshot.data!.isEmpty) { return const SizedBox.shrink(); } else { - return widget.headerBuilder!(() async => headerSnapshot.data!); + return widget + .controller.headerBuilder!(() async => headerSnapshot.data!); } }, ); @@ -233,7 +230,8 @@ class EnhancedListViewState } else if (!footerSnapshot.hasData || footerSnapshot.data!.isEmpty) { return const SizedBox.shrink(); } else { - return widget.footerBuilder!(() async => footerSnapshot.data!); + return widget + .controller.footerBuilder!(() async => footerSnapshot.data!); } }, ); @@ -251,8 +249,8 @@ class EnhancedListViewState return ListView.builder( itemCount: bodySnapshot.data?.length ?? 0, itemBuilder: (context, index) { - return widget.bodyBuilder( - context, bodySnapshot.data![index], index); + return widget.controller + .bodyBuilder(context, bodySnapshot.data![index], index); }, ); } @@ -262,9 +260,9 @@ class EnhancedListViewState return Column( children: [ - if (widget.headerBuilder != null) header, + if (widget.controller.headerBuilder != null) header, body, - if (widget.footerBuilder != null) footer, + if (widget.controller.footerBuilder != null) footer, ], ); } @@ -340,15 +338,47 @@ class AuthorizationError implements Exception { AuthorizationError(this.message); } +/// [Repositories] ---------------------------------------------------- + +class EnhancedListViewRepository { + final BodyRetrievalUseCase fetchBody; + final HeaderRetrievalUseCase? fetchHeader; + final FooterRetrievalUseCase? fetchFooter; + + const EnhancedListViewRepository({ + required this.fetchBody, + this.fetchHeader, + this.fetchFooter, + }); +} + +// class HeaderRepository {} +// class BodyRepository {} +// class FooterRepository {} + +/// [Controllers] ---------------------------------------------------- + +class EnhancedListViewController { + final BodyTileBuilder bodyBuilder; + final HeaderTileBuilder? headerBuilder; + final FooterTileBuilder? footerBuilder; + + const EnhancedListViewController({ + required this.bodyBuilder, + this.headerBuilder, + this.footerBuilder, + }); +} + +// class HeaderController {} +// class BodyController {} +// class FooterController {} + /// [Blocs] ---------------------------------------------------- + Stream get loadingState => Stream.empty(); Stream get errorState => Stream.empty(); -abstract class EnhancedListViewRepository { - Future> fetchPage( - int page, int pageSize, PaginatedListViewBodyBuilder builder); -} - abstract class EnhancedListViewEvents { void loadBodyItems({bool reset = false, dynamic query = null}); @@ -390,9 +420,9 @@ class EnhancedListViewBloc .addTo(_compositeSubscription); } - final BodyItemsBuilder bodyItemsBuilder; - final HeaderItemsBuilder headerItemsBuilder; - final FooterItemsBuilder footerItemsBuilder; + final BodyRetrievalUseCase bodyItemsBuilder; + final HeaderRetrievalUseCase headerItemsBuilder; + final FooterRetrievalUseCase footerItemsBuilder; final _bodyItems = BehaviorSubject>.seeded([]); diff --git a/lib/shared/widgets/enhanced_search_view.dart b/lib/shared/widgets/enhanced_search_view.dart new file mode 100644 index 00000000..8733530a --- /dev/null +++ b/lib/shared/widgets/enhanced_search_view.dart @@ -0,0 +1,76 @@ +import 'package:flutter/material.dart'; + +class EnhancedSearchView extends StatelessWidget { + const EnhancedSearchView({super.key}); + + @override + Widget build(BuildContext context) { + final theme = FlutterFlowTheme.of(context); + final locale = FFLocalizations.of(context); + TextEditingController editingController = TextEditingController(); + return TextFormField( + controller: editingController, + onChanged: (value) => EasyDebounce.debounce( + '_model.keyTextFieldTextController', + const Duration(milliseconds: 500), + () => filterBySearchBar(Document.fromDesc(value), context), + ), + cursorColor: theme.primaryText, + showCursor: false, + cursorWidth: 2.0, + cursorRadius: Radius.circular(100), + style: TextStyle( + color: theme.primaryText, + fontSize: 16.0, + decorationColor: Colors.amber, + ), + keyboardType: TextInputType.text, + textInputAction: TextInputAction.search, + autocorrect: true, + textCapitalization: TextCapitalization.sentences, + decoration: InputDecoration( + prefixIcon: Icon(Icons.search, color: theme.primary), + labelText: locale.getVariableText( + ptText: 'Pesquisar', + enText: 'Search', + ), + labelStyle: TextStyle( + color: theme.primaryText, + fontSize: 16.0, + ), + hintText: locale.getVariableText( + ptText: 'Digite sua pesquisa', + enText: 'Enter your search', + ), + hintStyle: TextStyle( + color: theme.accent2, + fontSize: 14.0, + ), + filled: true, + fillColor: Colors.transparent, + helperStyle: TextStyle( + color: theme.primaryText, + decorationColor: theme.primaryText, + ), + focusColor: theme.primaryText, + contentPadding: EdgeInsets.symmetric(vertical: 10.0, horizontal: 15.0), + enabledBorder: UnderlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(15.0)), + borderSide: BorderSide(color: theme.primaryText), + ), + focusedBorder: UnderlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(15.0)), + borderSide: BorderSide(color: theme.primaryText), + ), + errorBorder: UnderlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(15.0)), + borderSide: BorderSide(color: theme.primaryText), + ), + focusedErrorBorder: UnderlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(15.0)), + borderSide: BorderSide(color: theme.primaryText, width: 2.0), + ), + ), + ); + } +}