import 'package:flutter/material.dart'; import 'package:infinite_scroll_pagination/infinite_scroll_pagination.dart'; import 'package:intl/intl.dart'; import 'package:satu/core/services/buy_service.dart'; import 'package:satu/core/utils/utils_parse.dart'; import '../../../../core/models/buy_invoice/buy_invoice_response.dart'; import '../../../../core/services/navigator_service.dart'; import '../../../../core/utils/locator.dart'; import '../../../../routes/route_names.dart'; import '../../../../shared/app_colors.dart'; import '../../../../shared/shared_styles.dart'; import '../../../../shared/ui_helpers.dart'; import '../../../../widgets/bar/products_app_bar.dart'; import '../../../dictionaries/component/dictionary_list_tile.dart'; import '../../../inventarization/widget/inventarization_list_tile.dart'; class BuyView extends StatefulWidget { @override State createState() => _BuyViewState(); } class _BuyViewState extends State { final BuyService _service = locator(); final NavigatorService _navigatorService = locator(); static const _pageSize = 20; final PagingController _pagingController = PagingController(firstPageKey: 1); final DateFormat formatterDay = DateFormat('dd.MM.yyyy'); @override void initState() { _pagingController.addPageRequestListener((pageKey) { _fetchData(pageKey, _pageSize); }); super.initState(); } @override void dispose() { _pagingController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( appBar: const ProductsAppBar( title: 'Накладные покупок', drawerShow: true, ), body: Column( children: [ Expanded( child: PagedListView.separated( physics: const BouncingScrollPhysics(), separatorBuilder: (BuildContext context, int index) { return const Divider( height: 1.0, color: disableColor, ); }, pagingController: _pagingController, builderDelegate: PagedChildBuilderDelegate( itemBuilder: (BuildContext context, BuyInvoiceResponse item, int index) { return DictionaryTile( key: Key('category_${item.id}'), onPress: () async { final dynamic result = await _navigatorService .push(buyEditRoute, arguments: item); if (result != null && true == (result as bool)) { _pagingController.refresh(); } }, child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Expanded( flex: 2, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( '${item.name}', style: textBlack12Style, ), SizedBox( height: 5.0, ), Text( 'Номер: ${item.docNumber.toString()}', style: textGray11Style, ), ], )), Expanded( flex: 2, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( '${formatterDay.format(item.invoiceDate)}', style: textBlack12Style, ), SizedBox( height: 5.0, ), Text( 'Статус: ${item.refBuyInvoiceStatusId == 1 ? 'Новая' : 'Обработана'}', style: textGray11Style, ), ], ), ), Expanded( flex: 1, child: Column( children: [ Text( '${formatDecimal(item.summ ?? 0)} т.', style: textGray11Style, ), ], ), ), ], ), ); }, ), ), ) ], ), floatingActionButton: FloatingActionButton( onPressed: () async { final dynamic result = await _navigatorService.push(buyAddRoute); if (result != null && true == (result as bool)) { _pagingController.refresh(); } }, mini: true, child: const Icon(Icons.add), ), ); } Future _fetchData(int pageKey, int perPage) async { final List newItems = await _service.getList(page: pageKey, perpage: perPage); final isLastPage = newItems.length < _pageSize; if (isLastPage) { _pagingController.appendLastPage(newItems); } else { final nextPageKey = pageKey + 1; _pagingController.appendPage(newItems, nextPageKey); } } }