add paginator

This commit is contained in:
Sai Naw Wun
2020-10-16 10:58:31 +06:30
parent bcbcfd71ee
commit 0abe4ef73f
29 changed files with 953 additions and 703 deletions

View File

@@ -15,17 +15,28 @@ import 'shipment_editor.dart';
import 'shipment_list_row.dart';
class ShipmentList extends StatefulWidget {
final bool forCustomer;
const ShipmentList({Key key, this.forCustomer = true}) : super(key: key);
@override
_ShipmentListState createState() => _ShipmentListState();
}
class _ShipmentListState extends State<ShipmentList> {
bool _isLoading = false;
bool _showDelivered = false;
var _controller = ScrollController();
@override
void initState() {
super.initState();
_controller.addListener(() async {
if (_controller.position.pixels == _controller.position.maxScrollExtent) {
Provider.of<ShipmentModel>(context, listen: false)
.loadMore(isCustomer: widget.forCustomer);
}
});
Provider.of<ShipmentModel>(context, listen: false).initData(false);
}
@override
@@ -35,7 +46,7 @@ class _ShipmentListState extends State<ShipmentList> {
@override
Widget build(BuildContext context) {
var pickupModel = Provider.of<ShipmentModel>(context);
ShipmentModel shipmentModel = Provider.of<ShipmentModel>(context);
final popupMenu = LocalPopupMenuButton(
popmenus: [
LocalPopupMenu(
@@ -43,7 +54,7 @@ class _ShipmentListState extends State<ShipmentList> {
LocalPopupMenu(id: 2, textKey: "shipment.popupmenu.delivered")
],
popupMenuCallback: (p) => this.setState(() {
_showDelivered = p.id == 2;
shipmentModel.menuSelectedIndex = p.id;
}),
);
return LocalProgress(
@@ -72,25 +83,53 @@ class _ShipmentListState extends State<ShipmentList> {
popupMenu
],
),
floatingActionButton: FloatingActionButton.extended(
onPressed: () {
_newPickup();
},
icon: Icon(Icons.add),
label: LocalText(context, "shipment.new", color: Colors.white),
backgroundColor: primaryColor,
floatingActionButton: shipmentModel.menuSelectedIndex == 1
? FloatingActionButton.extended(
onPressed: () {
_newPickup();
},
icon: Icon(Icons.add),
label:
LocalText(context, "shipment.new", color: Colors.white),
backgroundColor: primaryColor,
)
: Container(),
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: shipmentModel.shipments.length,
itemBuilder: (BuildContext context, int index) {
return ShipmentListRow(
pickUp: shipmentModel.shipments[index]);
}),
onRefresh: () =>
shipmentModel.refresh(isCustomer: widget.forCustomer),
),
),
shipmentModel.isLoading
? Container(
padding: EdgeInsets.all(8),
color: primaryColor,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text("Loading...",
style: TextStyle(color: Colors.white)),
],
),
)
: Container(),
],
),
body: new ListView.separated(
separatorBuilder: (context, index) => Divider(
color: Colors.black,
),
scrollDirection: Axis.vertical,
padding: EdgeInsets.only(top: 15),
shrinkWrap: true,
itemCount: pickupModel.pickups.length,
itemBuilder: (BuildContext context, int index) {
return ShipmentListRow(pickUp: pickupModel.pickups[index]);
}),
),
),
);