diff --git a/android/app/build.gradle b/android/app/build.gradle
index f0a830b..4b8ceb6 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -54,8 +54,8 @@ android {
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
minSdk = 23
targetSdk = flutter.targetSdkVersion
- versionCode = 111
- versionName = '1.5.11'
+ versionCode = 113
+ versionName = '1.5.13'
multiDexEnabled =true
}
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
index a496cb0..284eee8 100644
--- a/ios/Podfile.lock
+++ b/ios/Podfile.lock
@@ -68,6 +68,13 @@ PODS:
- Mantle
- SDWebImage
- SDWebImageWebPCoder
+ - flutter_inappwebview_ios (0.0.1):
+ - Flutter
+ - flutter_inappwebview_ios/Core (= 0.0.1)
+ - OrderedSet (~> 6.0.3)
+ - flutter_inappwebview_ios/Core (0.0.1):
+ - Flutter
+ - OrderedSet (~> 6.0.3)
- flutter_local_notifications (0.0.1):
- Flutter
- flutter_secure_storage (6.0.0):
@@ -202,6 +209,7 @@ PODS:
- nanopb/encode (= 2.30910.0)
- nanopb/decode (2.30910.0)
- nanopb/encode (2.30910.0)
+ - OrderedSet (6.0.3)
- package_info_plus (0.4.5):
- Flutter
- path_provider_foundation (0.0.1):
@@ -275,6 +283,7 @@ PODS:
- Flutter
- webview_flutter_wkwebview (0.0.1):
- Flutter
+ - FlutterMacOS
DEPENDENCIES:
- audio_session (from `.symlinks/plugins/audio_session/ios`)
@@ -287,6 +296,7 @@ DEPENDENCIES:
- Flutter (from `Flutter`)
- flutter_contacts (from `.symlinks/plugins/flutter_contacts/ios`)
- flutter_image_compress_common (from `.symlinks/plugins/flutter_image_compress_common/ios`)
+ - flutter_inappwebview_ios (from `.symlinks/plugins/flutter_inappwebview_ios/ios`)
- flutter_local_notifications (from `.symlinks/plugins/flutter_local_notifications/ios`)
- flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`)
- flutter_tts (from `.symlinks/plugins/flutter_tts/ios`)
@@ -312,7 +322,7 @@ DEPENDENCIES:
- vibration (from `.symlinks/plugins/vibration/ios`)
- video_player_avfoundation (from `.symlinks/plugins/video_player_avfoundation/darwin`)
- wakelock_plus (from `.symlinks/plugins/wakelock_plus/ios`)
- - webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/ios`)
+ - webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/darwin`)
SPEC REPOS:
trunk:
@@ -341,6 +351,7 @@ SPEC REPOS:
- MLKitTextRecognitionCommon
- MLKitVision
- nanopb
+ - OrderedSet
- PromisesObjC
- RecaptchaInterop
- SDWebImage
@@ -376,6 +387,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/flutter_contacts/ios"
flutter_image_compress_common:
:path: ".symlinks/plugins/flutter_image_compress_common/ios"
+ flutter_inappwebview_ios:
+ :path: ".symlinks/plugins/flutter_inappwebview_ios/ios"
flutter_local_notifications:
:path: ".symlinks/plugins/flutter_local_notifications/ios"
flutter_secure_storage:
@@ -427,7 +440,7 @@ EXTERNAL SOURCES:
wakelock_plus:
:path: ".symlinks/plugins/wakelock_plus/ios"
webview_flutter_wkwebview:
- :path: ".symlinks/plugins/webview_flutter_wkwebview/ios"
+ :path: ".symlinks/plugins/webview_flutter_wkwebview/darwin"
SPEC CHECKSUMS:
AppAuth: 501c04eda8a8d11f179dbe8637b7a91bb7e5d2fa
@@ -448,6 +461,7 @@ SPEC CHECKSUMS:
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
flutter_contacts: edb1c5ce76aa433e20e6cb14c615f4c0b66e0983
flutter_image_compress_common: ec1d45c362c9d30a3f6a0426c297f47c52007e3e
+ flutter_inappwebview_ios: 6f63631e2c62a7c350263b13fa5427aedefe81d4
flutter_local_notifications: 4cde75091f6327eb8517fa068a0a5950212d2086
flutter_secure_storage: d33dac7ae2ea08509be337e775f6b59f1ff45f12
flutter_tts: 0f492aab6accf87059b72354fcb4ba934304771d
@@ -478,6 +492,7 @@ SPEC CHECKSUMS:
MLKitTextRecognitionCommon: c0b3a63d529296a19bce1f8bc8a513644ed4d1f6
MLKitVision: e858c5f125ecc288e4a31127928301eaba9ae0c1
nanopb: 438bc412db1928dac798aa6fd75726007be04262
+ OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94
package_info_plus: 58f0028419748fad15bf008b270aaa8e54380b1c
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2
@@ -503,7 +518,7 @@ SPEC CHECKSUMS:
vibration: 7d883d141656a1c1a6d8d238616b2042a51a1241
video_player_avfoundation: 7c6c11d8470e1675df7397027218274b6d2360b3
wakelock_plus: 78ec7c5b202cab7761af8e2b2b3d0671be6c4ae1
- webview_flutter_wkwebview: 2a23822e9039b7b1bc52e5add778e5d89ad488d1
+ webview_flutter_wkwebview: 0982481e3d9c78fd5c6f62a002fcd24fc791f1e4
PODFILE CHECKSUM: d9271c147dd54ffd9ca5d77bf00ca21a1c9a5961
diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist
index 26de01b..8d7a39e 100644
--- a/ios/Runner/Info.plist
+++ b/ios/Runner/Info.plist
@@ -35,7 +35,7 @@
CFBundlePackageType
APPL
CFBundleShortVersionString
- 70
+ 72
CFBundleSignature
????
CFBundleURLTypes
@@ -50,7 +50,7 @@
CFBundleVersion
- 4.0.70
+ 4.0.72
FirebaseAppDelegateProxyEnabled
NO
GMSApiKey
diff --git a/lib/controller/auth/captin/register_captin_controller.dart b/lib/controller/auth/captin/register_captin_controller.dart
index 5ab0ea6..087cbd9 100644
--- a/lib/controller/auth/captin/register_captin_controller.dart
+++ b/lib/controller/auth/captin/register_captin_controller.dart
@@ -314,6 +314,9 @@ class RegisterCaptainController extends GetxController {
// Get.snackbar('title', 'message');
// }
}
+ } else {
+ Get.snackbar('Error'.tr, 'you must insert token code '.tr,
+ backgroundColor: AppColor.redColor);
}
}
diff --git a/lib/controller/firebase/firbase_messge.dart b/lib/controller/firebase/firbase_messge.dart
index 26211c4..152129e 100644
--- a/lib/controller/firebase/firbase_messge.dart
+++ b/lib/controller/firebase/firbase_messge.dart
@@ -2,6 +2,7 @@ import 'dart:convert';
import 'dart:io';
import 'package:SEFER/controller/home/captin/home_captain_controller.dart';
import 'package:SEFER/env/env.dart';
+import 'package:SEFER/print.dart';
import 'package:SEFER/views/widgets/mydialoug.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart';
@@ -68,6 +69,7 @@ class FirebaseMessagesController extends GetxController {
Future getToken() async {
fcmToken.getToken().then((token) {
+ // Log.print('token: ${token}');
box.write(BoxName.tokenDriver, token);
});
diff --git a/lib/controller/functions/overlay_permisssion.dart b/lib/controller/functions/overlay_permisssion.dart
index 5e65557..057e55e 100644
--- a/lib/controller/functions/overlay_permisssion.dart
+++ b/lib/controller/functions/overlay_permisssion.dart
@@ -29,9 +29,11 @@ Future getPermissionOverlay() async {
}
Future closeOverlayIfFound() async {
- bool isOverlayActive = await FlutterOverlayWindow.isActive();
- if (isOverlayActive) {
- await FlutterOverlayWindow.closeOverlay();
+ if (Platform.isAndroid) {
+ bool isOverlayActive = await FlutterOverlayWindow.isActive();
+ if (isOverlayActive) {
+ await FlutterOverlayWindow.closeOverlay();
+ }
}
}
diff --git a/lib/controller/home/captin/help/video_controller.dart b/lib/controller/home/captin/help/video_controller.dart
new file mode 100644
index 0000000..6f57f8c
--- /dev/null
+++ b/lib/controller/home/captin/help/video_controller.dart
@@ -0,0 +1,68 @@
+import 'dart:convert';
+
+import 'package:SEFER/constant/links.dart';
+import 'package:SEFER/controller/functions/crud.dart';
+import 'package:SEFER/print.dart';
+import 'package:get/get.dart';
+import 'package:video_player/video_player.dart';
+
+class VideoController extends GetxController {
+ var videos = [];
+ var isLoading = true.obs;
+ final String apiUrl =
+ '${AppLink.seferCairoServer}/ride/videos_driver/get.php';
+
+ @override
+ void onInit() {
+ fetchVideos();
+ super.onInit();
+ }
+
+ late VideoPlayerController videoPlayerController;
+
+ // Initialize the video player with the provided URL
+ Future initializeVideo(String videoUrl) async {
+ videoPlayerController =
+ VideoPlayerController.networkUrl(Uri.parse(videoUrl));
+ await videoPlayerController.initialize();
+ videoPlayerController
+ .setLooping(true); // Set to true if you want the video to loop
+ update(); // Update the UI after the video has been initialized
+ }
+
+ // Play the video
+ void play() {
+ videoPlayerController.play();
+ update();
+ }
+
+ // Pause the video
+ void pause() {
+ videoPlayerController.pause();
+ update();
+ }
+
+ @override
+ void onClose() {
+ videoPlayerController
+ .dispose(); // Dispose of the video player controller when not in use
+ super.onClose();
+ }
+
+ void fetchVideos() async {
+ try {
+ var res = await CRUD().get(link: apiUrl, payload: {});
+ if (res != 'failure') {
+ videos = jsonDecode(res)['message'];
+ // Log.print('videos: ${videos}');
+ update();
+ } else {
+ Get.snackbar('Error'.tr, '');
+ }
+ } catch (e) {
+ Get.snackbar("Error", e.toString());
+ } finally {
+ isLoading(false);
+ }
+ }
+}
diff --git a/lib/controller/home/captin/map_driver_controller.dart b/lib/controller/home/captin/map_driver_controller.dart
index 1655976..3c5133c 100644
--- a/lib/controller/home/captin/map_driver_controller.dart
+++ b/lib/controller/home/captin/map_driver_controller.dart
@@ -364,7 +364,7 @@ class MapDriverController extends GetxController {
double _distance =
await calculateDistanceBetweenDriverAndPassengerLocation();
- if (_distance < 70) {
+ if (_distance < 400) {
changeRideToBeginToPassenger();
isPassengerInfoWindow = false;
isRideStarted = true;
@@ -400,7 +400,7 @@ class MapDriverController extends GetxController {
// var d = jsonDecode(res);
update();
- Get.back();
+ // Get.back();
// Start updating location and moving camera
// updateLocation();
} else {
diff --git a/lib/controller/local/translations.dart b/lib/controller/local/translations.dart
index 196f0f8..81205de 100644
--- a/lib/controller/local/translations.dart
+++ b/lib/controller/local/translations.dart
@@ -203,6 +203,8 @@ class MyTranslation extends Translations {
"إذا كنت بحاجة إلى المساعدة، تواصل معنا",
'You Can Cancel the Trip and get Cost From ':
"يمكنك إلغاء الرحلة والحصول على التكلفة من",
+
+ 'Videos Tutorials': "فيديوهات تعليمية",
'Please go to the pickup location exactly':
"يرجى الذهاب إلى موقع الالتقاط بالضبط",
"Approaching your area. Should be there in 3 minutes.":
@@ -305,6 +307,7 @@ class MyTranslation extends Translations {
"History Page": "سجل الرحلات ",
"Finished": "مكتملة",
"Trip Detail": "تفاصيل الرحلة",
+ 'you must insert token code ': 'يجب إدخال رمز التحقق',
"Invite code already used": "تم استخدام رمز الدعوة بالفعل",
"Price is": "السعر",
"Times of Trip": "أوقات الرحلة",
diff --git a/lib/views/home/Captin/About Us/video_page.dart b/lib/views/home/Captin/About Us/video_page.dart
new file mode 100644
index 0000000..69eb52c
--- /dev/null
+++ b/lib/views/home/Captin/About Us/video_page.dart
@@ -0,0 +1,193 @@
+import 'package:SEFER/constant/info.dart';
+import 'package:flutter/material.dart';
+import 'package:get/get.dart';
+import 'package:video_player/video_player.dart';
+import 'package:youtube_player_flutter/youtube_player_flutter.dart';
+
+import '../../../../controller/home/captin/help/video_controller.dart';
+
+import 'package:flutter/cupertino.dart';
+
+class VideoListPage extends StatelessWidget {
+ final VideoController videoController = Get.put(VideoController());
+
+ @override
+ Widget build(BuildContext context) {
+ return CupertinoPageScaffold(
+ navigationBar: CupertinoNavigationBar(
+ middle: Text('Videos Tutorials'.tr),
+ ),
+ child: SafeArea(
+ child: Padding(
+ padding: const EdgeInsets.symmetric(
+ horizontal: 16.0,
+ vertical: 10.0), // Outer padding around the list
+ child: GetBuilder(
+ builder: (videoController) {
+ return ListView.builder(
+ itemCount: videoController.videos.length,
+ itemBuilder: (context, index) {
+ final video = videoController.videos[index];
+ return Container(
+ margin: const EdgeInsets.symmetric(
+ vertical: 8.0), // Spacing between each card
+ decoration: BoxDecoration(
+ color: CupertinoColors.white,
+ borderRadius:
+ BorderRadius.circular(12.0), // Rounded corners
+ boxShadow: [
+ BoxShadow(
+ color: CupertinoColors.systemGrey.withOpacity(0.3),
+ offset: const Offset(
+ 0, 4), // Offset for shadow to appear below
+ blurRadius: 10.0, // Blur for softer shadow effect
+ ),
+ ],
+ border: Border.all(
+ color: CupertinoColors.systemGrey4,
+ width: 0.5, // Subtle border for a refined iOS-like look
+ ),
+ ),
+ child: CupertinoListTile(
+ title: Padding(
+ padding: const EdgeInsets.only(bottom: 4.0),
+ child: Text(
+ video['title'],
+ style: const TextStyle(
+ color: CupertinoColors.black,
+ fontWeight: FontWeight.bold,
+ ),
+ ),
+ ),
+ subtitle: Text(
+ video['description'],
+ style: const TextStyle(
+ color: CupertinoColors.systemGrey,
+ ),
+ ),
+ onTap: () {
+ // Navigate to video player page (iOS-style)
+ Get.to(() => VideoPlayerPage1(videoUrl: video['url']));
+ },
+ ),
+ );
+ },
+ );
+ },
+ ),
+ ),
+ ),
+ );
+ }
+}
+
+class VideoPlayerPage extends StatelessWidget {
+ final String videoUrl;
+
+ VideoPlayerPage({required this.videoUrl});
+
+ final VideoController videoController = Get.put(VideoController());
+
+ @override
+ Widget build(BuildContext context) {
+ // Initialize the video when the page is loaded
+ videoController.initializeVideo(videoUrl);
+
+ return CupertinoPageScaffold(
+ navigationBar: const CupertinoNavigationBar(
+ middle: Text(AppInformation.appName),
+ ),
+ child: SafeArea(
+ child: Center(
+ child: GetBuilder(
+ builder: (controller) {
+ if (!controller.videoPlayerController.value.isInitialized) {
+ return const CircularProgressIndicator(); // Show loading indicator while initializing
+ }
+
+ return Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ // Video player widget
+ AspectRatio(
+ aspectRatio:
+ controller.videoPlayerController.value.aspectRatio,
+ // child: VideoPlayer(controller.videoPlayerController),
+ child: VideoPlayer(controller.videoPlayerController),
+ ),
+ const SizedBox(height: 20),
+
+ // Play/pause button
+ CupertinoButton(
+ onPressed: () {
+ if (controller.videoPlayerController.value.isPlaying) {
+ controller.pause();
+ } else {
+ controller.play();
+ }
+ },
+ child: Icon(
+ controller.videoPlayerController.value.isPlaying
+ ? CupertinoIcons.pause
+ : CupertinoIcons.play_arrow,
+ color: CupertinoColors.activeBlue,
+ size: 30,
+ ),
+ ),
+ ],
+ );
+ },
+ ),
+ ),
+ ),
+ );
+ }
+}
+
+class VideoPlayerPage1 extends StatelessWidget {
+ final String videoUrl;
+
+ VideoPlayerPage1({required this.videoUrl});
+
+ @override
+ Widget build(BuildContext context) {
+ // Extract the video ID from the URL
+ String videoId = YoutubePlayer.convertUrlToId(videoUrl)!;
+
+ // Create a YoutubePlayerController
+ final YoutubePlayerController _controller = YoutubePlayerController(
+ initialVideoId: videoId,
+ flags: const YoutubePlayerFlags(
+ autoPlay: true,
+ loop: true,
+ mute: false,
+ captionLanguage: 'ar',
+ ),
+ );
+
+ return Scaffold(
+ body: Stack(
+ children: [
+ // Full-screen YouTube player
+ Positioned.fill(
+ child: YoutubePlayer(
+ controller: _controller,
+ showVideoProgressIndicator: true,
+ ),
+ ),
+ // Overlay back button in the top left corner for exit
+ Positioned(
+ top: 40.0,
+ left: 16.0,
+ child: IconButton(
+ icon: const Icon(Icons.arrow_back, color: Colors.white),
+ onPressed: () {
+ Navigator.pop(context);
+ },
+ ),
+ ),
+ ],
+ ),
+ );
+ }
+}
diff --git a/lib/views/home/Captin/home_captain/drawer_captain.dart b/lib/views/home/Captin/home_captain/drawer_captain.dart
index 1ae48cf..7b21e99 100644
--- a/lib/views/home/Captin/home_captain/drawer_captain.dart
+++ b/lib/views/home/Captin/home_captain/drawer_captain.dart
@@ -19,6 +19,7 @@ import 'package:SEFER/views/notification/notification_captain.dart';
import '../../../../constant/colors.dart';
import '../../../../controller/functions/upload_image.dart';
+import '../About Us/video_page.dart';
import '../assurance_health_page.dart';
import '../maintain_center_page.dart';
import 'package:flutter/cupertino.dart';
@@ -97,7 +98,13 @@ class CupertinoDrawerCaptain extends StatelessWidget {
_buildDrawerItem(
icon: CupertinoIcons.mail,
text: "Contact Us".tr,
- onTap: () => Get.to(() => ContactUsPage()),
+ onTap: () => Get.to(() => const SettingsCaptain()),
+ ),
+ _buildDivider(),
+ _buildDrawerItem(
+ icon: CupertinoIcons.settings,
+ text: 'Videos Tutorials'.tr,
+ onTap: () => Get.to(() => VideoListPage()),
),
_buildDivider(),
_buildDrawerItem(
diff --git a/lib/views/home/Captin/mapDriverWidgets/passenger_info_window.dart b/lib/views/home/Captin/mapDriverWidgets/passenger_info_window.dart
index 6a38d5b..8f45804 100644
--- a/lib/views/home/Captin/mapDriverWidgets/passenger_info_window.dart
+++ b/lib/views/home/Captin/mapDriverWidgets/passenger_info_window.dart
@@ -453,6 +453,7 @@ class PassengerInfoWindow extends StatelessWidget {
() async {
await controller
.startRideFromDriver();
+ Get.back();
// Close dialog after confirmation
},
);
@@ -467,7 +468,7 @@ class PassengerInfoWindow extends StatelessWidget {
onPressed: () async {
if (await controller
.calculateDistanceBetweenDriverAndPassengerLocation() <
- 40) {
+ 140) {
// Notify Passenger
FirebaseMessagesController()
.sendNotificationToPassengerToken(
diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift
index 1a3c0b5..ec70da1 100644
--- a/macos/Flutter/GeneratedPluginRegistrant.swift
+++ b/macos/Flutter/GeneratedPluginRegistrant.swift
@@ -12,6 +12,7 @@ import firebase_auth
import firebase_core
import firebase_messaging
import flutter_image_compress_macos
+import flutter_inappwebview_macos
import flutter_local_notifications
import flutter_secure_storage_macos
import flutter_tts
@@ -27,6 +28,7 @@ import sqflite
import url_launcher_macos
import video_player_avfoundation
import wakelock_plus
+import webview_flutter_wkwebview
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
AudioSessionPlugin.register(with: registry.registrar(forPlugin: "AudioSessionPlugin"))
@@ -36,6 +38,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin"))
FLTFirebaseMessagingPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseMessagingPlugin"))
FlutterImageCompressMacosPlugin.register(with: registry.registrar(forPlugin: "FlutterImageCompressMacosPlugin"))
+ InAppWebViewFlutterPlugin.register(with: registry.registrar(forPlugin: "InAppWebViewFlutterPlugin"))
FlutterLocalNotificationsPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalNotificationsPlugin"))
FlutterSecureStoragePlugin.register(with: registry.registrar(forPlugin: "FlutterSecureStoragePlugin"))
FlutterTtsPlugin.register(with: registry.registrar(forPlugin: "FlutterTtsPlugin"))
@@ -51,4 +54,5 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
FVPVideoPlayerPlugin.register(with: registry.registrar(forPlugin: "FVPVideoPlayerPlugin"))
WakelockPlusMacosPlugin.register(with: registry.registrar(forPlugin: "WakelockPlusMacosPlugin"))
+ FLTWebViewFlutterPlugin.register(with: registry.registrar(forPlugin: "FLTWebViewFlutterPlugin"))
}
diff --git a/pubspec.lock b/pubspec.lock
index 022a572..8bb52d5 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -630,6 +630,62 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.1.4+1"
+ flutter_inappwebview:
+ dependency: transitive
+ description:
+ name: flutter_inappwebview
+ sha256: "3e9a443a18ecef966fb930c3a76ca5ab6a7aafc0c7b5e14a4a850cf107b09959"
+ url: "https://pub.dev"
+ source: hosted
+ version: "6.0.0"
+ flutter_inappwebview_android:
+ dependency: transitive
+ description:
+ name: flutter_inappwebview_android
+ sha256: "62557c15a5c2db5d195cb3892aab74fcaec266d7b86d59a6f0027abd672cddba"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.3"
+ flutter_inappwebview_internal_annotations:
+ dependency: transitive
+ description:
+ name: flutter_inappwebview_internal_annotations
+ sha256: "5f80fd30e208ddded7dbbcd0d569e7995f9f63d45ea3f548d8dd4c0b473fb4c8"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.1"
+ flutter_inappwebview_ios:
+ dependency: transitive
+ description:
+ name: flutter_inappwebview_ios
+ sha256: "5818cf9b26cf0cbb0f62ff50772217d41ea8d3d9cc00279c45f8aabaa1b4025d"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.2"
+ flutter_inappwebview_macos:
+ dependency: transitive
+ description:
+ name: flutter_inappwebview_macos
+ sha256: c1fbb86af1a3738e3541364d7d1866315ffb0468a1a77e34198c9be571287da1
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.2"
+ flutter_inappwebview_platform_interface:
+ dependency: transitive
+ description:
+ name: flutter_inappwebview_platform_interface
+ sha256: cf5323e194096b6ede7a1ca808c3e0a078e4b33cc3f6338977d75b4024ba2500
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.0+1"
+ flutter_inappwebview_web:
+ dependency: transitive
+ description:
+ name: flutter_inappwebview_web
+ sha256: d8c680abfb6fec71609a700199635d38a744df0febd5544c5a020bd73de8ee07
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.8"
flutter_launcher_icons:
dependency: "direct main"
description:
@@ -2052,13 +2108,13 @@ packages:
source: hosted
version: "0.0.1"
video_player:
- dependency: transitive
+ dependency: "direct main"
description:
name: video_player
- sha256: e30df0d226c4ef82e2c150ebf6834b3522cf3f654d8e2f9419d376cdc071425d
+ sha256: "4a8c3492d734f7c39c2588a3206707a05ee80cef52e8c7f3b2078d430c84bc17"
url: "https://pub.dev"
source: hosted
- version: "2.9.1"
+ version: "2.9.2"
video_player_android:
dependency: transitive
description:
@@ -2151,10 +2207,10 @@ packages:
dependency: "direct main"
description:
name: webview_flutter
- sha256: "6869c8786d179f929144b4a1f86e09ac0eddfe475984951ea6c634774c16b522"
+ sha256: ec81f57aa1611f8ebecf1d2259da4ef052281cb5ad624131c93546c79ccc7736
url: "https://pub.dev"
source: hosted
- version: "4.8.0"
+ version: "4.9.0"
webview_flutter_android:
dependency: transitive
description:
@@ -2175,10 +2231,10 @@ packages:
dependency: transitive
description:
name: webview_flutter_wkwebview
- sha256: "9c62cc46fa4f2d41e10ab81014c1de470a6c6f26051a2de32111b2ee55287feb"
+ sha256: d4034901d96357beb1b6717ebf7d583c88e40cfc6eb85fe76dd1bf0979a9f251
url: "https://pub.dev"
source: hosted
- version: "3.14.0"
+ version: "3.16.0"
win32:
dependency: transitive
description:
@@ -2219,6 +2275,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "3.1.2"
+ youtube_player_flutter:
+ dependency: "direct main"
+ description:
+ name: youtube_player_flutter
+ sha256: "30f84e2f7063c56e536f507e37c1e803546842707cf58e5b5a71253b9ff9b455"
+ url: "https://pub.dev"
+ source: hosted
+ version: "9.0.4"
sdks:
- dart: ">=3.4.0 <4.0.0"
- flutter: ">=3.22.0"
+ dart: ">=3.5.0 <4.0.0"
+ flutter: ">=3.24.0"
diff --git a/pubspec.yaml b/pubspec.yaml
index b1b39a9..179d613 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -73,7 +73,7 @@ dependencies:
# ref: main
record: ^5.0.5
dio: ^5.4.3+1
- webview_flutter: ^4.7.0
+ webview_flutter: ^4.9.0
just_audio: ^0.9.37
share: ^2.0.4
google_sign_in: ^6.2.1
@@ -85,6 +85,8 @@ dependencies:
flutter_contacts: ^1.1.8
flutter_overlay_window: ^0.4.4
googleapis_auth: ^1.6.0
+ video_player: ^2.9.2
+ youtube_player_flutter: ^9.0.4
dev_dependencies:
flutter_test: