haroon_dev
haroon amjad 20 hours ago
parent 7e73741d08
commit ac8189fa17

@ -71,6 +71,9 @@ class LabViewModel extends ChangeNotifier {
List<TestDetails> uniqueTestsList = []; List<TestDetails> uniqueTestsList = [];
List<String> indexedCharacterForUniqueTest = []; List<String> indexedCharacterForUniqueTest = [];
List<TestDetails> filteredUniqueTestsList = [];
List<String> filteredIndexedCharacterForUniqueTest = [];
double maxY = 0.0; double maxY = 0.0;
double minY = double.infinity; double minY = double.infinity;
double maxX = double.infinity; double maxX = double.infinity;
@ -218,7 +221,8 @@ class LabViewModel extends ChangeNotifier {
final clinicMap = <String, List<PatientLabOrdersResponseModel>>{}; final clinicMap = <String, List<PatientLabOrdersResponseModel>>{};
final hospitalMap = <String, List<PatientLabOrdersResponseModel>>{}; final hospitalMap = <String, List<PatientLabOrdersResponseModel>>{};
if (query.isEmpty) { if (query.isEmpty) {
// filteredLabOrders = List.from(patientLabOrders); // reset filteredLabOrders = List.from(patientLabOrders); // reset
filteredUniqueTestsList = List.from(uniqueTestsList);
for (var order in patientLabOrders) { for (var order in patientLabOrders) {
final clinicKey = (order.clinicDescription ?? 'Unknown').trim(); final clinicKey = (order.clinicDescription ?? 'Unknown').trim();
clinicMap.putIfAbsent(clinicKey, () => []).add(order); clinicMap.putIfAbsent(clinicKey, () => []).add(order);
@ -234,7 +238,10 @@ class LabViewModel extends ChangeNotifier {
final descriptions = order.testDetails?.map((d) => d.description?.toLowerCase()).toList() ?? []; final descriptions = order.testDetails?.map((d) => d.description?.toLowerCase()).toList() ?? [];
return descriptions.any((desc) => desc != null && desc.contains(query.toLowerCase())); return descriptions.any((desc) => desc != null && desc.contains(query.toLowerCase()));
}).toList(); }).toList();
// patientLabOrders = filteredLabOrders; filteredUniqueTestsList = uniqueTestsList.where((test) {
final desc = test.description?.toLowerCase() ?? '';
return desc.contains(query.toLowerCase());
}).toList();
for (var order in filteredLabOrders) { for (var order in filteredLabOrders) {
final clinicKey = (order.clinicDescription ?? 'Unknown').trim(); final clinicKey = (order.clinicDescription ?? 'Unknown').trim();
clinicMap.putIfAbsent(clinicKey, () => []).add(order); clinicMap.putIfAbsent(clinicKey, () => []).add(order);
@ -246,6 +253,14 @@ class LabViewModel extends ChangeNotifier {
patientLabOrdersByHospital = hospitalMap.values.toList(); patientLabOrdersByHospital = hospitalMap.values.toList();
patientLabOrdersViewList = isSortByClinic ? patientLabOrdersByClinic : patientLabOrdersByHospital; patientLabOrdersViewList = isSortByClinic ? patientLabOrdersByClinic : patientLabOrdersByHospital;
} }
// Rebuild filtered indexed characters
filteredIndexedCharacterForUniqueTest = [];
for (var test in filteredUniqueTestsList) {
String label = test.description ?? "";
if (label.isEmpty) continue;
if (filteredIndexedCharacterForUniqueTest.contains(label[0].toLowerCase())) continue;
filteredIndexedCharacterForUniqueTest.add(label[0].toLowerCase());
}
notifyListeners(); notifyListeners();
} }
@ -280,6 +295,10 @@ class LabViewModel extends ChangeNotifier {
for (var element in uniqueTests) { for (var element in uniqueTests) {
labOrderTests.add(element.description ?? ""); labOrderTests.add(element.description ?? "");
} }
// Initialize filtered lists with full data
filteredUniqueTestsList = List.from(uniqueTestsList);
filteredIndexedCharacterForUniqueTest = List.from(indexedCharacterForUniqueTest);
} }
Future<void> getLabResultsByAppointmentNo( Future<void> getLabResultsByAppointmentNo(
@ -396,7 +415,7 @@ class LabViewModel extends ChangeNotifier {
double lowRefenceValue = double.infinity; double lowRefenceValue = double.infinity;
String? flagForLowReferenceRange; String? flagForLowReferenceRange;
sortedResult.take(3).toList().reversed.forEach((element) { sortedResult.toList().reversed.forEach((element) {
try { try {
var dateTime = DateUtil.convertStringToDate(element.verifiedOnDateTime!); var dateTime = DateUtil.convertStringToDate(element.verifiedOnDateTime!);
var resultValue = double.parse(element.resultValue!); var resultValue = double.parse(element.resultValue!);

@ -45,39 +45,54 @@ class _AlphabetScrollPageState extends State<AlphabeticScroll> {
void initState() { void initState() {
super.initState(); super.initState();
scheduleMicrotask((){ scheduleMicrotask((){
for(var char in widget.alpahbetsAvailable){ _rebuildData();
data[char] = widget.details.where((element)=>element.description?.toLowerCase().startsWith(char.toLowerCase()) == true).toList();
}
setState((){});
}); });
itemPositionsListener.itemPositions.addListener((){ itemPositionsListener.itemPositions.addListener(_onPositionChanged);
}
@override
void didUpdateWidget(covariant AlphabeticScroll oldWidget) {
super.didUpdateWidget(oldWidget);
if (oldWidget.details != widget.details || oldWidget.alpahbetsAvailable != widget.alpahbetsAvailable) {
_rebuildData();
}
}
final positions = itemPositionsListener.itemPositions.value; void _rebuildData() {
data.clear();
for (var char in widget.alpahbetsAvailable) {
data[char] = widget.details
.where((element) => element.description?.toLowerCase().startsWith(char.toLowerCase()) == true)
.toList();
}
if (_activeIndex >= widget.alpahbetsAvailable.length) {
_activeIndex = 0;
}
setState(() {});
}
if (positions.isEmpty) return; void _onPositionChanged() {
final positions = itemPositionsListener.itemPositions.value;
// Get FIRST visible item (top-most) if (positions.isEmpty) return;
final firstVisible = positions
.where((p) => p.itemTrailingEdge > 0) // visible
.reduce((min, p) =>
p.itemLeadingEdge < min.itemLeadingEdge ? p : min);
if(_activeIndex == firstVisible.index) return ; // Get FIRST visible item (top-most)
setState(() { final firstVisible = positions
_activeIndex = firstVisible.index; .where((p) => p.itemTrailingEdge > 0) // visible
}); .reduce((min, p) =>
p.itemLeadingEdge < min.itemLeadingEdge ? p : min);
print("Active index = $_activeIndex"); if(_activeIndex == firstVisible.index) return ;
setState(() {
_activeIndex = firstVisible.index;
}); });
print("Active index = $_activeIndex");
} }
@override @override
void dispose() { void dispose() {
itemPositionsListener.itemPositions.removeListener((){ itemPositionsListener.itemPositions.removeListener(_onPositionChanged);
});
super.dispose(); super.dispose();
} }

File diff suppressed because one or more lines are too long

@ -63,6 +63,30 @@ class LabResultDetails extends StatelessWidget {
LabNameAndStatus(context), LabNameAndStatus(context),
getLabDescription(context), getLabDescription(context),
LabGraph(context), LabGraph(context),
Container(
padding: EdgeInsets.symmetric(horizontal: 24.h, vertical: 16.h),
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
color: AppColors.whiteColor,
borderRadius: 24.h,
hasShadow: true,
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
LocaleKeys.history.tr(context: context),
style: TextStyle(
fontSize: 16.f,
fontFamily: 'Poppins',
fontWeight: FontWeight.w600,
color: AppColors.textColor,
),
),
SizedBox(height: 24.h,),
labHistoryList(labVM),
],
),
),
Selector<LabViewModel, LabOrderResponseByAi?>( Selector<LabViewModel, LabOrderResponseByAi?>(
selector: (_, model) => model.labOrderResponseByAi, selector: (_, model) => model.labOrderResponseByAi,
builder: (_, aiData, __) { builder: (_, aiData, __) {
@ -245,11 +269,11 @@ class LabResultDetails extends StatelessWidget {
spacing: 16.h, spacing: 16.h,
children: [ children: [
//todo handle when the graph icon is being displayed //todo handle when the graph icon is being displayed
Utils.buildSvgWithAssets(icon: labmodel.isGraphVisible ? AppAssets.ic_list : AppAssets.ic_graph, width: 24.h, height: 24.h).onPress(() { // Utils.buildSvgWithAssets(icon: labmodel.isGraphVisible ? AppAssets.ic_list : AppAssets.ic_graph, width: 24.h, height: 24.h).onPress(() {
if (labmodel.shouldShowGraph) { // if (labmodel.shouldShowGraph) {
labmodel.alterGraphVisibility(); // labmodel.alterGraphVisibility();
} // }
}), // }),
Utils.buildSvgWithAssets(icon: AppAssets.ic_date_filter, width: 24, height: 24).onPress(() { Utils.buildSvgWithAssets(icon: AppAssets.ic_date_filter, width: 24, height: 24).onPress(() {
showCommonBottomSheetWithoutHeight( showCommonBottomSheetWithoutHeight(
title: LocaleKeys.setTheDateRange.tr(context: context), title: LocaleKeys.setTheDateRange.tr(context: context),

Loading…
Cancel
Save