compatible with android 17 AND IOS 27

ipd-changes-for-vida-plus
taha 2 weeks ago
parent d5abf02a3d
commit 98cb202b1c

@ -7,6 +7,15 @@
# The following line activates a set of recommended lints for Flutter apps,
# packages, and plugins designed to encourage good coding practices.
analyzer:
exclude:
- build/**
- android/**
- ios/**
- web/**
- windows/**
- macos/**
- linux/**
include: package:flutter_lints/flutter.yaml
linter:

@ -30,7 +30,7 @@ if (flutterVersionName == null) {
android {
namespace "com.hmg.hmgDr"
compileSdkVersion 35
compileSdkVersion 37
signingConfigs {
release {
@ -52,8 +52,8 @@ android {
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.hmg.hmgDr"
minSdkVersion 24
targetSdkVersion 35
minSdkVersion 28
targetSdkVersion 37
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@ -67,7 +67,7 @@ android {
debuggable false
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
proguardFiles 'proguard-rules.pro'
}
debug {

@ -15,7 +15,7 @@
allprojects {
repositories {
google()
jcenter()
// jcenter()
mavenCentral()
maven { url 'https://developer.huawei.com/repo/' }
// maven { url 'https://tokbox.bintray.com/maven' }
@ -46,6 +46,7 @@ subprojects {
if (namespace == null) {
namespace project.group
}
project.android.compileSdkVersion 37
}
}
}

@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-all.zip

@ -18,8 +18,8 @@ pluginManagement {
plugins {
id 'dev.flutter.flutter-plugin-loader' version "1.0.0" // apply true
id "org.jetbrains.kotlin.android" version "2.2.0" apply false
id 'com.android.application' version "8.9.0" apply false
id "com.android.application" version '9.0.1' apply false
id("org.jetbrains.kotlin.android") version "2.2.20" apply false
id "com.google.gms.google-services" version "4.4.0" apply false
}

@ -1,5 +1,5 @@
# Uncomment this line to define a global platform for your project
platform :ios, '13.0'
platform :ios, '15.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'

@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
objectVersion = 54;
objectVersion = 60;
objects = {
/* Begin PBXBuildFile section */
@ -198,7 +198,6 @@
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
CD1E4AEFF4CC6FD150483363 /* [CP] Embed Pods Frameworks */,
6BD71B7017878A134266DEFC /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@ -303,24 +302,6 @@
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
6BD71B7017878A134266DEFC /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh",
"${PODS_CONFIGURATION_BUILD_DIR}/permission_handler_apple/permission_handler_apple_privacy.bundle",
);
name = "[CP] Copy Pods Resources";
outputPaths = (
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/permission_handler_apple_privacy.bundle",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
showEnvVarsInLog = 0;
};
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
@ -347,31 +328,13 @@
"${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework",
"${BUILT_PRODUCTS_DIR}/DKImagePickerController/DKImagePickerController.framework",
"${BUILT_PRODUCTS_DIR}/DKPhotoGallery/DKPhotoGallery.framework",
"${BUILT_PRODUCTS_DIR}/FirebaseCore/FirebaseCore.framework",
"${BUILT_PRODUCTS_DIR}/FirebaseCoreInternal/FirebaseCoreInternal.framework",
"${BUILT_PRODUCTS_DIR}/FirebaseInstallations/FirebaseInstallations.framework",
"${BUILT_PRODUCTS_DIR}/FirebaseMessaging/FirebaseMessaging.framework",
"${BUILT_PRODUCTS_DIR}/GoogleDataTransport/GoogleDataTransport.framework",
"${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework",
"${BUILT_PRODUCTS_DIR}/MTBBarcodeScanner/MTBBarcodeScanner.framework",
"${BUILT_PRODUCTS_DIR}/OrderedSet/OrderedSet.framework",
"${BUILT_PRODUCTS_DIR}/PromisesObjC/FBLPromises.framework",
"${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework",
"${BUILT_PRODUCTS_DIR}/SwiftProtobuf/SwiftProtobuf.framework",
"${BUILT_PRODUCTS_DIR}/SwiftyGif/SwiftyGif.framework",
"${BUILT_PRODUCTS_DIR}/Try/Try.framework",
"${BUILT_PRODUCTS_DIR}/barcode_scan2/barcode_scan2.framework",
"${BUILT_PRODUCTS_DIR}/file_picker/file_picker.framework",
"${BUILT_PRODUCTS_DIR}/flutter_inappwebview_ios/flutter_inappwebview_ios.framework",
"${BUILT_PRODUCTS_DIR}/flutter_keyboard_visibility/flutter_keyboard_visibility.framework",
"${BUILT_PRODUCTS_DIR}/fluttertoast/fluttertoast.framework",
"${BUILT_PRODUCTS_DIR}/local_auth_ios/local_auth_ios.framework",
"${BUILT_PRODUCTS_DIR}/maps_launcher/maps_launcher.framework",
"${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework",
"${BUILT_PRODUCTS_DIR}/open_filex/open_filex.framework",
"${BUILT_PRODUCTS_DIR}/path_provider_foundation/path_provider_foundation.framework",
"${BUILT_PRODUCTS_DIR}/speech_to_text/speech_to_text.framework",
"${PODS_XCFRAMEWORKS_BUILD_DIR}/ZoomVideoSDK/CptShare/CptShare.framework/CptShare",
"${PODS_XCFRAMEWORKS_BUILD_DIR}/ZoomVideoSDK/Whiteboard/Whiteboard.framework/Whiteboard",
"${PODS_XCFRAMEWORKS_BUILD_DIR}/ZoomVideoSDK/ZoomTask/ZoomTask.framework/ZoomTask",
"${PODS_XCFRAMEWORKS_BUILD_DIR}/ZoomVideoSDK/ZoomVideoSDK/ZoomVideoSDK.framework/ZoomVideoSDK",
"${PODS_XCFRAMEWORKS_BUILD_DIR}/ZoomVideoSDK/zm_annoter_dynamic/zm_annoter_dynamic.framework/zm_annoter_dynamic",
"${PODS_XCFRAMEWORKS_BUILD_DIR}/ZoomVideoSDK/zoomcml/zoomcml.framework/zoomcml",
@ -382,31 +345,13 @@
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Alamofire.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DKImagePickerController.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DKPhotoGallery.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCore.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCoreInternal.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseInstallations.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseMessaging.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleDataTransport.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleUtilities.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MTBBarcodeScanner.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/OrderedSet.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBLPromises.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftProtobuf.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyGif.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Try.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/barcode_scan2.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/file_picker.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_inappwebview_ios.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_keyboard_visibility.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/fluttertoast.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/local_auth_ios.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/maps_launcher.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/nanopb.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/open_filex.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/path_provider_foundation.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/speech_to_text.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CptShare.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Whiteboard.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ZoomTask.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ZoomVideoSDK.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/zm_annoter_dynamic.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/zoomcml.framework",
@ -499,7 +444,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
@ -524,7 +469,7 @@
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
IPHONEOS_DEPLOYMENT_TARGET = 15;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@ -592,7 +537,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
@ -643,7 +588,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
@ -670,7 +615,7 @@
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
IPHONEOS_DEPLOYMENT_TARGET = 15;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@ -706,7 +651,7 @@
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
IPHONEOS_DEPLOYMENT_TARGET = 15;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",

