ui improvements

pull/174/head
Sikander Saleem 3 months ago
parent 41a4005d41
commit 6e1eb0d0bb

@ -4,8 +4,11 @@ import 'dart:math' as math;
import 'package:flutter/material.dart'; // These are the Viewport values of your Figma Design. import 'package:flutter/material.dart'; // These are the Viewport values of your Figma Design.
// These are used in the code as a reference to create your UI Responsively. // These are used in the code as a reference to create your UI Responsively.
const num figmaDesignWidth = 430; // iPhone X / 12 base width, const num figmaDesignWidth = 430; // iPhone X / 12 base width, 375
const num figmaDesignHeight = 927; // iPhone X / 12 base height const num figmaDesignHeight = 927; // iPhone X / 12 base height 812
const num figmaDesignWidthTF = 375;
const num figmaDesignHeightTF = 812;
extension ConstrainedResponsive on num { extension ConstrainedResponsive on num {
/// Width with max cap for tablets /// Width with max cap for tablets
@ -50,9 +53,9 @@ extension ResponsiveExtension on num {
double get w { double get w {
double baseScale = (this * _screenWidth) / figmaDesignWidth; double baseScale = (this * _screenWidth) / figmaDesignWidth;
if (_isFoldable) { if (_isFoldable|| isTablet ) {
// For foldables, use more conservative width scaling // For foldables, use more conservative width scaling
double scale = _screenWidth / figmaDesignWidth; double scale = _screenWidth / figmaDesignWidthTF;
scale = scale.clamp(0.8, 1.4); scale = scale.clamp(0.8, 1.4);
return this * scale; return this * scale;
} }
@ -64,9 +67,9 @@ extension ResponsiveExtension on num {
double get h { double get h {
double baseScale = (this * _screenHeight) / figmaDesignHeight; double baseScale = (this * _screenHeight) / figmaDesignHeight;
if (_isFoldable) { if (_isFoldable || isTablet ) {
// For foldables, use height-based scaling but with constraints // For foldables, use height-based scaling but with constraints
double scale = (_screenHeight / figmaDesignHeight).clamp(0.8, 1.4); double scale = (_screenHeight / figmaDesignHeightTF).clamp(0.8, 1.4);
return this * scale; return this * scale;
} }
@ -79,7 +82,7 @@ extension ResponsiveExtension on num {
if (_isFoldable || isTablet) { if (_isFoldable || isTablet) {
// Use the same logic as enhanced width for foldables // Use the same logic as enhanced width for foldables
double scale = _screenWidth / figmaDesignWidth; double scale = _screenWidth / figmaDesignWidthTF;
scale = scale.clamp(0.8, 1.4); scale = scale.clamp(0.8, 1.4);
return this * scale; return this * scale;
} }

@ -1,8 +1,10 @@
import 'dart:io'; import 'dart:io';
import 'package:device_preview/device_preview.dart';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:hmg_patient_app_new/core/app_state.dart'; import 'package:hmg_patient_app_new/core/app_state.dart';
@ -89,120 +91,123 @@ Future<void> callInitializations() async {
void main() async { void main() async {
await callInitializations(); await callInitializations();
runApp( runApp(
EasyLocalization( DevicePreview(
supportedLocales: const <Locale>[ enabled: false,
Locale('en', 'US'), builder: (context) => EasyLocalization(
Locale('ar', 'SA'), supportedLocales: const <Locale>[
], Locale('en', 'US'),
path: 'assets/langs', Locale('ar', 'SA'),
fallbackLocale: Locale('en', 'US'), ],
child: MultiProvider(providers: <SingleChildWidget>[ path: 'assets/langs',
ChangeNotifierProvider<LabViewModel>( fallbackLocale: Locale('en', 'US'),
create: (_) => getIt.get<LabViewModel>(), child: MultiProvider(providers: <SingleChildWidget>[
), ChangeNotifierProvider<LabViewModel>(
ChangeNotifierProvider<RadiologyViewModel>( create: (_) => getIt.get<LabViewModel>(),
create: (_) => getIt.get<RadiologyViewModel>(), ),
), ChangeNotifierProvider<RadiologyViewModel>(
ChangeNotifierProvider<PrescriptionsViewModel>( create: (_) => getIt.get<RadiologyViewModel>(),
create: (_) => getIt.get<PrescriptionsViewModel>(), ),
), ChangeNotifierProvider<PrescriptionsViewModel>(
ChangeNotifierProvider<InsuranceViewModel>( create: (_) => getIt.get<PrescriptionsViewModel>(),
create: (_) => getIt.get<InsuranceViewModel>(), ),
), ChangeNotifierProvider<InsuranceViewModel>(
ChangeNotifierProvider<MedicalFileViewModel>( create: (_) => getIt.get<InsuranceViewModel>(),
create: (_) => getIt.get<MedicalFileViewModel>(), ),
), ChangeNotifierProvider<MedicalFileViewModel>(
ChangeNotifierProvider<ProfileSettingsViewModel>( create: (_) => getIt.get<MedicalFileViewModel>(),
create: (_) => getIt.get<ProfileSettingsViewModel>(), ),
), ChangeNotifierProvider<ProfileSettingsViewModel>(
ChangeNotifierProvider<MyAppointmentsViewModel>( create: (_) => getIt.get<ProfileSettingsViewModel>(),
create: (_) => getIt.get<MyAppointmentsViewModel>(), ),
), ChangeNotifierProvider<MyAppointmentsViewModel>(
ChangeNotifierProvider<AppointmentRatingViewModel>( create: (_) => getIt.get<MyAppointmentsViewModel>(),
create: (_) => getIt.get<AppointmentRatingViewModel>(), ),
), ChangeNotifierProvider<AppointmentRatingViewModel>(
ChangeNotifierProvider<PayfortViewModel>( create: (_) => getIt.get<AppointmentRatingViewModel>(),
create: (_) => getIt.get<PayfortViewModel>(), ),
), ChangeNotifierProvider<PayfortViewModel>(
ChangeNotifierProvider<HabibWalletViewModel>( create: (_) => getIt.get<PayfortViewModel>(),
create: (_) => getIt.get<HabibWalletViewModel>(), ),
), ChangeNotifierProvider<HabibWalletViewModel>(
ChangeNotifierProvider<BookAppointmentsViewModel>( create: (_) => getIt.get<HabibWalletViewModel>(),
create: (_) => getIt.get<BookAppointmentsViewModel>(), ),
), ChangeNotifierProvider<BookAppointmentsViewModel>(
ChangeNotifierProvider<ImmediateLiveCareViewModel>( create: (_) => getIt.get<BookAppointmentsViewModel>(),
create: (_) => getIt.get<ImmediateLiveCareViewModel>(), ),
), ChangeNotifierProvider<ImmediateLiveCareViewModel>(
ChangeNotifierProvider<AuthenticationViewModel>( create: (_) => getIt.get<ImmediateLiveCareViewModel>(),
create: (_) => getIt.get<AuthenticationViewModel>(), ),
), ChangeNotifierProvider<AuthenticationViewModel>(
ChangeNotifierProvider<AppointmentViaRegionViewmodel>( create: (_) => getIt.get<AuthenticationViewModel>(),
create: (_) => getIt.get<AppointmentViaRegionViewmodel>(), ),
), ChangeNotifierProvider<AppointmentViaRegionViewmodel>(
ChangeNotifierProvider<LabHistoryViewModel>( create: (_) => getIt.get<AppointmentViaRegionViewmodel>(),
create: (_) => getIt.get<LabHistoryViewModel>(), ),
), ChangeNotifierProvider<LabHistoryViewModel>(
ChangeNotifierProvider<DateRangeSelectorRangeViewModel>( create: (_) => getIt.get<LabHistoryViewModel>(),
create: (_) => getIt.get<DateRangeSelectorRangeViewModel>(), ),
), ChangeNotifierProvider<DateRangeSelectorRangeViewModel>(
ChangeNotifierProvider<DoctorFilterViewModel>( create: (_) => getIt.get<DateRangeSelectorRangeViewModel>(),
create: (_) => getIt.get<DoctorFilterViewModel>(), ),
), ChangeNotifierProvider<DoctorFilterViewModel>(
ChangeNotifierProvider<EmergencyServicesViewModel>( create: (_) => getIt.get<DoctorFilterViewModel>(),
create: (_) => getIt.get<EmergencyServicesViewModel>(), ),
), ChangeNotifierProvider<EmergencyServicesViewModel>(
ChangeNotifierProvider<LocationViewModel>( create: (_) => getIt.get<EmergencyServicesViewModel>(),
create: (_) => getIt.get<LocationViewModel>(), ),
), ChangeNotifierProvider<LocationViewModel>(
ChangeNotifierProvider<TodoSectionViewModel>( create: (_) => getIt.get<LocationViewModel>(),
create: (_) => getIt.get<TodoSectionViewModel>(), ),
), ChangeNotifierProvider<TodoSectionViewModel>(
ChangeNotifierProvider<ContactUsViewModel>( create: (_) => getIt.get<TodoSectionViewModel>(),
create: (_) => getIt.get<ContactUsViewModel>(), ),
), ChangeNotifierProvider<ContactUsViewModel>(
ChangeNotifierProvider<HmgServicesViewModel>( create: (_) => getIt.get<ContactUsViewModel>(),
create: (_) => getIt.get<HmgServicesViewModel>(), ),
), ChangeNotifierProvider<HmgServicesViewModel>(
ChangeNotifierProvider<SymptomsCheckerViewModel>( create: (_) => getIt.get<HmgServicesViewModel>(),
create: (_) => getIt.get<SymptomsCheckerViewModel>(), ),
), ChangeNotifierProvider<SymptomsCheckerViewModel>(
ChangeNotifierProvider<BloodDonationViewModel>( create: (_) => getIt.get<SymptomsCheckerViewModel>(),
create: (_) => getIt.get<BloodDonationViewModel>(), ),
), ChangeNotifierProvider<BloodDonationViewModel>(
ChangeNotifierProvider<HealthProvider>( create: (_) => getIt.get<BloodDonationViewModel>(),
create: (_) => getIt.get<HealthProvider>(), ),
), ChangeNotifierProvider<HealthProvider>(
ChangeNotifierProvider<HealthCalcualtorViewModel>( create: (_) => getIt.get<HealthProvider>(),
create: (_) => getIt.get<HealthCalcualtorViewModel>(), ),
), ChangeNotifierProvider<HealthCalcualtorViewModel>(
ChangeNotifierProvider<WaterMonitorViewModel>( create: (_) => getIt.get<HealthCalcualtorViewModel>(),
create: (_) => getIt.get<WaterMonitorViewModel>(), ),
), ChangeNotifierProvider<WaterMonitorViewModel>(
ChangeNotifierProvider<MyInvoicesViewModel>( create: (_) => getIt.get<WaterMonitorViewModel>(),
create: (_) => getIt.get<MyInvoicesViewModel>(), ),
), ChangeNotifierProvider<MyInvoicesViewModel>(
ChangeNotifierProvider<HealthTrackersViewModel>( create: (_) => getIt.get<MyInvoicesViewModel>(),
create: (_) => getIt.get<HealthTrackersViewModel>(), ),
), ChangeNotifierProvider<HealthTrackersViewModel>(
ChangeNotifierProvider<MonthlyReportViewModel>( create: (_) => getIt.get<HealthTrackersViewModel>(),
create: (_) => getIt.get<MonthlyReportViewModel>(), ),
), ChangeNotifierProvider<MonthlyReportViewModel>(
ChangeNotifierProvider<NotificationsViewModel>( create: (_) => getIt.get<MonthlyReportViewModel>(),
create: (_) => getIt.get<NotificationsViewModel>(), ),
), ChangeNotifierProvider<NotificationsViewModel>(
ChangeNotifierProvider<ActivePrescriptionsViewModel>( create: (_) => getIt.get<NotificationsViewModel>(),
create: (_) => getIt.get<ActivePrescriptionsViewModel>(), ),
), ChangeNotifierProvider<ActivePrescriptionsViewModel>(
ChangeNotifierProvider<QrParkingViewModel>( create: (_) => getIt.get<ActivePrescriptionsViewModel>(),
create: (_) => getIt.get<QrParkingViewModel>(), ),
), ChangeNotifierProvider<QrParkingViewModel>(
ChangeNotifierProvider<TermsConditionsViewModel>( create: (_) => getIt.get<QrParkingViewModel>(),
create: (_) => getIt.get<TermsConditionsViewModel>(), ),
), ChangeNotifierProvider<TermsConditionsViewModel>(
ChangeNotifierProvider<AskDoctorViewModel>( create: (_) => getIt.get<TermsConditionsViewModel>(),
create: (_) => getIt.get<AskDoctorViewModel>(), ),
) ChangeNotifierProvider<AskDoctorViewModel>(
], child: MyApp()), create: (_) => getIt.get<AskDoctorViewModel>(),
)
], child: MyApp()),
), // Wrap your app
), ),
); );
} }
@ -243,4 +248,3 @@ class MyApp extends StatelessWidget {
} }
} }
// flutter pub run easy_localization:generate -S assets/langs -f keys -o locale_keys.g.dart // flutter pub run easy_localization:generate -S assets/langs -f keys -o locale_keys.g.dart

@ -299,9 +299,9 @@ class _LandingPageState extends State<LandingPage> {
backgroundColor: Color(0xFF2B353E), backgroundColor: Color(0xFF2B353E),
borderColor: Color(0xFF2B353E), borderColor: Color(0xFF2B353E),
textColor: AppColors.whiteColor, textColor: AppColors.whiteColor,
fontSize: 14, fontSize: 14.f,
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
borderRadius: 12, borderRadius: 12.r,
height: 40.h, height: 40.h,
), ),
], ],

@ -1,4 +1,3 @@
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
@ -69,7 +68,7 @@ class CollapsingListView extends StatelessWidget {
automaticallyImplyLeading: isLeading, automaticallyImplyLeading: isLeading,
pinned: true, pinned: true,
toolbarHeight: 40.h, toolbarHeight: 40.h,
leadingWidth: isLeading ? null : double.infinity, leadingWidth: isLeading ? 40.w + 32.w : double.infinity,
systemOverlayStyle: SystemUiOverlayStyle(statusBarBrightness: Brightness.light), systemOverlayStyle: SystemUiOverlayStyle(statusBarBrightness: Brightness.light),
surfaceTintColor: Colors.transparent, surfaceTintColor: Colors.transparent,
backgroundColor: AppColors.bgScaffoldColor, backgroundColor: AppColors.bgScaffoldColor,
@ -93,23 +92,22 @@ class CollapsingListView extends StatelessWidget {
// : null, // : null,
leading: Visibility( leading: Visibility(
visible: isLeading, visible: isLeading,
child: Transform.flip( child: Container(
flipX: appState.isArabic(), height: 32.h,
child: IconButton( width: 32.w,
icon: Utils.buildSvgWithAssets(icon: isClose ? AppAssets.close_bottom_nav_trans : AppAssets.arrow_back_new, width: 24.h, height: 24.h), alignment: appState.isArabic() ? Alignment.centerRight : Alignment.centerLeft,
padding: EdgeInsets.zero, margin: EdgeInsets.fromLTRB(24.w, 0, 24.w, 0),
constraints: BoxConstraints(), child: Transform.flip(
style: const ButtonStyle(tapTargetSize: MaterialTapTargetSize.shrinkWrap), flipX: appState.isArabic(),
onPressed: () { child: Utils.buildSvgWithAssets(icon: isClose ? AppAssets.close_bottom_nav_trans : AppAssets.arrow_back_new, width: 24.h, height: 24.h),
if (leadingCallback != null) {
leadingCallback!();
} else {
context.pop();
}
},
highlightColor: Colors.transparent,
), ),
), ).onPress(() {
if (leadingCallback != null) {
leadingCallback!();
} else {
context.pop();
}
}),
) )
// : ScrollAnimatedTitle( // : ScrollAnimatedTitle(
// title: title, // title: title,
@ -218,7 +216,7 @@ class ScrollAnimatedTitle extends StatefulWidget implements PreferredSizeWidget
}); });
@override @override
Size get preferredSize => const Size.fromHeight(50.0); Size get preferredSize => const Size.fromHeight(56.0);
@override @override
State<ScrollAnimatedTitle> createState() => _ScrollAnimatedTitleState(); State<ScrollAnimatedTitle> createState() => _ScrollAnimatedTitleState();
@ -265,7 +263,7 @@ class _ScrollAnimatedTitleState extends State<ScrollAnimatedTitle> {
final isRtl = Directionality.of(context) == TextDirection.RTL; final isRtl = Directionality.of(context) == TextDirection.RTL;
return Container( return Container(
// height: (widget.preferredSize.height - _fontSize / 2).h, // height: (widget.preferredSize.height - _fontSize / 2).h,
height: 60.h, height: 56.h,
alignment: isRtl ? (widget.showBack ? Alignment.topRight : Alignment.centerRight) : (widget.showBack ? Alignment.topLeft : Alignment.centerLeft), alignment: isRtl ? (widget.showBack ? Alignment.topRight : Alignment.centerRight) : (widget.showBack ? Alignment.topLeft : Alignment.centerLeft),
padding: EdgeInsets.fromLTRB(24.w, 0, 24.w, 0), padding: EdgeInsets.fromLTRB(24.w, 0, 24.w, 0),
child: Row( child: Row(

@ -83,6 +83,7 @@ dependencies:
open_filex: ^4.7.0 open_filex: ^4.7.0
flutter_swiper_view: ^1.1.8 flutter_swiper_view: ^1.1.8
flutter_callkit_incoming: ^3.0.0 flutter_callkit_incoming: ^3.0.0
device_preview: ^1.3.1
location: ^8.0.1 location: ^8.0.1
gms_check: ^1.0.4 gms_check: ^1.0.4

Loading…
Cancel
Save