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
dynamic departmentId; // Now nullable
String? ntCode; // Now nullable
List<Rooms>? rooms; // Now nullable
List<Rooms>? rooms=[]; // Now nullable
Department copyWith({
num? id, // Parameters are now nullable

@ -426,7 +426,7 @@ class _AssetInventoryFormViewState extends State<AssetInventoryFormView> {
_scannedAssetModel?.photo = fileName;
}
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...
Navigator.pop(context);
if (success) {
@ -436,12 +436,14 @@ class _AssetInventoryFormViewState extends State<AssetInventoryFormView> {
AllRequestsProvider allRequestsProvider = Provider.of<AllRequestsProvider>(context, listen: false);
allRequestsProvider.reset();
allRequestsProvider.getAllRequests(context, typeTransaction: 8);
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (contxt) => SiteInformationPage(
sessionModel: SessionModel(id: int.tryParse(widget.assetInventoryModel?.sessionId?.toString() ?? '') ?? 0),
)));
getAssetFilteredList();
Navigator.pop(context);
// Navigator.pushReplacement(
// context,
// MaterialPageRoute(
// builder: (contxt) => SiteInformationPage(
// sessionModel: SessionModel(id: int.tryParse(widget.assetInventoryModel?.sessionId?.toString() ?? '') ?? 0),
// )));
} else {
log('api error...');
}
@ -459,4 +461,21 @@ class _AssetInventoryFormViewState extends State<AssetInventoryFormView> {
_remarksController.clear();
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> {
AssetInventoryModel assetInventoryModel = AssetInventoryModel();
bool showMarkAsComplete = false;
final ScrollController _scrollController = ScrollController();
@override
void 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>();
@ -51,55 +58,48 @@ class _SiteInformationPageState extends State<SiteInformationPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
key: _scaffoldKey,
appBar: DefaultAppBar(
title: 'Inventory Session Request'.addTranslation,
titleStyle: AppTextStyles.heading3.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
),
body: Column(
children: [
ListView(
padding: const EdgeInsets.only(left: 16, right: 16, top: 16),
key: _scaffoldKey,
appBar: DefaultAppBar(
title: 'Inventory Session Request'.addTranslation,
titleStyle: AppTextStyles.heading3.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
),
body: Column(
children: [
ListView(
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: [
siteInfoCard(context, widget.sessionModel),
12.height,
assetDetailList(),
8.height,
],
).expanded,
FooterActionButton.footerContainer(
context: context,
child: Column(
children: [
AppFilledButton(
buttonColor: AppColor.primary10,
label: 'Add Asset'.addTranslation,
onPressed: () => _addAsset(),
// buttonColor: AppColor.primary10,
),
if (showMarkAsComplete) ...[
12.height,
AppFilledButton(
buttonColor: AppColor.primary10,
label: 'Add Asset'.addTranslation,
onPressed: () => _addAsset(),
buttonColor: AppColor.green70,
label: 'Mark as completed'.addTranslation,
onPressed: () => _markAsCompleted(),
// 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 {
@ -130,7 +130,6 @@ class _SiteInformationPageState extends State<SiteInformationPage> {
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
await provider.markAsComplete(payload: payload).then((success) {
Navigator.pop(context);
log('success $success');
if (success) {
///TODO need to confirm need to call this or not ..
// AllRequestsProvider allRequestsProvider = Provider.of<AllRequestsProvider>(context, listen: false);
@ -148,38 +147,32 @@ class _SiteInformationPageState extends State<SiteInformationPage> {
return Consumer<AssetInventoryProvider>(
builder: (context, provider, _) {
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;
return NotificationListener<ScrollNotification>(
onNotification: (scrollInfo) {
if (!provider.isNextPageLoading && provider.nextPage && scrollInfo.metrics.pixels == scrollInfo.metrics.maxScrollExtent) {
getAssetFilteredList(loadMore: true);
}
return false;
return ListView.separated(
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
// Keep non-scrollable, parent handles scroll
itemCount: assets.length,
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(
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,
),
separatorBuilder: (context, index) => 12.height,
);
},
);
@ -253,7 +246,9 @@ class _SiteInformationPageState extends State<SiteInformationPage> {
assetInventoryModel.room = null;
showMarkAsComplete = true;
setState(() {});
getAssetFilteredList();
if (assetInventoryModel.department != null && assetInventoryModel.department!.rooms!.isEmpty) {
getAssetFilteredList();
}
},
),
12.height,

Loading…
Cancel
Save