// ignore_for_file: use_build_context_synchronously import 'package:fcs/domain/entities/package.dart'; import 'package:fcs/helpers/theme.dart'; import 'package:fcs/pages/package/model/package_model.dart'; import 'package:fcs/pages/package/package_info.dart'; import 'package:fcs/pages/package/package_list_row.dart'; import 'package:fcs/pages/package_search/package_search.dart'; import 'package:fcs/pages/widgets/local_app_bar.dart'; import 'package:fcs/pages/widgets/local_popup_menu_button.dart'; import 'package:fcs/domain/vo/local_popupmenu.dart'; import 'package:fcs/pages/widgets/progress.dart'; import 'package:fcs/pagination/paginator_listview.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; class PackageList extends StatefulWidget { final bool forCustomer; const PackageList({super.key, this.forCustomer = true}); @override _PackageListState createState() => _PackageListState(); } class _PackageListState extends State { bool isLoading = false; int _selectedIndexForCustomer = 1; int _selectedIndex = 0; @override void initState() { _init(); super.initState(); } _init() { var model = context.read(); if (widget.forCustomer) { _selectedIndexForCustomer = model.selectedIndexForCustomer; model.initDataForCustomer(_selectedIndexForCustomer); } else { _selectedIndex = model.selectedIndex; model.initData(_selectedIndex); } if (mounted) { setState(() {}); } } @override Widget build(BuildContext context) { var packageModel = Provider.of(context); var packages = widget.forCustomer ? packageModel.customerPackages : packageModel.packages; final popupMenu = LocalPopupMenuButton( popmenus: [ LocalPopupMenu( id: 1, textKey: "package.popupmenu.active", selected: packageModel.selectedIndexForCustomer == 1), LocalPopupMenu( id: 2, textKey: "package.popupmenu.delivered", selected: packageModel.selectedIndexForCustomer == 2) ], popupMenuCallback: (p) { setState(() { _selectedIndexForCustomer = p.id; }); context .read() .onChangedForCustomer(_selectedIndexForCustomer); }); return LocalProgress( inAsyncCall: isLoading, child: Scaffold( appBar: LocalAppBar( labelKey: 'package.title', actions: [ widget.forCustomer ? Container() : IconButton( icon: Icon( Icons.search, color: Colors.white, ), iconSize: 30, onPressed: () => searchPackage(context, callbackPackageSelect: _searchCallback)), widget.forCustomer ? popupMenu : _menuFilteringWidget(context) ], ), body: PaginatorListView( paginatorListener: packages!, rowBuilder: (p) => PackageListRow(package: p, isCustomer: widget.forCustomer), color: primaryColor, )), ); } _searchCallback(Package package) async { var packageModel = Provider.of(context, listen: false); Package? package0 = await packageModel.getPackage(package.id!); if (package0 == null) return; Navigator.push( context, CupertinoPageRoute(builder: (context) => PackageInfo(package: package0)), ); } Widget _menuFilteringWidget(BuildContext context) { return Padding( padding: const EdgeInsets.only(right: 5), child: PopupMenuButton( elevation: 3.2, tooltip: '', onSelected: (choice) async { setState(() { _selectedIndex = choice.id; }); await context.read().onChanged(choice.id); }, icon: SizedBox( width: 30, height: 30, child: Stack( alignment: Alignment.center, children: [ const Icon( Icons.filter_list, color: Colors.white, ), _selectedIndex != 0 ? Positioned( bottom: 15, right: 0, child: Container( width: 10, height: 10, decoration: const BoxDecoration( shape: BoxShape.circle, color: Colors.red, ), ), ) : Container() ], ), ), itemBuilder: (BuildContext context) { return packageFiteringMenu.map((LocalPopupMenu choice) { return PopupMenuItem( value: choice, child: Row( children: [ Flexible( child: Text("${choice.text}", style: TextStyle(color: Colors.black))), const SizedBox( width: 10, ), _selectedIndex == choice.id ? const Icon( Icons.check, color: Colors.grey, ) : const SizedBox(), ], ), ); }).toList(); }), ); } }