* 'master' of http://34.17.182.140/Haroon6138/HMG_Patient_App_New:
  updates
  updates
  updates & fixes
pull/128/head
Sultan khan 1 month ago
commit d28c94606b

@ -26,8 +26,8 @@ android {
applicationId = "com.ejada.hmg" applicationId = "com.ejada.hmg"
// minSdk = 24 // minSdk = 24
minSdk = 26 minSdk = 26
targetSdk = 35 targetSdk = 36
compileSdk = 35 compileSdk = 36
// targetSdk = flutter.targetSdkVersion // targetSdk = flutter.targetSdkVersion
versionCode = flutter.versionCode versionCode = flutter.versionCode
versionName = flutter.versionName versionName = flutter.versionName

@ -18,7 +18,8 @@ pluginManagement {
plugins { plugins {
id("dev.flutter.flutter-plugin-loader") version "1.0.0" id("dev.flutter.flutter-plugin-loader") version "1.0.0"
id("com.android.application") version "8.7.3" apply false // id("com.android.application") version "8.7.3" apply false
id("com.android.application") version "8.9.3" apply false
id("org.jetbrains.kotlin.android") version "2.1.0" apply false id("org.jetbrains.kotlin.android") version "2.1.0" apply false
} }

@ -703,7 +703,7 @@ var GET_PRESCRIPTION_INSTRUCTIONS_PDF = 'Services/ChatBot_Service.svc/REST/Chatb
class ApiConsts { class ApiConsts {
static const maxSmallScreen = 660; static const maxSmallScreen = 660;
static AppEnvironmentTypeEnum appEnvironmentType = AppEnvironmentTypeEnum.uat; static AppEnvironmentTypeEnum appEnvironmentType = AppEnvironmentTypeEnum.prod;
// static String baseUrl = 'https://uat.hmgwebservices.com/'; // HIS API URL UAT // static String baseUrl = 'https://uat.hmgwebservices.com/'; // HIS API URL UAT

@ -27,7 +27,7 @@ extension ResponsiveExtension on num {
double clamp; double clamp;
if (SizeUtils.deviceType == DeviceType.tablet || _isFoldable) { if (SizeUtils.deviceType == DeviceType.tablet || _isFoldable) {
// More conservative scaling for tablets and foldables // More conservative scaling for tablets and foldables
clamp = (aspectRatio > 1.5 || aspectRatio < 0.67) ? 1.4 : 1.1; clamp = (aspectRatio > 1.5 || aspectRatio < 0.67) ? 1.6 : 1.4;
} else { } else {
// Original logic for phones // Original logic for phones
clamp = (aspectRatio > 1.3 || aspectRatio < 0.77) ? 1.6 : 1.2; clamp = (aspectRatio > 1.3 || aspectRatio < 0.77) ? 1.6 : 1.2;
@ -68,7 +68,7 @@ extension ResponsiveExtension on num {
double get r { double get r {
double baseScale = (this * _screenWidth) / figmaDesignWidth; double baseScale = (this * _screenWidth) / figmaDesignWidth;
if (_isFoldable) { 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 / figmaDesignWidth;
scale = scale.clamp(0.8, 1.4); scale = scale.clamp(0.8, 1.4);

@ -72,7 +72,7 @@ class AppointmentQueuePage extends StatelessWidget {
myAppointmentsVM.currentPatientQueueDetails.queueNo!.toText32(isBold: true).toShimmer2(isShow: myAppointmentsVM.isAppointmentQueueDetailsLoading), myAppointmentsVM.currentPatientQueueDetails.queueNo!.toText32(isBold: true).toShimmer2(isShow: myAppointmentsVM.isAppointmentQueueDetailsLoading),
SizedBox(height: 8.h), SizedBox(height: 8.h),
CustomButton( CustomButton(
text: Utils.getCardButtonText(myAppointmentsVM.currentQueueStatus, myAppointmentsVM.currentPatientQueueDetails.roomNo!), text: Utils.getCardButtonText(myAppointmentsVM.currentQueueStatus, myAppointmentsVM.currentPatientQueueDetails.roomNo ?? ""),
onPressed: () {}, onPressed: () {},
backgroundColor: Utils.getCardButtonColor(myAppointmentsVM.currentQueueStatus), backgroundColor: Utils.getCardButtonColor(myAppointmentsVM.currentQueueStatus),
borderColor: Utils.getCardButtonColor(myAppointmentsVM.currentQueueStatus).withValues(alpha: 0.01), borderColor: Utils.getCardButtonColor(myAppointmentsVM.currentQueueStatus).withValues(alpha: 0.01),

@ -130,7 +130,7 @@ class AppointmentCard extends StatelessWidget {
children: [ children: [
Image.network( Image.network(
isLoading ? 'https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png' : patientAppointmentHistoryResponseModel.doctorImageURL!, isLoading ? 'https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png' : patientAppointmentHistoryResponseModel.doctorImageURL!,
width: 63.w, width: 63.h,
height: 63.h, height: 63.h,
fit: BoxFit.cover, fit: BoxFit.cover,
).circle(100.r).toShimmer2(isShow: isLoading), ).circle(100.r).toShimmer2(isShow: isLoading),
@ -239,7 +239,8 @@ class AppointmentCard extends StatelessWidget {
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
borderRadius: 12.r, borderRadius: 12.r,
padding: EdgeInsets.symmetric(horizontal: 10.w), padding: EdgeInsets.symmetric(horizontal: 10.w),
height: isTablet || isFoldable ? 46.h : 40.h, // height: isTablet || isFoldable ? 46.h : 40.h,
height: 40.h,
icon: AppAssets.checkmark_icon, icon: AppAssets.checkmark_icon,
iconColor: AppColors.primaryRedColor, iconColor: AppColors.primaryRedColor,
iconSize: 16.h, iconSize: 16.h,
@ -265,7 +266,7 @@ class AppointmentCard extends StatelessWidget {
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
borderRadius: 12.r, borderRadius: 12.r,
padding: EdgeInsets.symmetric(horizontal: 10.w), padding: EdgeInsets.symmetric(horizontal: 10.w),
height: isTablet || isFoldable ? 46.h : 40.h, height: 40.h,
icon: AppointmentType.getNextActionIcon(patientAppointmentHistoryResponseModel.nextAction), icon: AppointmentType.getNextActionIcon(patientAppointmentHistoryResponseModel.nextAction),
iconColor: AppointmentType.getNextActionTextColor(patientAppointmentHistoryResponseModel.nextAction), iconColor: AppointmentType.getNextActionTextColor(patientAppointmentHistoryResponseModel.nextAction),
iconSize: 15.h, iconSize: 15.h,
@ -337,7 +338,8 @@ class AppointmentCard extends StatelessWidget {
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
borderRadius: 12.r, borderRadius: 12.r,
padding: EdgeInsets.symmetric(horizontal: 10.w), padding: EdgeInsets.symmetric(horizontal: 10.w),
height: isTablet || isFoldable ? 46.h : 40.h, // height: isTablet || isFoldable ? 46.h : 40.h,
height: 40.h,
icon: AppAssets.ask_doctor_icon, icon: AppAssets.ask_doctor_icon,
iconColor: AppColors.primaryRedColor, iconColor: AppColors.primaryRedColor,
iconSize: 16.h, iconSize: 16.h,
@ -354,7 +356,7 @@ class AppointmentCard extends StatelessWidget {
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
borderRadius: 12.r, borderRadius: 12.r,
padding: EdgeInsets.symmetric(horizontal: 10.w), padding: EdgeInsets.symmetric(horizontal: 10.w),
height: isTablet || isFoldable ? 46.h : 40.h, height: 40.h,
icon: AppAssets.rebook_appointment_icon, icon: AppAssets.rebook_appointment_icon,
iconColor: AppColors.blackColor, iconColor: AppColors.blackColor,
iconSize: 16.h, iconSize: 16.h,

@ -148,8 +148,8 @@ class AppointmentCheckinBottomSheet extends StatelessWidget {
checkInType: 2, checkInType: 2,
onSuccess: (apiResponse) { onSuccess: (apiResponse) {
LoaderBottomSheet.hideLoader(); LoaderBottomSheet.hideLoader();
showCommonBottomSheetWithoutHeight(context, title: "Success".needTranslation, child: Utils.getSuccessWidget(loadingText: LocaleKeys.success.tr()), callBackFunc: () { showCommonBottomSheetWithoutHeight(context, title: "Success".needTranslation, child: Utils.getSuccessWidget(loadingText: LocaleKeys.success.tr()), callBackFunc: () async {
myAppointmentsViewModel.getPatientAppointmentQueueDetails(appointmentNo: patientAppointmentHistoryResponseModel.appointmentNo, patientID: patientAppointmentHistoryResponseModel.patientID); await myAppointmentsViewModel.getPatientAppointmentQueueDetails(appointmentNo: patientAppointmentHistoryResponseModel.appointmentNo, patientID: patientAppointmentHistoryResponseModel.patientID);
Navigator.of(context).pop(); Navigator.of(context).pop();
Navigator.pushAndRemoveUntil( Navigator.pushAndRemoveUntil(
context, context,

@ -47,7 +47,7 @@ class AppointmentDoctorCard extends StatelessWidget {
children: [ children: [
Image.network( Image.network(
patientAppointmentHistoryResponseModel.doctorImageURL!, patientAppointmentHistoryResponseModel.doctorImageURL!,
width: 63.w, width: 63.h,
height: 63.h, height: 63.h,
fit: BoxFit.cover, fit: BoxFit.cover,
).circle(100.r), ).circle(100.r),

@ -144,7 +144,7 @@ class _BookAppointmentPageState extends State<BookAppointmentPage> {
children: [ children: [
Image.network( Image.network(
myAppointmentsVM.patientMyDoctorsList[index].doctorImageURL!, myAppointmentsVM.patientMyDoctorsList[index].doctorImageURL!,
width: 64.w, width: 64.h,
height: 64.h, height: 64.h,
fit: BoxFit.cover, fit: BoxFit.cover,
).circle(100).toShimmer2(isShow: false, radius: 50.r), ).circle(100).toShimmer2(isShow: false, radius: 50.r),

@ -349,7 +349,7 @@ class FeedbackPage extends StatelessWidget {
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
borderRadius: 10.r, borderRadius: 10.r,
padding: EdgeInsets.symmetric(horizontal: 10.w), padding: EdgeInsets.symmetric(horizontal: 10.w),
height: isTablet || isFoldable ? 46.h : 40.h, height: 40.h,
icon: AppAssets.file_icon, icon: AppAssets.file_icon,
iconColor: AppColors.primaryRedColor, iconColor: AppColors.primaryRedColor,
iconSize: 16.h, iconSize: 16.h,

@ -1,3 +1,4 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:hmg_patient_app_new/core/app_assets.dart'; import 'package:hmg_patient_app_new/core/app_assets.dart';
import 'package:hmg_patient_app_new/core/enums.dart'; import 'package:hmg_patient_app_new/core/enums.dart';
@ -5,8 +6,10 @@ import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
import 'package:hmg_patient_app_new/core/utils/utils.dart'; import 'package:hmg_patient_app_new/core/utils/utils.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart'; import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
class HealthCalculatorResultPage extends StatelessWidget { class HealthCalculatorResultPage extends StatelessWidget {
HealthCalculatorsTypeEnum calculatorType; HealthCalculatorsTypeEnum calculatorType;
@ -18,6 +21,19 @@ class HealthCalculatorResultPage extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return CollapsingListView( return CollapsingListView(
title: "Your ${calculatorType.name.toCamelCase}", title: "Your ${calculatorType.name.toCamelCase}",
bottomChild: Container(
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, customBorder: BorderRadius.only(topLeft: Radius.circular(24.r), topRight: Radius.circular(24.r))),
padding: EdgeInsets.symmetric(vertical: 20.h, horizontal: 20.h),
child: CustomButton(
text: LocaleKeys.bookAppo.tr(),
onPressed: () {},
icon: null,
fontSize: 16.f,
backgroundColor: AppColors.primaryRedColor,
borderColor: AppColors.primaryRedColor,
borderRadius: 12.r,
fontWeight: FontWeight.w500),
),
child: getCalculatorResultWidget(type: calculatorType, calculatedResult: calculatedResult).paddingSymmetrical(18.w, 24.h), child: getCalculatorResultWidget(type: calculatorType, calculatedResult: calculatedResult).paddingSymmetrical(18.w, 24.h),
); );
} }

@ -10,25 +10,12 @@ import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
import 'package:hmg_patient_app_new/core/utils/utils.dart'; import 'package:hmg_patient_app_new/core/utils/utils.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
import 'package:hmg_patient_app_new/features/hmg_services/hmg_services_view_model.dart';
import 'package:hmg_patient_app_new/features/hmg_services/models/resq_models/get_cmc_all_orders_resp_model.dart';
import 'package:hmg_patient_app_new/features/hmg_services/models/resq_models/get_cmc_services_resp_model.dart';
import 'package:hmg_patient_app_new/presentation/comprehensive_checkup/cmc_order_detail_page.dart';
import 'package:hmg_patient_app_new/presentation/comprehensive_checkup/cmc_selection_review_page.dart';
import 'package:hmg_patient_app_new/presentation/comprehensive_checkup/widgets/cmc_ui_selection_helper.dart';
import 'package:hmg_patient_app_new/presentation/health_calculators/health_calculator_detailed_page.dart'; import 'package:hmg_patient_app_new/presentation/health_calculators/health_calculator_detailed_page.dart';
import 'package:hmg_patient_app_new/presentation/health_calculators/widgets/health_card.dart'; import 'package:hmg_patient_app_new/presentation/health_calculators/widgets/health_card.dart';
import 'package:hmg_patient_app_new/presentation/hmg_services/services_view.dart';
import 'package:hmg_patient_app_new/services/dialog_service.dart'; import 'package:hmg_patient_app_new/services/dialog_service.dart';
import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart'; import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart';
import 'package:hmg_patient_app_new/widgets/media_viewer/full_screen_image_viewer.dart';
import 'package:hmg_patient_app_new/widgets/radio_list_tile_widget.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart'; import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:provider/provider.dart';
import 'package:shimmer/shimmer.dart';
class HealthCalculatorsPage extends StatefulWidget { class HealthCalculatorsPage extends StatefulWidget {
const HealthCalculatorsPage({super.key}); const HealthCalculatorsPage({super.key});

@ -155,7 +155,8 @@ class ServicesPage extends StatelessWidget {
AppAssets.smartwatch_icon, AppAssets.smartwatch_icon,
bgColor: AppColors.whiteColor, bgColor: AppColors.whiteColor,
true, true,
route: AppRoutes.smartWatches, // route: AppRoutes.smartWatches,
route: AppRoutes.huaweiHealthExample,
), ),
]; ];
@ -178,7 +179,7 @@ class ServicesPage extends StatelessWidget {
SizedBox(height: 16.h), SizedBox(height: 16.h),
GridView.builder( GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 4, // 4 icons per row crossAxisCount: (isFoldable || isTablet) ? 6 : 4, // 4 icons per row
crossAxisSpacing: 12.w, crossAxisSpacing: 12.w,
mainAxisSpacing: 18.h, mainAxisSpacing: 18.h,
childAspectRatio: 0.8, childAspectRatio: 0.8,
@ -341,7 +342,7 @@ class ServicesPage extends StatelessWidget {
SizedBox(height: 16.h), SizedBox(height: 16.h),
GridView.builder( GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 4, // 4 icons per row crossAxisCount:(isFoldable || isTablet) ? 6 : 4, // 4 icons per row
crossAxisSpacing: 12.w, crossAxisSpacing: 12.w,
mainAxisSpacing: 18.h, mainAxisSpacing: 18.h,
childAspectRatio: 0.8, childAspectRatio: 0.8,

@ -345,7 +345,7 @@ class _LandingPageState extends State<LandingPage> {
) : SizedBox(height: 12.h), ) : SizedBox(height: 12.h),
SizedBox(height: 8.h), SizedBox(height: 8.h),
CustomButton( CustomButton(
text: Utils.getCardButtonText(myAppointmentsVM.currentQueueStatus, myAppointmentsVM.currentPatientQueueDetails.roomNo!), text: Utils.getCardButtonText(myAppointmentsVM.currentQueueStatus, myAppointmentsVM.currentPatientQueueDetails.roomNo ?? ""),
onPressed: () {}, onPressed: () {},
backgroundColor: Utils.getCardButtonColor(myAppointmentsVM.currentQueueStatus), backgroundColor: Utils.getCardButtonColor(myAppointmentsVM.currentQueueStatus),
borderColor: Utils.getCardButtonColor(myAppointmentsVM.currentQueueStatus).withValues(alpha: 0.01), borderColor: Utils.getCardButtonColor(myAppointmentsVM.currentQueueStatus).withValues(alpha: 0.01),
@ -495,7 +495,7 @@ class _LandingPageState extends State<LandingPage> {
padding: EdgeInsets.fromLTRB(10.h, 0, 10.h, 0), padding: EdgeInsets.fromLTRB(10.h, 0, 10.h, 0),
icon: AppAssets.add_icon, icon: AppAssets.add_icon,
iconColor: AppColors.primaryRedColor, iconColor: AppColors.primaryRedColor,
height: 46.h, height: 40.h,
), ),
], ],
), ),

@ -173,7 +173,7 @@ class MedicalFileAppointmentCard extends StatelessWidget {
backgroundColor: AppColors.secondaryLightRedColor, backgroundColor: AppColors.secondaryLightRedColor,
borderColor: AppColors.secondaryLightRedColor, borderColor: AppColors.secondaryLightRedColor,
textColor: AppColors.primaryRedColor, textColor: AppColors.primaryRedColor,
fontSize: 14, fontSize: 14.f,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
borderRadius: 12.r, borderRadius: 12.r,
padding: EdgeInsets.symmetric(horizontal: 10.w), padding: EdgeInsets.symmetric(horizontal: 10.w),

File diff suppressed because it is too large Load Diff

@ -10,6 +10,7 @@ import 'package:hmg_patient_app_new/presentation/health_calculators/health_calcu
import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart'; import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart';
import 'package:hmg_patient_app_new/presentation/home_health_care/hhc_procedures_page.dart'; import 'package:hmg_patient_app_new/presentation/home_health_care/hhc_procedures_page.dart';
import 'package:hmg_patient_app_new/presentation/medical_file/medical_file_page.dart'; import 'package:hmg_patient_app_new/presentation/medical_file/medical_file_page.dart';
import 'package:hmg_patient_app_new/presentation/smartwatches/huawei_health_example.dart';
import 'package:hmg_patient_app_new/presentation/smartwatches/smartwatch_instructions_page.dart'; import 'package:hmg_patient_app_new/presentation/smartwatches/smartwatch_instructions_page.dart';
import 'package:hmg_patient_app_new/presentation/symptoms_checker/organ_selector_screen.dart'; import 'package:hmg_patient_app_new/presentation/symptoms_checker/organ_selector_screen.dart';
import 'package:hmg_patient_app_new/presentation/symptoms_checker/possible_conditions_screen.dart'; import 'package:hmg_patient_app_new/presentation/symptoms_checker/possible_conditions_screen.dart';
@ -36,6 +37,7 @@ class AppRoutes {
static const String zoomCallPage = '/zoomCallPage'; static const String zoomCallPage = '/zoomCallPage';
static const String bloodDonationPage = '/bloodDonationPage'; static const String bloodDonationPage = '/bloodDonationPage';
static const String smartWatches = '/smartWatches'; static const String smartWatches = '/smartWatches';
static const String huaweiHealthExample = '/huaweiHealthExample';
//appointments //appointments
static const String bookAppointmentPage = '/bookAppointmentPage'; static const String bookAppointmentPage = '/bookAppointmentPage';
@ -74,9 +76,9 @@ class AppRoutes {
userInfoSelection: (context) => UserInfoSelectionScreen(), userInfoSelection: (context) => UserInfoSelectionScreen(),
userInfoFlowManager: (context) => UserInfoFlowManager(), userInfoFlowManager: (context) => UserInfoFlowManager(),
smartWatches: (context) => SmartwatchInstructionsPage(), smartWatches: (context) => SmartwatchInstructionsPage(),
huaweiHealthExample: (context) => HuaweiHealthExample(),
// //
zoomCallPage: (context) => CallScreen(),
healthCalculatorsPage: (context) => HealthCalculatorsPage() healthCalculatorsPage: (context) => HealthCalculatorsPage()
}; };

@ -218,7 +218,7 @@ class _SplashScreenState extends State<SplashPage> {
// AppSharedPreferences().setString(APP_LANGUAGE, projectProvider.isArabic ? "ar" : "en"); // AppSharedPreferences().setString(APP_LANGUAGE, projectProvider.isArabic ? "ar" : "en");
// var themeNotifier = Provider.of<ThemeNotifier>(context, listen: false); // var themeNotifier = Provider.of<ThemeNotifier>(context, listen: false);
// themeNotifier.setTheme(defaultTheme(fontName: projectProvider.isArabic ? 'Cairo' : 'Poppins')); // themeNotifier.setTheme(defaultTheme(fontName: projectProvider.isArabic ? 'Cairo' : 'Poppins'));
PushNotificationHandler().init(context); // Asyncronously // PushNotificationHandler().init(context); // Asyncronously
} }
@override @override

@ -86,6 +86,7 @@ dependencies:
location: ^8.0.1 location: ^8.0.1
gms_check: ^1.0.4 gms_check: ^1.0.4
huawei_location: ^6.14.2+301 huawei_location: ^6.14.2+301
huawei_health: ^6.16.0+300
intl: ^0.20.2 intl: ^0.20.2
flutter_widget_from_html: ^0.17.1 flutter_widget_from_html: ^0.17.1
huawei_map: huawei_map:

Loading…
Cancel
Save