import 'package:fcs/domain/entities/package.dart'; import 'package:fcs/helpers/paginator.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_serach.dart'; import 'package:fcs/pages/widgets/local_popup_menu_button.dart'; import 'package:fcs/pages/widgets/local_popupmenu.dart'; import 'package:fcs/pages/widgets/local_text.dart'; import 'package:fcs/pages/widgets/progress.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; class PackageList extends StatefulWidget { final bool onlyFcs; const PackageList({Key key, this.onlyFcs = false}) : super(key: key); @override _PackageListState createState() => _PackageListState(); } class _PackageListState extends State { bool _isLoading = false; var _controller = ScrollController(); @override void initState() { super.initState(); _controller.addListener(() async { if (_controller.position.pixels == _controller.position.maxScrollExtent) { Provider.of(context, listen: false) .loadMore(isCustomer: !widget.onlyFcs); } }); } @override Widget build(BuildContext context) { var packageModel = Provider.of(context); bool onlyFcs = widget.onlyFcs; var packages = onlyFcs ? packageModel.packages : packageModel.customerPackages; final popupMenu = LocalPopupMenuButton( popmenus: [ LocalPopupMenu( id: 1, textKey: "package.popupmenu.active", selected: packageModel.selectedIndex == 1), LocalPopupMenu( id: 2, textKey: "package.popupmenu.delivered", selected: packageModel.selectedIndex == 2) ], popupMenuCallback: (p) => this.setState(() { packageModel.selectedIndex = p.id; }), ); return LocalProgress( inAsyncCall: _isLoading, child: Scaffold( appBar: AppBar( centerTitle: true, leading: new IconButton( icon: new Icon(CupertinoIcons.back), onPressed: () => Navigator.of(context).pop(), ), backgroundColor: primaryColor, title: LocalText( context, "package.title", fontSize: 20, color: Colors.white, ), actions: [ onlyFcs ? IconButton( icon: Icon( Icons.search, color: Colors.white, ), iconSize: 30, onPressed: () => searchPackage(context, callbackPackageSelect: _searchCallback), ) : Container(), popupMenu ], ), body: Column( children: [ Expanded( child: RefreshIndicator( child: ListView.separated( controller: _controller, separatorBuilder: (context, index) => Divider( color: Colors.black, ), scrollDirection: Axis.vertical, padding: EdgeInsets.only(top: 15), shrinkWrap: true, itemCount: packages.length, itemBuilder: (BuildContext context, int index) { return PackageListRow( key: ValueKey(packages[index].id), package: packages[index], ); }), onRefresh: () => packageModel.refresh(isCustomer: !widget.onlyFcs), ), ), packageModel.isLoading ? Container( padding: EdgeInsets.all(8), color: primaryColor, child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Text("Loading...", style: TextStyle(color: Colors.white)), ], ), ) : Container(), ], )), ); } _searchCallback(Package package) async { var packageModel = Provider.of(context, listen: false); Package _package = await packageModel.getPackage(package.id); if (_package == null) return; Navigator.push( context, CupertinoPageRoute(builder: (context) => PackageInfo(package: _package)), ); } }