haroon_dev
haroon amjad 10 hours ago
parent 7e73741d08
commit ac8189fa17

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

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

File diff suppressed because one or more lines are too long

@ -63,6 +63,30 @@ class LabResultDetails extends StatelessWidget {
LabNameAndStatus(context),
getLabDescription(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: (_, model) => model.labOrderResponseByAi,
builder: (_, aiData, __) {
@ -245,11 +269,11 @@ class LabResultDetails extends StatelessWidget {
spacing: 16.h,
children: [
//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(() {
if (labmodel.shouldShowGraph) {
labmodel.alterGraphVisibility();
}
}),
// Utils.buildSvgWithAssets(icon: labmodel.isGraphVisible ? AppAssets.ic_list : AppAssets.ic_graph, width: 24.h, height: 24.h).onPress(() {
// if (labmodel.shouldShowGraph) {
// labmodel.alterGraphVisibility();
// }
// }),
Utils.buildSvgWithAssets(icon: AppAssets.ic_date_filter, width: 24, height: 24).onPress(() {
showCommonBottomSheetWithoutHeight(
title: LocaleKeys.setTheDateRange.tr(context: context),

Loading…
Cancel
Save