@ -5,7 +5,7 @@ import OpenTok
// Copyright © 2020 Cloud. All rights reserved.
@main
@objc class AppDelegate: FlutterAppDelegate ,ICallProtocol {
@objc class AppDelegate: FlutterAppDelegate ,ICallProtocol , FlutterImplicitEngineDelegate {
var result: FlutterResult?
@ -23,9 +23,12 @@ import OpenTok
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GeneratedPluginRegistrant.register(with: self)
// GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
func didInitializeImplicitFlutterEngine(_ engineBridge: FlutterImplicitEngineBridge) {
GeneratedPluginRegistrant.register(with: engineBridge.pluginRegistry)
}

@ -2,6 +2,27 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>UIApplicationSceneManifest</key>
<dict>
<key>UIApplicationSupportsMultipleScenes</key>
<false/>
<key>UISceneConfigurations</key>
<dict>
<key>UIWindowSceneSessionRoleApplication</key>
<array>
<dict>
<key>UISceneClassName</key>
<string>UIWindowScene</string>
<key>UISceneDelegateClassName</key>
<string>FlutterSceneDelegate</string>
<key>UISceneConfigurationName</key>
<string>flutter</string>
<key>UISceneStoryboardFile</key>
<string>Main</string>
</dict>
</array>
</dict>
</dict>
<key>CADisableMinimumFrameDurationOnPhone</key>
<true/>
<key>CFBundleDevelopmentRegion</key>

@ -1,5 +1,5 @@
import 'dart:io';
import 'package:local_auth_darwin/local_auth_darwin.dart';
import 'package:doctor_app_flutter/config/shared_pref_kay.dart';
import 'package:doctor_app_flutter/core/enum/auth_method_types.dart';
import 'package:doctor_app_flutter/core/enum/view_state.dart';
@ -30,7 +30,6 @@ import 'package:flutter/services.dart';
// import 'package:huawei_hmsavailability/huawei_hmsavailability.dart';
// import 'package:local_auth/auth_strings.dart';
import 'package:local_auth/local_auth.dart';
import 'package:local_auth_ios/local_auth_ios.dart';
enum APP_STATUS { LOADING, UNAUTHENTICATED, AUTHENTICATED, UNVERIFIED }
@ -279,15 +278,12 @@ class AuthenticationViewModel extends BaseViewModel {
/// ask user to add his biometric
showIOSAuthMessages() async {
const iosStrings = IOSAuthMessages(cancelButton: 'cancel', goToSettingsButton: 'settings', goToSettingsDescription: 'Please set up your Touch ID.', lockOut: 'Please Enable Your Touch ID');
final iosStrings = IOSAuthMessages(cancelButton: 'cancel', );
try {
await auth.authenticate(
localizedReason: 'Scan your fingerprint to authenticate',
authMessages: [iosStrings],
options: AuthenticationOptions(
useErrorDialogs: true,
stickyAuth: true,
),
);
} on PlatformException catch (e) {
DrAppToastMsg.showErrorToast(e.toString());

@ -80,7 +80,7 @@ class LineChartForDiabetic extends StatelessWidget {
return LineChartData(
lineTouchData: LineTouchData(
touchTooltipData: LineTouchTooltipData(
tooltipBgColor: Colors.white,
getTooltipColor: (LineBarSpot touchedSpot) => Colors.white,
),
touchCallback: (FlTouchEvent event, LineTouchResponse? touchResponse) {},
handleBuiltInTouches: true,

@ -86,7 +86,7 @@ class LineChartCurvedLabHistoryState extends State<LineChartCurvedLabHistory> {
return LineChartData(
lineTouchData: LineTouchData(
touchTooltipData: LineTouchTooltipData(
tooltipBgColor: Colors.white,
getTooltipColor: (LineBarSpot touchedSpot) => Colors.white,
),
touchCallback: (event, touchResponse) {},
handleBuiltInTouches: true,

@ -13,7 +13,8 @@ import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/errors/error_message.dart';
import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart';
import 'package:flutter/material.dart';
import 'package:flutter_html/flutter_html.dart';
import 'package:flutter_widget_from_html/flutter_widget_from_html.dart';
import 'package:provider/provider.dart';
class LaboratoryResultWidget extends StatefulWidget {
@ -264,7 +265,7 @@ class _LaboratoryResultWidgetState extends State<LaboratoryResultWidget> {
children: [
!Utils.isTextHtml(displayData)
? AppText(displayData)
: Html(data: displayData),
: HtmlWidget(displayData),
Visibility(
visible: widget.details?[index].IsLabTestAttachment ?? false,
child: Column(

@ -11,7 +11,7 @@ import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/errors/error_message.dart';
import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart';
import 'package:flutter/material.dart';
import 'package:flutter_html/flutter_html.dart';
import 'package:flutter_widget_from_html/flutter_widget_from_html.dart';
// import 'package:flutter_widget_from_html/flutter_widget_from_html.dart';
import '../../../../../config/size_config.dart';

@ -10,9 +10,11 @@ import 'package:doctor_app_flutter/widgets/shared/buttons/app_buttons_widget.dar
import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart';
import 'package:doctor_app_flutter/widgets/shared/text_fields/html_rich_editor.dart';
import 'package:flutter/material.dart';
import 'package:html_editor_enhanced/html_editor.dart';
import 'package:flutter_quill/flutter_quill.dart';
// import 'package:html_editor_plus/editor_plus.dart';
// import 'package:html_editor_enhanced/html_editor.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:vsc_quill_delta_to_html/vsc_quill_delta_to_html.dart';
import '../../../../config/config.dart';
class AddVerifyMedicalReport extends StatefulWidget {
@ -32,7 +34,7 @@ class AddVerifyMedicalReport extends StatefulWidget {
}
class _AddVerifyMedicalReportState extends State<AddVerifyMedicalReport> {
HtmlEditorController _controller = HtmlEditorController();
QuillController _controller = QuillController.basic();
@override
Widget build(BuildContext context) {
@ -93,7 +95,10 @@ class _AddVerifyMedicalReportState extends State<AddVerifyMedicalReport> {
// disabled: progressNoteController.text.isEmpty,
fontWeight: FontWeight.w700,
onPressed: () async {
txtOfMedicalReport = (await _controller.getText())!;
final converter = QuillDeltaToHtmlConverter(
List.castFrom(_controller.document.toDelta().toJson()),
);
txtOfMedicalReport = converter.convert();
if (txtOfMedicalReport.isNotEmpty) {
GifLoaderDialogUtils.showMyDialog(context);
@ -125,7 +130,10 @@ class _AddVerifyMedicalReportState extends State<AddVerifyMedicalReport> {
color: AppGlobal.appGreenColor,
fontWeight: FontWeight.w700,
onPressed: () async {
txtOfMedicalReport = (await _controller.getText())!;
final converter = QuillDeltaToHtmlConverter(
List.castFrom(_controller.document.toDelta().toJson()),
);
txtOfMedicalReport = converter.convert();
if (txtOfMedicalReport.isNotEmpty) {
GifLoaderDialogUtils.showMyDialog(context);
print("isVidaPlusProject: ${widget.isVidaPlusProject}");

@ -10,7 +10,7 @@ import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/errors/error_message.dart';
import 'package:flutter/material.dart';
import 'package:flutter_html/flutter_html.dart';
import 'package:flutter_widget_from_html/flutter_widget_from_html.dart';
import 'package:provider/provider.dart';
class MedicalReportDetailPage extends StatelessWidget {
@ -74,7 +74,7 @@ class MedicalReportDetailPage extends StatelessWidget {
),
),
),
child: Html(data: medicalReport.reportDataHtml ?? ""),
child: HtmlWidget(medicalReport.reportDataHtml ?? ""),
)
: Container(
child: ErrorMessage(

@ -139,7 +139,7 @@ class LineChartCurvedBloodPressureNew extends StatelessWidget {
return LineChartData(
lineTouchData: LineTouchData(
touchTooltipData: LineTouchTooltipData(
tooltipBgColor: Colors.white,
getTooltipColor: (LineBarSpot touchedSpot) => Colors.white,
),
touchCallback: (touchEvent, LineTouchResponse? touchResponse) {},
handleBuiltInTouches: true,

@ -100,7 +100,7 @@ class LineChartCurved extends StatelessWidget {
return LineChartData(
lineTouchData: LineTouchData(
touchTooltipData: LineTouchTooltipData(
tooltipBgColor: Colors.white,
getTooltipColor: (LineBarSpot touchedSpot) => Colors.white,
),
touchCallback: (event, LineTouchResponse? touchResponse) {},
handleBuiltInTouches: true,

@ -119,7 +119,7 @@ class LineChartCurvedBloodPressure extends StatelessWidget {
return LineChartData(
lineTouchData: LineTouchData(
touchTooltipData: LineTouchTooltipData(
tooltipBgColor: Colors.white,
getTooltipColor: (LineBarSpot touchedSpot) => Colors.white,
),
touchCallback: (event, LineTouchResponse? touchResponse) {},
handleBuiltInTouches: true,

@ -6,8 +6,8 @@ import 'package:dropdown_search/dropdown_search.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import '../../../widgets/shared/app_texts_widget.dart';
import '../../patients/profile/soap_update_vida_plus/assessment/widget/empty_dropdown.dart';
import 'package:material_ui/material_ui.dart' as decoration;
class PharmacyInterventionDialog extends StatefulWidget {
final Function(
@ -281,40 +281,36 @@ class _PharmacyInterventionDialogState
child: EmptyDropDown())
: Expanded(
child: DropdownSearch<NursingStationEntity>(
itemAsString:(item){
return item.description??'';
} ,
items: widget.station?.entityList ?? [],
itemAsString: (item) => item.description ?? '',
items: (filter, loadProps) => widget.station?.entityList ?? [],
compareFn: (a, b) => a.description == b.description, // see notes
popupProps: PopupProps.menu(
showSearchBox: true,
searchDelay: Duration(microseconds: 100),
searchDelay: const Duration(milliseconds: 100),
searchFieldProps: TextFieldProps(
decoration: InputDecoration(
border: UnderlineInputBorder(),
hintText: TranslationBase.of(context).search
)
)
decoration: decoration.InputDecoration(
border: decoration.UnderlineInputBorder(),
hintText: TranslationBase.of(context).search,
),
),
),
dropdownButtonProps: DropdownButtonProps(color: AppGlobal.appRedColor,),
dropdownDecoratorProps: DropDownDecoratorProps(
textAlignVertical: TextAlignVertical.center,
dropdownSearchDecoration: InputDecoration(
border: InputBorder.none
suffixProps: DropdownSuffixProps(
dropdownButtonProps: DropdownButtonProps(
iconClosed: Icon(Icons.arrow_drop_down, color: AppGlobal.appRedColor),
iconOpened: Icon(Icons.arrow_drop_up, color: AppGlobal.appRedColor),
),
baseStyle: TextStyle(
fontSize: 14
)
),
selectedItem: nursingStation == null
? widget.station?.entityList?.first
: nursingStation,
onChanged: (newValue) async {
if (newValue != null)
setState(() {
nursingStation = newValue ;
});
},
decoratorProps: DropDownDecoratorProps(
textAlignVertical: TextAlignVertical.center,
baseStyle: TextStyle(fontSize: 14),
decoration: decoration.InputDecoration(border: decoration.InputBorder.none),
),
selectedItem: nursingStation ?? widget.station?.entityList?.firstOrNull,
onSelected: (newValue) {
if (newValue != null) {
setState(() => nursingStation = newValue);
}
},
)
// DropdownButtonHideUnderline(
// child: DropdownButton(

@ -21,6 +21,7 @@ import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
import 'package:material_ui/material_ui.dart' as decoration;
Utils helpers = Utils();
@ -424,52 +425,60 @@ class _RescheduleLeaveScreen extends State<RescheduleLeaveScreen> {
model2.coveringDoctors.length > 0
? Expanded(
// add Expanded to have your dropdown button fill remaining space
child: DropdownSearch(
dropdownButtonProps: DropdownButtonProps(),
dropdownDecoratorProps: DropDownDecoratorProps(
dropdownSearchDecoration: InputDecoration(contentPadding: EdgeInsets.all(0), border: InputBorder.none),
child: DropdownSearch<String>(
items: (filter, loadProps) => model2.coveringDoctors
.map<String>((item) => (projectsProvider.isArabic
? item['doctorNameN']
: item['doctorName'])
.toString())
.toList(),
decoratorProps: const DropDownDecoratorProps(
decoration: decoration.InputDecoration(
contentPadding: EdgeInsets.zero,
border: decoration.InputBorder.none,
),
),
//maxHeight: 300,
items: model2.coveringDoctors.map((item) {
return projectsProvider.isArabic ? item['doctorNameN'] : item['doctorName'];
}).toList(),
// label: "Doctor List",
onChanged: (item) {
model2.coveringDoctors.forEach((newVal) => {if (newVal['doctorName'] == item) doctorID = newVal['DoctorID']});
},
selectedItem: getSelectedDoctor(model2),
onSelected: (item) {
final nameKey = projectsProvider.isArabic ? 'doctorNameN' : 'doctorName';
for (final doctor in model2.coveringDoctors) {
if (doctor[nameKey] == item) {
doctorID = doctor['DoctorID'];
}
}
},
popupProps: PopupProps.bottomSheet(
bottomSheetProps: BottomSheetProps(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(24),
topRight: Radius.circular(24),
),
showSearchBox: true,
bottomSheetProps: const BottomSheetProps(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(24),
topRight: Radius.circular(24),
),
),
title: Container(
height: 50,
decoration: BoxDecoration(
color: Theme.of(context).primaryColorDark,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(20),
topRight: Radius.circular(20),
),
),
title: Container(
height: 50,
decoration: BoxDecoration(
color: Theme.of(context).primaryColorDark,
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(20),
topRight: Radius.circular(20),
),
child: Center(
child: Text(
'',
style: TextStyle(
fontSize: 24,
fontWeight: FontWeight.bold,
color: Colors.white,
),
),
child: const Center(
child: Text(
'',
style: TextStyle(
fontSize: 24,
fontWeight: FontWeight.bold,
color: Colors.white,
),
),
),
showSearchBox: true),
),
),
),
)
)
: SizedBox(),
],

@ -2,7 +2,6 @@
import 'dart:async';
import 'dart:convert';
import 'package:doctor_app_flutter/screens/video_call_zoom/video_view.dart';
import 'package:events_emitter/events_emitter.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
@ -142,10 +141,10 @@ class _CallScreenState extends State<CallScreen> {
});
useEffect(() {
eventListener.addEventListener();
EventEmitter emitter = eventListener.eventEmitter;
final sessionJoinListener = emitter.on(EventType.onSessionJoin, (sessionUser) async {
final sessionJoinListener = emitter.addListener(EventType.onSessionJoin, (sessionUser) async {
isInSession.value = true;
zoom.session.getSessionName().then((value) => sessionName.value = value!);
sessionPassword.value = await zoom.session.getSessionPassword();
@ -165,7 +164,7 @@ class _CallScreenState extends State<CallScreen> {
isReceiveSpokenLanguageContentEnabled.value = await zoom.liveTranscriptionHelper.isReceiveSpokenLanguageContentEnabled();
});
final sessionLeaveListener = emitter.on(EventType.onSessionLeave, (data) async {
final sessionLeaveListener = emitter.addListener(EventType.onSessionLeave, (data) async {
isInSession.value = false;
users.value = <ZoomVideoSdkUser>[];
fullScreenUser.value = null;
@ -173,7 +172,7 @@ class _CallScreenState extends State<CallScreen> {
Navigator.pop(context);
});
final sessionNeedPasswordListener = emitter.on(EventType.onSessionNeedPassword, (data) async {
final sessionNeedPasswordListener = emitter.addListener(EventType.onSessionNeedPassword, (data) async {
showDialog<String>(
context: context,
builder: (BuildContext context) => AlertDialog(
@ -193,7 +192,7 @@ class _CallScreenState extends State<CallScreen> {
);
});
final sessionPasswordWrongListener = emitter.on(EventType.onSessionPasswordWrong, (data) async {
final sessionPasswordWrongListener = emitter.addListener(EventType.onSessionPasswordWrong, (data) async {
showDialog<String>(
context: context,
builder: (BuildContext context) => AlertDialog(
@ -213,7 +212,7 @@ class _CallScreenState extends State<CallScreen> {
);
});
final userVideoStatusChangedListener = emitter.on(EventType.onUserVideoStatusChanged, (data) async {
final userVideoStatusChangedListener = emitter.addListener(EventType.onUserVideoStatusChanged, (data) async {
data = data as Map;
ZoomVideoSdkUser? mySelf = await zoom.session.getMySelf();
var userListJson = jsonDecode(data['changedUsers']) as List;
@ -228,7 +227,7 @@ class _CallScreenState extends State<CallScreen> {
videoStatusFlag.value = !videoStatusFlag.value;
});
final userAudioStatusChangedListener = emitter.on(EventType.onUserAudioStatusChanged, (data) async {
final userAudioStatusChangedListener = emitter.addListener(EventType.onUserAudioStatusChanged, (data) async {
data = data as Map;
ZoomVideoSdkUser? mySelf = await zoom.session.getMySelf();
var userListJson = jsonDecode(data['changedUsers']) as List;
@ -243,7 +242,7 @@ class _CallScreenState extends State<CallScreen> {
audioStatusFlag.value = !audioStatusFlag.value;
});
final userShareStatusChangeListener = emitter.on(EventType.onUserShareStatusChanged, (data) async {
final userShareStatusChangeListener = emitter.addListener(EventType.onUserShareStatusChanged, (data) async {
data = data as Map;
ZoomVideoSdkUser? mySelf = await zoom.session.getMySelf();
ZoomVideoSdkUser shareUser = ZoomVideoSdkUser.fromJson(jsonDecode(data['user'].toString()));
@ -260,7 +259,7 @@ class _CallScreenState extends State<CallScreen> {
userShareStatusFlag.value = !userShareStatusFlag.value;
});
final userJoinListener = emitter.on(EventType.onUserJoin, (data) async {
final userJoinListener = emitter.addListener(EventType.onUserJoin, (data) async {
if (!isMounted()) return;
data = data as Map;
ZoomVideoSdkUser? mySelf = await zoom.session.getMySelf();
@ -271,7 +270,7 @@ class _CallScreenState extends State<CallScreen> {
fullScreenUser.value = remoteUserList[1];
});
final userLeaveListener = emitter.on(EventType.onUserLeave, (data) async {
final userLeaveListener = emitter.addListener(EventType.onUserLeave, (data) async {
if (!isMounted()) return;
ZoomVideoSdkUser? mySelf = await zoom.session.getMySelf();
data = data as Map;
@ -294,7 +293,7 @@ class _CallScreenState extends State<CallScreen> {
users.value = remoteUserList;
});
final userNameChangedListener = emitter.on(EventType.onUserNameChanged, (data) async {
final userNameChangedListener = emitter.addListener(EventType.onUserNameChanged, (data) async {
if (!isMounted()) return;
data = data as Map;
ZoomVideoSdkUser? changedUser = ZoomVideoSdkUser.fromJson(jsonDecode(data['changedUser']));
@ -308,27 +307,27 @@ class _CallScreenState extends State<CallScreen> {
userNameFlag.value = !userNameFlag.value;
});
final commandReceived = emitter.on(EventType.onCommandReceived, (data) async {
final commandReceived = emitter.addListener(EventType.onCommandReceived, (data) async {
data = data as Map;
debugPrint("sender: ${ZoomVideoSdkUser.fromJson(jsonDecode(data['sender']))}, command: ${data['command']}");
});
final chatDeleteMessageNotify = emitter.on(EventType.onChatDeleteMessageNotify, (data) async {
final chatDeleteMessageNotify = emitter.addListener(EventType.onChatDeleteMessageNotify, (data) async {
data = data as Map;
debugPrint("onChatDeleteMessageNotify: messageID: ${data['msgID']}, deleteBy: ${data['type']}");
});
final liveStreamStatusChangeListener = emitter.on(EventType.onLiveStreamStatusChanged, (data) async {
final liveStreamStatusChangeListener = emitter.addListener(EventType.onLiveStreamStatusChanged, (data) async {
data = data as Map;
debugPrint("onLiveStreamStatusChanged: status: ${data['status']}");
});
final liveTranscriptionStatusChangeListener = emitter.on(EventType.onLiveTranscriptionStatus, (data) async {
final liveTranscriptionStatusChangeListener = emitter.addListener(EventType.onLiveTranscriptionStatus, (data) async {
data = data as Map;
debugPrint("onLiveTranscriptionStatus: status: ${data['status']}");
});
final cloudRecordingStatusListener = emitter.on(EventType.onCloudRecordingStatus, (data) async {
final cloudRecordingStatusListener = emitter.addListener(EventType.onCloudRecordingStatus, (data) async {
data = data as Map;
debugPrint("onCloudRecordingStatus: status: ${data['status']}");
ZoomVideoSdkUser? mySelf = await zoom.session.getMySelf();
@ -380,18 +379,18 @@ class _CallScreenState extends State<CallScreen> {
}
});
final liveTranscriptionMsgInfoReceivedListener = emitter.on(EventType.onLiveTranscriptionMsgInfoReceived, (data) async {
final liveTranscriptionMsgInfoReceivedListener = emitter.addListener(EventType.onLiveTranscriptionMsgInfoReceived, (data) async {
data = data as Map;
ZoomVideoSdkLiveTranscriptionMessageInfo? messageInfo = ZoomVideoSdkLiveTranscriptionMessageInfo.fromJson(jsonDecode(data['messageInfo']));
debugPrint("onLiveTranscriptionMsgInfoReceived: content: ${messageInfo.messageContent}");
});
final inviteByPhoneStatusListener = emitter.on(EventType.onInviteByPhoneStatus, (data) async {
final inviteByPhoneStatusListener = emitter.addListener(EventType.onInviteByPhoneStatus, (data) async {
data = data as Map;
debugPrint("onInviteByPhoneStatus: status: ${data['status']}, reason: ${data['reason']}");
});
final multiCameraStreamStatusChangedListener = emitter.on(EventType.onMultiCameraStreamStatusChanged, (data) async {
final multiCameraStreamStatusChangedListener = emitter.addListener(EventType.onMultiCameraStreamStatusChanged, (data) async {
data = data as Map;
ZoomVideoSdkUser? changedUser = ZoomVideoSdkUser.fromJson(jsonDecode(data['changedUser']));
var status = data['status'];
@ -408,7 +407,7 @@ class _CallScreenState extends State<CallScreen> {
}
});
final requireSystemPermission = emitter.on(EventType.onRequireSystemPermission, (data) async {
final requireSystemPermission = emitter.addListener(EventType.onRequireSystemPermission, (data) async {
data = data as Map;
ZoomVideoSdkUser? changedUser = ZoomVideoSdkUser.fromJson(jsonDecode(data['changedUser']));
var permissionType = data['permissionType'];
@ -446,7 +445,7 @@ class _CallScreenState extends State<CallScreen> {
}
});
final networkStatusChangeListener = emitter.on(EventType.onUserVideoNetworkStatusChanged, (data) async {
final networkStatusChangeListener = emitter.addListener(EventType.onUserVideoNetworkStatusChanged, (data) async {
data = data as Map;
ZoomVideoSdkUser? networkUser = ZoomVideoSdkUser.fromJson(jsonDecode(data['user']));
@ -455,7 +454,7 @@ class _CallScreenState extends State<CallScreen> {
}
});
final eventErrorListener = emitter.on(
final eventErrorListener = emitter.addListener(
EventType.onError,
(data) async {
data = data as Map;
@ -487,24 +486,24 @@ class _CallScreenState extends State<CallScreen> {
},
);
final userRecordingConsentListener = emitter.on(EventType.onUserRecordingConsent, (data) async {
final userRecordingConsentListener = emitter.addListener(EventType.onUserRecordingConsent, (data) async {
data = data as Map;
ZoomVideoSdkUser? user = ZoomVideoSdkUser.fromJson(jsonDecode(data['user']));
debugPrint('userRecordingConsentListener: user= ${user.userName}');
});
final callCRCDeviceStatusListener = emitter.on(EventType.onCallCRCDeviceStatusChanged, (data) async {
final callCRCDeviceStatusListener = emitter.addListener(EventType.onCallCRCDeviceStatusChanged, (data) async {
data = data as Map;
debugPrint('onCallCRCDeviceStatusChanged: status = ${data['status']}');
});
final originalLanguageMsgReceivedListener = emitter.on(EventType.onOriginalLanguageMsgReceived, (data) async {
final originalLanguageMsgReceivedListener = emitter.addListener(EventType.onOriginalLanguageMsgReceived, (data) async {
data = data as Map;
ZoomVideoSdkLiveTranscriptionMessageInfo? messageInfo = ZoomVideoSdkLiveTranscriptionMessageInfo.fromJson(jsonDecode(data['messageInfo']));
debugPrint("onOriginalLanguageMsgReceived: content: ${messageInfo.messageContent}");
});
final chatPrivilegeChangedListener = emitter.on(EventType.onChatPrivilegeChanged, (data) async {
final chatPrivilegeChangedListener = emitter.addListener(EventType.onChatPrivilegeChanged, (data) async {
data = data as Map;
String type = data['privilege'];
debugPrint('chatPrivilegeChangedListener: type= $type');

@ -4,11 +4,13 @@ import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart';
import 'package:doctor_app_flutter/utils/translations_delegate_base_utils.dart';
import 'package:flutter/material.dart';
import 'package:html_editor_enhanced/html_editor.dart';
import 'package:flutter_quill/flutter_quill.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:provider/provider.dart';
import 'package:speech_to_text/speech_recognition_error.dart';
import 'package:speech_to_text/speech_to_text.dart' as stt;
import 'package:vsc_quill_delta_to_html/vsc_quill_delta_to_html.dart';
import '../speech-text-popup.dart';
@ -19,8 +21,8 @@ class HtmlRichEditor extends StatefulWidget {
final BoxDecoration? decoration;
final bool darkMode;
final bool showBottomToolbar;
final List<Toolbar>? toolbar;
final HtmlEditorController? controller;
final dynamic toolbar;
final QuillController? controller;
HtmlRichEditor({
key,
@ -63,34 +65,67 @@ class _HtmlRichEditorState extends State<HtmlRichEditor> {
return Stack(
children: [
HtmlEditor(
controller: widget.controller!,
htmlToolbarOptions: HtmlToolbarOptions(defaultToolbarButtons: [
StyleButtons(),
FontSettingButtons(),
FontButtons(),
// ColorButtons(),
ListButtons(),
ParagraphButtons(),
// InsertButtons(),
// OtherButtons(),
]),
htmlEditorOptions: HtmlEditorOptions(
hint: widget.hint,
initialText: widget.initialText,
darkMode: widget.darkMode,
// Toolbar
Column(
children: [
QuillSimpleToolbar(
controller: widget.controller!,
config: const QuillSimpleToolbarConfig(
showFontFamily: false,
showSearchButton: false,
showSubscript: false,
showSuperscript: false,
multiRowsDisplay: false, // single scrollable row
),
),
otherOptions: OtherOptions(
height: widget.height,
decoration: widget.decoration ??
BoxDecoration(
color: Colors.transparent,
borderRadius: BorderRadius.all(
Radius.circular(30.0),
),
border: Border.all(color: Colors.grey[200]!, width: 0.5),
const Divider(height: 1),
Expanded(
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: QuillEditor(
controller: widget.controller!,
focusNode: FocusNode(),
scrollController:ScrollController(),
config: const QuillEditorConfig(
placeholder: 'Start writing...',
padding: EdgeInsets.symmetric(vertical: 12),
expands: false,
autoFocus: false,
),
)),
),
),
),
],
),
// HtmlEditor(
// controller: widget.controller!,
// // htmlToolbarOptions: HtmlToolbarOptions(defaultToolbarButtons: [
// // StyleButtons(),
// // FontSettingButtons(),
// // FontButtons(),
// // // ColorButtons(),
// // ListButtons(),
// // ParagraphButtons(),
// // // InsertButtons(),
// // // OtherButtons(),
// // ]),
// // htmlEditorOptions: HtmlEditorOptions(
// // hint: widget.hint,
// // initialText: widget.initialText,
// // darkMode: widget.darkMode,
// // ),
// // otherOptions: OtherOptions(
// // height: widget.height,
// // decoration: widget.decoration ??
// // BoxDecoration(
// // color: Colors.transparent,
// // borderRadius: BorderRadius.all(
// // Radius.circular(30.0),
// // ),
// // border: Border.all(color: Colors.grey[200]!, width: 0.5),
// // ),
// // )
// ),
Positioned(
top: 50, //MediaQuery.of(context).size.height * 0,
right: projectViewModel.isArabic ? MediaQuery.of(context).size.width * 0.75 : 15,
@ -142,10 +177,10 @@ class _HtmlRichEditorState extends State<HtmlRichEditor> {
void resultListener(result) async {
recognizedWord = result.recognizedWords;
event.setValue({"searchText": recognizedWord});
String txt = await widget.controller!.getText();
String txt = _getHtml();
if (result.finalResult == true) {
setState(() {
widget.controller!.setText(txt + recognizedWord);
appendToEnd(widget.controller!, recognizedWord);
SpeechToText.closeAlertDialog(context);
// speech.stop();
});
@ -154,6 +189,23 @@ class _HtmlRichEditorState extends State<HtmlRichEditor> {
}
}
void appendToEnd(QuillController controller, String text) {
final index = controller.document.length - 1; // position before the final '\n'
controller.replaceText(
index,
0,
text,
TextSelection.collapsed(offset: index + text.length),
);
}
String _getHtml() {
final delta = List<Map<String, dynamic>>.from(
widget.controller!.document.toDelta().toJson(),
);
return QuillDeltaToHtmlConverter(delta, ConverterOptions()).convert();
}
Future<void> initSpeechState() async {
bool hasSpeech = await speech.initialize(onError: errorListener, onStatus: statusListener);
print(hasSpeech);

@ -6,10 +6,14 @@
#include "generated_plugin_registrant.h"
#include <file_selector_linux/file_selector_plugin.h>
#include <maps_launcher/maps_launcher_plugin.h>
#include <url_launcher_linux/url_launcher_plugin.h>
void fl_register_plugins(FlPluginRegistry* registry) {
g_autoptr(FlPluginRegistrar) file_selector_linux_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin");
file_selector_plugin_register_with_registrar(file_selector_linux_registrar);
g_autoptr(FlPluginRegistrar) maps_launcher_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "MapsLauncherPlugin");
maps_launcher_plugin_register_with_registrar(maps_launcher_registrar);

@ -3,11 +3,13 @@
#
list(APPEND FLUTTER_PLUGIN_LIST
file_selector_linux
maps_launcher
url_launcher_linux
)
list(APPEND FLUTTER_FFI_PLUGIN_LIST
jni
)
set(PLUGIN_BUNDLED_LIBRARIES)

@ -7,14 +7,16 @@ import Foundation
import audio_session
import connectivity_plus
import file_picker
import file_selector_macos
import firebase_analytics
import firebase_core
import firebase_messaging
import flutter_inappwebview_macos
import just_audio
import local_auth_darwin
import maps_launcher
import package_info_plus
import path_provider_foundation
import quill_native_bridge_macos
import shared_preferences_foundation
import speech_to_text
import sqflite_darwin
@ -26,14 +28,16 @@ import webview_flutter_wkwebview
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
AudioSessionPlugin.register(with: registry.registrar(forPlugin: "AudioSessionPlugin"))
ConnectivityPlusPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlusPlugin"))
FLTFirebaseAnalyticsPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseAnalyticsPlugin"))
FilePickerPlugin.register(with: registry.registrar(forPlugin: "FilePickerPlugin"))
FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin"))
FirebaseAnalyticsPlugin.register(with: registry.registrar(forPlugin: "FirebaseAnalyticsPlugin"))
FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin"))
FLTFirebaseMessagingPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseMessagingPlugin"))
InAppWebViewFlutterPlugin.register(with: registry.registrar(forPlugin: "InAppWebViewFlutterPlugin"))
JustAudioPlugin.register(with: registry.registrar(forPlugin: "JustAudioPlugin"))
LocalAuthPlugin.register(with: registry.registrar(forPlugin: "LocalAuthPlugin"))
MapsLauncherPlugin.register(with: registry.registrar(forPlugin: "MapsLauncherPlugin"))
FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
QuillNativeBridgePlugin.register(with: registry.registrar(forPlugin: "QuillNativeBridgePlugin"))
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
SpeechToTextPlugin.register(with: registry.registrar(forPlugin: "SpeechToTextPlugin"))
SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))

File diff suppressed because it is too large Load Diff

@ -35,13 +35,13 @@ dependencies:
shared_preferences: ^2.5.3
# imei_plugin: ^1.2.0
# flutter_flexible_toast: ^0.1.4
fluttertoast: ^8.2.12
local_auth: 2.1.8
local_auth_android: ^1.0.48
fluttertoast: ^10.0.0
local_auth: ^3.0.2
local_auth_android: ^2.2.0
http_interceptor: any
# connectivity: ^3.0.6
connectivity_plus: ^6.1.4
connectivity_plus: ^7.3.1
maps_launcher: ^3.0.0+1
url_launcher: ^6.3.2
url_launcher_ios: ^6.3.2
@ -54,7 +54,7 @@ dependencies:
#Icons
eva_icons_flutter: ^4.0.0
font_awesome_flutter: ^11.0.0
dropdown_search: ^5.0.6
dropdown_search: ^8.1.0
flutter_staggered_grid_view: ^0.7.0
expandable: ^5.0.1
@ -62,7 +62,7 @@ dependencies:
# Qr code Scanner
barcode_scan2: ^4.5.1
# permissions
permission_handler: ^11.1.0
permission_handler: 13.0.1
# device_info: ^2.0.2
# The following adds the Cupertino Icons font to your application.
@ -74,14 +74,14 @@ dependencies:
percent_indicator: ^4.2.3
#Dependency Injection
get_it: ^7.6.4
get_it: ^9.3.0
#chart
fl_chart: ^0.65.0
fl_chart: ^1.2.0
# Firebase
firebase_messaging: ^14.7.5
firebase_analytics : ^10.7.1
firebase_messaging: ^16.7.0
firebase_analytics : ^12.6.0
# cloud_firestore: ^4.15.8
#GIF image
@ -91,17 +91,17 @@ dependencies:
#Autocomplete TextField
autocomplete_textfield: ^2.0.1
date_time_picker: ^2.0.0
flutter_datetime_picker_plus: ^2.1.0
flutter_datetime_picker_plus: ^3.0.1
# Html
html: ^0.15.4
numberpicker: ^2.1.2
# Flutter Html View
flutter_html: ^3.0.0-beta.2
# flutter_html: ^3.0.0-beta.2
sticky_headers: ^0.3.0+2
file_picker: ^8.1.3
file_picker: ^10.3.10
#speech to text
# speech_to_text:
@ -114,20 +114,25 @@ dependencies:
# Html Editor Enhanced
#html_editor_enhanced: any
html_editor_enhanced: ^2.6.0
# html_editor_enhanced: ^2.7.1
# html_editor_plus: ^0.0.7
flutter_quill: ^11.6.0
flutter_quill_extensions: ^11.0.0
flutter_quill_delta_from_html: ^1.5.3
vsc_quill_delta_to_html: ^1.0.5
jhijri_picker: ^1.0.1
jhijri: ^1.0.0
#Network Image
cached_network_image: ^3.4.1
cached_network_image: ^4.0.4
# Badges
badges: ^3.1.2
badges: ^4.0.1
# Hijri
# hijri: ^2.0.3
hijri_picker: ^3.0.0
hijri_picker: ^5.0.0
#flutter_datetime_picker: ^1.5.1
localization: ^2.1.1
@ -136,16 +141,16 @@ dependencies:
flutter_math_fork: ^0.7.2
# cloudflare_turnstile: ^3.0.1
flutter_zoom_videosdk: 1.12.10
dart_jsonwebtoken: ^2.14.0
two_dimensional_scrollables: ^0.3.3
timezone: ^0.10.1
flutter_zoom_videosdk: ^2.5.10
dart_jsonwebtoken: ^3.4.1
two_dimensional_scrollables: ^0.5.5
timezone: ^0.11.1
logger: ^2.6.1
freerasp: ^8.2.1
safe_device: ^1.4.1
path_provider: ^2.0.8
open_filex: ^4.7.0
flutter_widget_from_html: ^0.17.1
flutter_widget_from_html: ^0.17.4
dependency_overrides:
@ -155,6 +160,7 @@ dependency_overrides:
flutter_plugin_android_lifecycle: 2.0.27
#hijri_picker: ^3.0.0
path_provider: ^2.1.5
# permission_handler_android: 13.0.1
dev_dependencies:

@ -7,26 +7,29 @@
#include "generated_plugin_registrant.h"
#include <connectivity_plus/connectivity_plus_windows_plugin.h>
#include <file_selector_windows/file_selector_windows.h>
#include <firebase_core/firebase_core_plugin_c_api.h>
#include <flutter_inappwebview_windows/flutter_inappwebview_windows_plugin_c_api.h>
#include <local_auth_windows/local_auth_plugin.h>
#include <maps_launcher/maps_launcher_plugin.h>
#include <permission_handler_windows/permission_handler_windows_plugin.h>
#include <speech_to_text_windows/speech_to_text_windows.h>
#include <url_launcher_windows/url_launcher_windows.h>
void RegisterPlugins(flutter::PluginRegistry* registry) {
ConnectivityPlusWindowsPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("ConnectivityPlusWindowsPlugin"));
FileSelectorWindowsRegisterWithRegistrar(
registry->GetRegistrarForPlugin("FileSelectorWindows"));
FirebaseCorePluginCApiRegisterWithRegistrar(
registry->GetRegistrarForPlugin("FirebaseCorePluginCApi"));
FlutterInappwebviewWindowsPluginCApiRegisterWithRegistrar(
registry->GetRegistrarForPlugin("FlutterInappwebviewWindowsPluginCApi"));
LocalAuthPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("LocalAuthPlugin"));
MapsLauncherPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("MapsLauncherPlugin"));
PermissionHandlerWindowsPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin"));
SpeechToTextWindowsRegisterWithRegistrar(
registry->GetRegistrarForPlugin("SpeechToTextWindows"));
UrlLauncherWindowsRegisterWithRegistrar(
registry->GetRegistrarForPlugin("UrlLauncherWindows"));
}

@ -4,15 +4,17 @@
list(APPEND FLUTTER_PLUGIN_LIST
connectivity_plus
file_selector_windows
firebase_core
flutter_inappwebview_windows
local_auth_windows
maps_launcher
permission_handler_windows
speech_to_text_windows
url_launcher_windows
)
list(APPEND FLUTTER_FFI_PLUGIN_LIST
jni
)
set(PLUGIN_BUNDLED_LIBRARIES)

Loading…
Cancel
Save