pagination fixes and

design_3.0_asset_inventory_module
WaseemAbbasi22 3 weeks ago
parent d3c000004e
commit f83109d5ca

@ -38,7 +38,7 @@ class Department extends Base {
String? departmentCode; // Now nullable String? departmentCode; // Now nullable
dynamic departmentId; // Now nullable dynamic departmentId; // Now nullable
String? ntCode; // Now nullable String? ntCode; // Now nullable
List<Rooms>? rooms; // Now nullable List<Rooms>? rooms=[]; // Now nullable
Department copyWith({ Department copyWith({
num? id, // Parameters are now nullable num? id, // Parameters are now nullable

@ -426,7 +426,7 @@ class _AssetInventoryFormViewState extends State<AssetInventoryFormView> {
_scannedAssetModel?.photo = fileName; _scannedAssetModel?.photo = fileName;
} }
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
assetInventoryProvider.saveAssetInSession(model: _scannedAssetModel).then((success) { assetInventoryProvider.saveAssetInSession(model: _scannedAssetModel).then((success) async{
///Need to use push and remove until... ///Need to use push and remove until...
Navigator.pop(context); Navigator.pop(context);
if (success) { if (success) {
@ -436,12 +436,14 @@ class _AssetInventoryFormViewState extends State<AssetInventoryFormView> {
AllRequestsProvider allRequestsProvider = Provider.of<AllRequestsProvider>(context, listen: false); AllRequestsProvider allRequestsProvider = Provider.of<AllRequestsProvider>(context, listen: false);
allRequestsProvider.reset(); allRequestsProvider.reset();
allRequestsProvider.getAllRequests(context, typeTransaction: 8); allRequestsProvider.getAllRequests(context, typeTransaction: 8);
Navigator.pushReplacement( getAssetFilteredList();
context, Navigator.pop(context);
MaterialPageRoute( // Navigator.pushReplacement(
builder: (contxt) => SiteInformationPage( // context,
sessionModel: SessionModel(id: int.tryParse(widget.assetInventoryModel?.sessionId?.toString() ?? '') ?? 0), // MaterialPageRoute(
))); // builder: (contxt) => SiteInformationPage(
// sessionModel: SessionModel(id: int.tryParse(widget.assetInventoryModel?.sessionId?.toString() ?? '') ?? 0),
// )));
} else { } else {
log('api error...'); log('api error...');
} }
@ -459,4 +461,21 @@ class _AssetInventoryFormViewState extends State<AssetInventoryFormView> {
_remarksController.clear(); _remarksController.clear();
registeredController?.dispose(); registeredController?.dispose();
} }
Future<void> getAssetFilteredList({bool loadMore = false}) async {
AssetInventoryProvider provider = Provider.of<AssetInventoryProvider>(context, listen: false);
Map<String, dynamic> payload = {
"sessionId": widget.assetInventoryModel?.sessionId,
"siteId": widget.assetInventoryModel?.site?.id,
"buildingId": widget.assetInventoryModel?.building?.id,
"floorId": widget.assetInventoryModel?.floor?.id,
"departmentId": widget.assetInventoryModel?.department?.id,
"roomId": widget.assetInventoryModel?.room?.id,
};
await provider.getInventoryDetailsByFilter(payload: payload, loadMore: loadMore);
provider.getAssetsInSession(
sessionId: (widget.assetInventoryModel?.sessionId ?? 0).toInt(),
);
}
} }

@ -40,10 +40,17 @@ class SiteInformationPage extends StatefulWidget {
class _SiteInformationPageState extends State<SiteInformationPage> { class _SiteInformationPageState extends State<SiteInformationPage> {
AssetInventoryModel assetInventoryModel = AssetInventoryModel(); AssetInventoryModel assetInventoryModel = AssetInventoryModel();
bool showMarkAsComplete = false; bool showMarkAsComplete = false;
final ScrollController _scrollController = ScrollController();
@override @override
void initState() { void initState() {
super.initState(); super.initState();
_scrollController.addListener(() {
final provider = Provider.of<AssetInventoryProvider>(context, listen: false);
if (_scrollController.position.pixels >= _scrollController.position.maxScrollExtent && !provider.isNextPageLoading && provider.nextPage) {
getAssetFilteredList(loadMore: true);
}
});
} }
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>(); final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
@ -51,55 +58,48 @@ class _SiteInformationPageState extends State<SiteInformationPage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
key: _scaffoldKey, key: _scaffoldKey,
appBar: DefaultAppBar( appBar: DefaultAppBar(
title: 'Inventory Session Request'.addTranslation, title: 'Inventory Session Request'.addTranslation,
titleStyle: AppTextStyles.heading3.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), titleStyle: AppTextStyles.heading3.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
), ),
body: Column( body: Column(
children: [ children: [
ListView( ListView(
padding: const EdgeInsets.only(left: 16, right: 16, top: 16), controller: _scrollController,
padding: const EdgeInsets.only(left: 16, right: 16, top: 16),
children: [
siteInfoCard(context, widget.sessionModel),
12.height,
assetDetailList(),
8.height,
],
).expanded,
FooterActionButton.footerContainer(
context: context,
child: Column(
children: [ children: [
siteInfoCard(context, widget.sessionModel), AppFilledButton(
12.height, buttonColor: AppColor.primary10,
assetDetailList(), label: 'Add Asset'.addTranslation,
8.height, onPressed: () => _addAsset(),
], // buttonColor: AppColor.primary10,
).expanded, ),
FooterActionButton.footerContainer( if (showMarkAsComplete) ...[
context: context, 12.height,
child: Column(
children: [
AppFilledButton( AppFilledButton(
buttonColor: AppColor.primary10, buttonColor: AppColor.green70,
label: 'Add Asset'.addTranslation, label: 'Mark as completed'.addTranslation,
onPressed: () => _addAsset(), onPressed: () => _markAsCompleted(),
// buttonColor: AppColor.primary10, // buttonColor: AppColor.primary10,
), )
if (showMarkAsComplete) ...[ ]
12.height, ],
AppFilledButton(
buttonColor: AppColor.green70,
label: 'Mark as completed'.addTranslation,
onPressed: () => _markAsCompleted(),
// buttonColor: AppColor.primary10,
)
]
],
),
), ),
// FooterActionButton.footerContainer( ),
// context: context, ],
// child: AppFilledButton( ),
// buttonColor: AppColor.green70, );
// label: 'Mark as completed'.addTranslation,
// onPressed: () => _markAsCompleted(),
// // buttonColor: AppColor.primary10,
// ),
// ),
],
));
} }
void _addAsset() async { void _addAsset() async {
@ -130,7 +130,6 @@ class _SiteInformationPageState extends State<SiteInformationPage> {
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
await provider.markAsComplete(payload: payload).then((success) { await provider.markAsComplete(payload: payload).then((success) {
Navigator.pop(context); Navigator.pop(context);
log('success $success');
if (success) { if (success) {
///TODO need to confirm need to call this or not .. ///TODO need to confirm need to call this or not ..
// AllRequestsProvider allRequestsProvider = Provider.of<AllRequestsProvider>(context, listen: false); // AllRequestsProvider allRequestsProvider = Provider.of<AllRequestsProvider>(context, listen: false);
@ -148,38 +147,32 @@ class _SiteInformationPageState extends State<SiteInformationPage> {
return Consumer<AssetInventoryProvider>( return Consumer<AssetInventoryProvider>(
builder: (context, provider, _) { builder: (context, provider, _) {
if (provider.isLoading) { if (provider.isLoading) {
return SizedBox(height: 300.toScreenHeight, child: const CircularProgressIndicator(color: AppColor.primary10).center); return SizedBox(
height: 300.toScreenHeight,
child: const CircularProgressIndicator(color: AppColor.primary10).center,
);
} }
final assets = provider.siteFilterAssetList; final assets = provider.siteFilterAssetList;
return NotificationListener<ScrollNotification>( return ListView.separated(
onNotification: (scrollInfo) { shrinkWrap: true,
if (!provider.isNextPageLoading && provider.nextPage && scrollInfo.metrics.pixels == scrollInfo.metrics.maxScrollExtent) { physics: const NeverScrollableScrollPhysics(),
getAssetFilteredList(loadMore: true); // Keep non-scrollable, parent handles scroll
} itemCount: assets.length,
return false; itemBuilder: (context, index) {
return AssetDetailCardView(
assetInventoryModel: assets[index],
onDeletePress: () async {
await provider.deleteAssetISession(id: assets[index].id ?? 0).then((success) async {
if (success) {
await getAssetFilteredList();
await provider.getAssetsInSession(sessionId: widget.sessionModel.id ?? 0);
}
});
},
);
}, },
child: ListView.separated( separatorBuilder: (context, index) => 12.height,
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
itemBuilder: (context, index) {
return AssetDetailCardView(
assetInventoryModel: assets[index],
onDeletePress: () async {
log('Delete icon press');
await provider.deleteAssetISession(id: assets[index].id ?? 0).then((success) async {
if (success) {
await getAssetFilteredList();
await provider.getAssetsInSession(
sessionId: widget.sessionModel.id ?? 0,
);
}
});
},
);
},
separatorBuilder: (context, index) => 12.height,
itemCount: assets.length,
),
); );
}, },
); );
@ -253,7 +246,9 @@ class _SiteInformationPageState extends State<SiteInformationPage> {
assetInventoryModel.room = null; assetInventoryModel.room = null;
showMarkAsComplete = true; showMarkAsComplete = true;
setState(() {}); setState(() {});
getAssetFilteredList(); if (assetInventoryModel.department != null && assetInventoryModel.department!.rooms!.isEmpty) {
getAssetFilteredList();
}
}, },
), ),
12.height, 12.height,

Loading…
Cancel
Save