ui improvements

dev_sikander
Sikander Saleem 7 days 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.
// 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 figmaDesignHeight = 927; // iPhone X / 12 base height
const num figmaDesignWidth = 430; // iPhone X / 12 base width, 375
const num figmaDesignHeight = 927; // iPhone X / 12 base height 812
const num figmaDesignWidthTF = 375;
const num figmaDesignHeightTF = 812;
extension ConstrainedResponsive on num {
/// Width with max cap for tablets
@ -50,9 +53,9 @@ extension ResponsiveExtension on num {
double get w {
double baseScale = (this * _screenWidth) / figmaDesignWidth;
if (_isFoldable) {
if (_isFoldable|| isTablet ) {
// For foldables, use more conservative width scaling
double scale = _screenWidth / figmaDesignWidth;
double scale = _screenWidth / figmaDesignWidthTF;
scale = scale.clamp(0.8, 1.4);
return this * scale;
}
@ -64,9 +67,9 @@ extension ResponsiveExtension on num {
double get h {
double baseScale = (this * _screenHeight) / figmaDesignHeight;
if (_isFoldable) {
if (_isFoldable || isTablet ) {
// 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;
}
@ -79,7 +82,7 @@ extension ResponsiveExtension on num {
if (_isFoldable || isTablet) {
// Use the same logic as enhanced width for foldables
double scale = _screenWidth / figmaDesignWidth;
double scale = _screenWidth / figmaDesignWidthTF;
scale = scale.clamp(0.8, 1.4);
return this * scale;
}

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

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

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

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

Loading…
Cancel
Save