🐛 Bug fixes and optimization
This commit is contained in:
		
							
								
								
									
										30
									
								
								.metadata
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								.metadata
									
									
									
									
									
								
							| @@ -4,7 +4,7 @@ | ||||
| # This file should be version controlled and should not be manually edited. | ||||
|  | ||||
| version: | ||||
|   revision: "54e66469a933b60ddf175f858f82eaeb97e48c8d" | ||||
|   revision: "a14f74ff3a1cbd521163c5f03d68113d50af93d3" | ||||
|   channel: "stable" | ||||
|  | ||||
| project_type: app | ||||
| @@ -13,26 +13,26 @@ project_type: app | ||||
| migration: | ||||
|   platforms: | ||||
|     - platform: root | ||||
|       create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d | ||||
|       base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d | ||||
|       create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 | ||||
|       base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 | ||||
|     - platform: android | ||||
|       create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d | ||||
|       base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d | ||||
|       create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 | ||||
|       base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 | ||||
|     - platform: ios | ||||
|       create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d | ||||
|       base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d | ||||
|       create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 | ||||
|       base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 | ||||
|     - platform: linux | ||||
|       create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d | ||||
|       base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d | ||||
|       create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 | ||||
|       base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 | ||||
|     - platform: macos | ||||
|       create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d | ||||
|       base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d | ||||
|       create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 | ||||
|       base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 | ||||
|     - platform: web | ||||
|       create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d | ||||
|       base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d | ||||
|       create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 | ||||
|       base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 | ||||
|     - platform: windows | ||||
|       create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d | ||||
|       base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d | ||||
|       create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 | ||||
|       base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 | ||||
|  | ||||
|   # User provided section | ||||
|  | ||||
|   | ||||
| @@ -1,65 +1,64 @@ | ||||
| plugins { | ||||
|     id "com.android.application" | ||||
|     // START: FlutterFire Configuration | ||||
|     id 'com.google.gms.google-services' | ||||
|     // END: FlutterFire Configuration | ||||
|     id "kotlin-android" | ||||
|     id "dev.flutter.flutter-gradle-plugin" | ||||
| } | ||||
|  | ||||
| def localProperties = new Properties() | ||||
| def localPropertiesFile = rootProject.file('local.properties') | ||||
| def localPropertiesFile = rootProject.file("local.properties") | ||||
| if (localPropertiesFile.exists()) { | ||||
|     localPropertiesFile.withReader('UTF-8') { reader -> | ||||
|     localPropertiesFile.withReader("UTF-8") { reader -> | ||||
|         localProperties.load(reader) | ||||
|     } | ||||
| } | ||||
|  | ||||
| def flutterVersionCode = localProperties.getProperty('flutter.versionCode') | ||||
| def flutterVersionCode = localProperties.getProperty("flutter.versionCode") | ||||
| if (flutterVersionCode == null) { | ||||
|     flutterVersionCode = '1' | ||||
|     flutterVersionCode = "1" | ||||
| } | ||||
|  | ||||
| def flutterVersionName = localProperties.getProperty('flutter.versionName') | ||||
| def flutterVersionName = localProperties.getProperty("flutter.versionName") | ||||
| if (flutterVersionName == null) { | ||||
|     flutterVersionName = '1.0' | ||||
|     flutterVersionName = "1.0" | ||||
| } | ||||
|  | ||||
| android { | ||||
|     namespace "dev.solsynth.solian" | ||||
|     compileSdk flutter.compileSdkVersion | ||||
|     ndkVersion flutter.ndkVersion | ||||
|     namespace = "dev.solsynth.solian" | ||||
|     compileSdk = flutter.compileSdkVersion | ||||
|     ndkVersion = flutter.ndkVersion | ||||
|  | ||||
|     defaultConfig { | ||||
|         multiDexEnabled true | ||||
|     } | ||||
|  | ||||
|     compileOptions { | ||||
|         sourceCompatibility JavaVersion.VERSION_1_8 | ||||
|         targetCompatibility JavaVersion.VERSION_1_8 | ||||
|     } | ||||
|  | ||||
|     kotlinOptions { | ||||
|         jvmTarget = '1.8' | ||||
|     } | ||||
|  | ||||
|     sourceSets { | ||||
|         main.java.srcDirs += 'src/main/kotlin' | ||||
|         coreLibraryDesugaringEnabled true | ||||
|         sourceCompatibility = JavaVersion.VERSION_1_8 | ||||
|         targetCompatibility = JavaVersion.VERSION_1_8 | ||||
|     } | ||||
|  | ||||
|     defaultConfig { | ||||
|         applicationId "dev.solsynth.solian" | ||||
|         minSdkVersion flutter.minSdkVersion | ||||
|         targetSdkVersion flutter.targetSdkVersion | ||||
|         versionCode flutterVersionCode.toInteger() | ||||
|         versionName flutterVersionName | ||||
|         applicationId = "dev.solsynth.solian" | ||||
|         // You can update the following values to match your application needs. | ||||
|         // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. | ||||
|         minSdk = flutter.minSdkVersion | ||||
|         targetSdk = flutter.targetSdkVersion | ||||
|         versionCode = flutterVersionCode.toInteger() | ||||
|         versionName = flutterVersionName | ||||
|     } | ||||
|  | ||||
|     buildTypes { | ||||
|         release { | ||||
|             signingConfig signingConfigs.debug | ||||
|             signingConfig = signingConfigs.debug | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| flutter { | ||||
|     source '../..' | ||||
| dependencies { | ||||
|     coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4' | ||||
| } | ||||
|  | ||||
| dependencies {} | ||||
| flutter { | ||||
|     source = "../.." | ||||
| } | ||||
|   | ||||
| @@ -13,21 +13,33 @@ | ||||
|     <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" /> | ||||
|     <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" /> | ||||
|  | ||||
|     <meta-data | ||||
|         android:name="firebase_messaging_auto_init_enabled" | ||||
|         android:value="false" /> | ||||
|     <meta-data | ||||
|         android:name="firebase_analytics_collection_enabled" | ||||
|         android:value="false" /> | ||||
|  | ||||
|     <application | ||||
|         android:label="Solian" | ||||
|         android:label="solian" | ||||
|         android:name="${applicationName}" | ||||
|         android:icon="@mipmap/launcher_icon"> | ||||
|         android:icon="@mipmap/launcher_icon" | ||||
|         android:supportsRtl="true"> | ||||
|         <receiver android:exported="false" android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationReceiver" /> | ||||
|         <receiver android:exported="false" android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver"> | ||||
|             <intent-filter> | ||||
|                 <action android:name="android.intent.action.BOOT_COMPLETED"/> | ||||
|                 <action android:name="android.intent.action.MY_PACKAGE_REPLACED"/> | ||||
|                 <action android:name="android.intent.action.QUICKBOOT_POWERON" /> | ||||
|                 <action android:name="com.htc.intent.action.QUICKBOOT_POWERON"/> | ||||
|             </intent-filter> | ||||
|         </receiver> | ||||
|  | ||||
|         <meta-data | ||||
|             android:name="firebase_messaging_auto_init_enabled" | ||||
|             android:value="false" /> | ||||
|         <meta-data | ||||
|             android:name="firebase_analytics_collection_enabled" | ||||
|             android:value="false" /> | ||||
|  | ||||
|         <activity | ||||
|             android:name=".MainActivity" | ||||
|             android:exported="true" | ||||
|             android:launchMode="singleTop" | ||||
|             android:taskAffinity="" | ||||
|             android:theme="@style/LaunchTheme" | ||||
|             android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" | ||||
|             android:hardwareAccelerated="true" | ||||
| @@ -37,12 +49,12 @@ | ||||
|                  while the Flutter UI initializes. After that, this theme continues | ||||
|                  to determine the Window background behind the Flutter UI. --> | ||||
|             <meta-data | ||||
|                 android:name="io.flutter.embedding.android.NormalTheme" | ||||
|                 android:resource="@style/NormalTheme" | ||||
|             /> | ||||
|               android:name="io.flutter.embedding.android.NormalTheme" | ||||
|               android:resource="@style/NormalTheme" | ||||
|               /> | ||||
|             <intent-filter> | ||||
|                 <action android:name="android.intent.action.MAIN" /> | ||||
|                 <category android:name="android.intent.category.LAUNCHER" /> | ||||
|                 <action android:name="android.intent.action.MAIN"/> | ||||
|                 <category android:name="android.intent.category.LAUNCHER"/> | ||||
|             </intent-filter> | ||||
|         </activity> | ||||
|         <!-- Don't delete the meta-data below. | ||||
| @@ -52,14 +64,14 @@ | ||||
|             android:value="2" /> | ||||
|     </application> | ||||
|     <!-- Required to query activities that can process text, see: | ||||
|          https://developer.android.com/training/package-visibility?hl=en and | ||||
|          https://developer.android.com/training/package-visibility and | ||||
|          https://developer.android.com/reference/android/content/Intent#ACTION_PROCESS_TEXT. | ||||
|  | ||||
|          In particular, this is used by the Flutter engine in io.flutter.plugin.text.ProcessTextPlugin. --> | ||||
|     <queries> | ||||
|         <intent> | ||||
|             <action android:name="android.intent.action.PROCESS_TEXT" /> | ||||
|             <data android:mimeType="text/plain" /> | ||||
|             <action android:name="android.intent.action.PROCESS_TEXT"/> | ||||
|             <data android:mimeType="text/plain"/> | ||||
|         </intent> | ||||
|     </queries> | ||||
| </manifest> | ||||
| </manifest> | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| package com.example.solian | ||||
| package dev.solsynth.solian | ||||
| 
 | ||||
| import io.flutter.embedding.android.FlutterActivity | ||||
| 
 | ||||
| @@ -5,12 +5,12 @@ allprojects { | ||||
|     } | ||||
| } | ||||
|  | ||||
| rootProject.buildDir = '../build' | ||||
| rootProject.buildDir = "../build" | ||||
| subprojects { | ||||
|     project.buildDir = "${rootProject.buildDir}/${project.name}" | ||||
| } | ||||
| subprojects { | ||||
|     project.evaluationDependsOn(':app') | ||||
|     project.evaluationDependsOn(":app") | ||||
| } | ||||
|  | ||||
| tasks.register("clean", Delete) { | ||||
|   | ||||
| @@ -1,3 +1,6 @@ | ||||
| org.gradle.jvmargs=-Xmx4G | ||||
| org.gradle.jvmargs=-Xmx4G -XX:+HeapDumpOnOutOfMemoryError | ||||
| android.useAndroidX=true | ||||
| android.enableJetifier=true | ||||
| android.defaults.buildfeatures.buildconfig=true | ||||
| android.nonTransitiveRClass=false | ||||
| android.nonFinalResIds=false | ||||
|   | ||||
| @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME | ||||
| distributionPath=wrapper/dists | ||||
| zipStoreBase=GRADLE_USER_HOME | ||||
| zipStorePath=wrapper/dists | ||||
| distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip | ||||
| distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-all.zip | ||||
|   | ||||
| @@ -5,10 +5,9 @@ pluginManagement { | ||||
|         def flutterSdkPath = properties.getProperty("flutter.sdk") | ||||
|         assert flutterSdkPath != null, "flutter.sdk not set in local.properties" | ||||
|         return flutterSdkPath | ||||
|     } | ||||
|     settings.ext.flutterSdkPath = flutterSdkPath() | ||||
|     }() | ||||
|  | ||||
|     includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle") | ||||
|     includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") | ||||
|  | ||||
|     repositories { | ||||
|         google() | ||||
| @@ -19,10 +18,8 @@ pluginManagement { | ||||
|  | ||||
| plugins { | ||||
|     id "dev.flutter.flutter-plugin-loader" version "1.0.0" | ||||
|     id "com.android.application" version "7.3.0" apply false | ||||
|     // START: FlutterFire Configuration | ||||
|     id "com.android.application" version '8.4.0' apply false | ||||
|     id "com.google.gms.google-services" version "4.3.15" apply false | ||||
|     // END: FlutterFire Configuration | ||||
|     id "org.jetbrains.kotlin.android" version "1.7.10" apply false | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -2,8 +2,6 @@ PODS: | ||||
|   - connectivity_plus (0.0.1): | ||||
|     - Flutter | ||||
|     - FlutterMacOS | ||||
|   - device_info (0.0.1): | ||||
|     - Flutter | ||||
|   - device_info_plus (0.0.1): | ||||
|     - Flutter | ||||
|   - DKImagePickerController/Core (4.3.9): | ||||
| @@ -111,7 +109,7 @@ PODS: | ||||
|     - GoogleUtilities/Privacy | ||||
|   - image_picker_ios (0.0.1): | ||||
|     - Flutter | ||||
|   - livekit_client (2.1.5): | ||||
|   - livekit_client (2.1.6): | ||||
|     - Flutter | ||||
|     - WebRTC-SDK (= 114.5735.10) | ||||
|   - nanopb (2.30910.0): | ||||
| @@ -126,8 +124,6 @@ PODS: | ||||
|     - FlutterMacOS | ||||
|   - permission_handler_apple (9.3.0): | ||||
|     - Flutter | ||||
|   - platform_device_id (0.0.1): | ||||
|     - Flutter | ||||
|   - PromisesObjC (2.4.0) | ||||
|   - SDWebImage (5.19.2): | ||||
|     - SDWebImage/Core (= 5.19.2) | ||||
| @@ -152,7 +148,6 @@ PODS: | ||||
|  | ||||
| DEPENDENCIES: | ||||
|   - connectivity_plus (from `.symlinks/plugins/connectivity_plus/darwin`) | ||||
|   - device_info (from `.symlinks/plugins/device_info/ios`) | ||||
|   - device_info_plus (from `.symlinks/plugins/device_info_plus/ios`) | ||||
|   - file_picker (from `.symlinks/plugins/file_picker/ios`) | ||||
|   - firebase_core (from `.symlinks/plugins/firebase_core/ios`) | ||||
| @@ -166,7 +161,6 @@ DEPENDENCIES: | ||||
|   - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) | ||||
|   - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) | ||||
|   - permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`) | ||||
|   - platform_device_id (from `.symlinks/plugins/platform_device_id/ios`) | ||||
|   - sentry_flutter (from `.symlinks/plugins/sentry_flutter/ios`) | ||||
|   - sqflite (from `.symlinks/plugins/sqflite/darwin`) | ||||
|   - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) | ||||
| @@ -194,8 +188,6 @@ SPEC REPOS: | ||||
| EXTERNAL SOURCES: | ||||
|   connectivity_plus: | ||||
|     :path: ".symlinks/plugins/connectivity_plus/darwin" | ||||
|   device_info: | ||||
|     :path: ".symlinks/plugins/device_info/ios" | ||||
|   device_info_plus: | ||||
|     :path: ".symlinks/plugins/device_info_plus/ios" | ||||
|   file_picker: | ||||
| @@ -222,8 +214,6 @@ EXTERNAL SOURCES: | ||||
|     :path: ".symlinks/plugins/path_provider_foundation/darwin" | ||||
|   permission_handler_apple: | ||||
|     :path: ".symlinks/plugins/permission_handler_apple/ios" | ||||
|   platform_device_id: | ||||
|     :path: ".symlinks/plugins/platform_device_id/ios" | ||||
|   sentry_flutter: | ||||
|     :path: ".symlinks/plugins/sentry_flutter/ios" | ||||
|   sqflite: | ||||
| @@ -237,7 +227,6 @@ EXTERNAL SOURCES: | ||||
|  | ||||
| SPEC CHECKSUMS: | ||||
|   connectivity_plus: ddd7f30999e1faaef5967c23d5b6d503d10434db | ||||
|   device_info: d7d233b645a32c40dfdc212de5cf646ca482f175 | ||||
|   device_info_plus: 97af1d7e84681a90d0693e63169a5d50e0839a0d | ||||
|   DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c | ||||
|   DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60 | ||||
| @@ -256,12 +245,11 @@ SPEC CHECKSUMS: | ||||
|   GoogleDataTransport: 6c09b596d841063d76d4288cc2d2f42cc36e1e2a | ||||
|   GoogleUtilities: ea963c370a38a8069cc5f7ba4ca849a60b6d7d15 | ||||
|   image_picker_ios: c560581cceedb403a6ff17f2f816d7fea1421fc1 | ||||
|   livekit_client: e6adadd527ee8e52fff579498467ee89921d99f6 | ||||
|   livekit_client: 72da4281bddb8bda3d275f49b46e9a2046d57c58 | ||||
|   nanopb: 438bc412db1928dac798aa6fd75726007be04262 | ||||
|   package_info_plus: 58f0028419748fad15bf008b270aaa8e54380b1c | ||||
|   path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 | ||||
|   permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2 | ||||
|   platform_device_id: 81b3e2993881f87d0c82ef151dc274df4869aef5 | ||||
|   PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 | ||||
|   SDWebImage: dfe95b2466a9823cf9f0c6d01217c06550d7b29a | ||||
|   Sentry: 51b056d96914a741f63eca774d118678b1eb05a1 | ||||
|   | ||||
| @@ -3,11 +3,15 @@ import Flutter | ||||
|  | ||||
| @UIApplicationMain | ||||
| @objc class AppDelegate: FlutterAppDelegate { | ||||
|   override func application( | ||||
|     _ application: UIApplication, | ||||
|     didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? | ||||
|   ) -> Bool { | ||||
|     GeneratedPluginRegistrant.register(with: self) | ||||
|     return super.application(application, didFinishLaunchingWithOptions: launchOptions) | ||||
|   } | ||||
|     override func application( | ||||
|         _ application: UIApplication, | ||||
|         didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? | ||||
|     ) -> Bool { | ||||
|         GeneratedPluginRegistrant.register(with: self) | ||||
|         return super.application(application, didFinishLaunchingWithOptions: launchOptions) | ||||
|     } | ||||
|      | ||||
|     override func applicationDidBecomeActive(_ application: UIApplication) { | ||||
|         application.applicationIconBadgeNumber = 0; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -9,22 +9,12 @@ extension SolianExtenions on BuildContext { | ||||
|   } | ||||
|  | ||||
|   Future<void> showErrorDialog(dynamic exception) { | ||||
|     String formatMessage(dynamic exception) { | ||||
|       final message = exception.toString(); | ||||
|       if (message.trim().isEmpty) return ''; | ||||
|       return message | ||||
|           .split(' ') | ||||
|           .map((element) => | ||||
|               '${element[0].toUpperCase()}${element.substring(1).toLowerCase()}') | ||||
|           .join(' '); | ||||
|     } | ||||
|  | ||||
|     return showDialog<void>( | ||||
|       useRootNavigator: true, | ||||
|       context: this, | ||||
|       builder: (ctx) => AlertDialog( | ||||
|         title: Text('errorHappened'.tr), | ||||
|         content: Text(formatMessage(exception)), | ||||
|         content: Text(exception.toString().capitalize!), | ||||
|         actions: [ | ||||
|           TextButton( | ||||
|             onPressed: () => Navigator.pop(ctx), | ||||
|   | ||||
| @@ -6,8 +6,6 @@ class Notification { | ||||
|   String subject; | ||||
|   String content; | ||||
|   List<Link>? links; | ||||
|   bool isImportant; | ||||
|   bool isRealtime; | ||||
|   DateTime? readAt; | ||||
|   int? senderId; | ||||
|   int recipientId; | ||||
| @@ -20,8 +18,6 @@ class Notification { | ||||
|     required this.subject, | ||||
|     required this.content, | ||||
|     required this.links, | ||||
|     required this.isImportant, | ||||
|     required this.isRealtime, | ||||
|     required this.readAt, | ||||
|     required this.senderId, | ||||
|     required this.recipientId, | ||||
| @@ -41,8 +37,6 @@ class Notification { | ||||
|         links: json['links'] != null | ||||
|             ? List<Link>.from(json['links'].map((x) => Link.fromJson(x))) | ||||
|             : List.empty(), | ||||
|         isImportant: json['is_important'], | ||||
|         isRealtime: json['is_realtime'], | ||||
|         readAt: json['read_at'], | ||||
|         senderId: json['sender_id'], | ||||
|         recipientId: json['recipient_id'], | ||||
| @@ -58,8 +52,6 @@ class Notification { | ||||
|         'links': links != null | ||||
|             ? List<dynamic>.from(links!.map((x) => x.toJson())) | ||||
|             : List.empty(), | ||||
|         'is_important': isImportant, | ||||
|         'is_realtime': isRealtime, | ||||
|         'read_at': readAt, | ||||
|         'sender_id': senderId, | ||||
|         'recipient_id': recipientId, | ||||
|   | ||||
| @@ -1,11 +1,12 @@ | ||||
| import 'dart:async'; | ||||
| import 'dart:convert'; | ||||
| import 'dart:developer'; | ||||
| import 'dart:io'; | ||||
| import 'dart:math' as math; | ||||
|  | ||||
| import 'package:device_info_plus/device_info_plus.dart'; | ||||
| import 'package:firebase_messaging/firebase_messaging.dart'; | ||||
| import 'package:get/get.dart'; | ||||
| import 'package:permission_handler/permission_handler.dart'; | ||||
| import 'package:platform_device_id/platform_device_id.dart'; | ||||
| import 'package:solian/models/notification.dart'; | ||||
| import 'package:solian/models/packet.dart'; | ||||
| import 'package:solian/models/pagination.dart'; | ||||
| @@ -30,7 +31,14 @@ class AccountProvider extends GetxController { | ||||
|  | ||||
|   @override | ||||
|   onInit() { | ||||
|     Permission.notification.request().then((status) { | ||||
|     FirebaseMessaging.instance | ||||
|         .requestPermission( | ||||
|             alert: true, | ||||
|             announcement: true, | ||||
|             carPlay: true, | ||||
|             badge: true, | ||||
|             sound: true) | ||||
|         .then((status) { | ||||
|       notifyInitialization(); | ||||
|       notifyPrefetch(); | ||||
|     }); | ||||
| @@ -94,7 +102,7 @@ class AccountProvider extends GetxController { | ||||
|       }, | ||||
|       onDone: () { | ||||
|         isConnected.value = false; | ||||
|         Future.delayed(const Duration(seconds: 3), () => connect()); | ||||
|         Future.delayed(const Duration(seconds: 1), () => connect()); | ||||
|       }, | ||||
|       onError: (err) { | ||||
|         isConnected.value = false; | ||||
| @@ -175,7 +183,11 @@ class AccountProvider extends GetxController { | ||||
|  | ||||
|     late final String? token; | ||||
|     late final String provider; | ||||
|     final deviceUuid = await PlatformDeviceId.getDeviceId; | ||||
|     final deviceUuid = await _getDeviceUuid(); | ||||
|  | ||||
|     if (deviceUuid == null) { | ||||
|       log("Unable to active push notifications, couldn't get device uuid"); | ||||
|     } | ||||
|  | ||||
|     if (PlatformInfo.isIOS || PlatformInfo.isMacOS) { | ||||
|       provider = "apple"; | ||||
| @@ -196,4 +208,31 @@ class AccountProvider extends GetxController { | ||||
|       throw Exception(resp.bodyString); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   Future<String?> _getDeviceUuid() async { | ||||
|     DeviceInfoPlugin deviceInfo = DeviceInfoPlugin(); | ||||
|     if (PlatformInfo.isWeb) { | ||||
|       final WebBrowserInfo webInfo = await deviceInfo.webBrowserInfo; | ||||
|       return webInfo.vendor! + | ||||
|           webInfo.userAgent! + | ||||
|           webInfo.hardwareConcurrency.toString(); | ||||
|     } | ||||
|     if (PlatformInfo.isAndroid) { | ||||
|       final AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo; | ||||
|       return androidInfo.id; | ||||
|     } | ||||
|     if (PlatformInfo.isIOS) { | ||||
|       final IosDeviceInfo iosInfo = await deviceInfo.iosInfo; | ||||
|       return iosInfo.identifierForVendor!; | ||||
|     } | ||||
|     if (PlatformInfo.isLinux) { | ||||
|       final LinuxDeviceInfo linuxInfo = await deviceInfo.linuxInfo; | ||||
|       return linuxInfo.machineId!; | ||||
|     } | ||||
|     if (PlatformInfo.isWindows) { | ||||
|       final WindowsDeviceInfo windowsInfo = await deviceInfo.windowsInfo; | ||||
|       return windowsInfo.deviceId; | ||||
|     } | ||||
|     return null; | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -63,7 +63,7 @@ class ChatProvider extends GetxController { | ||||
|       }, | ||||
|       onDone: () { | ||||
|         isConnected.value = false; | ||||
|         Future.delayed(const Duration(seconds: 3), () => connect()); | ||||
|         Future.delayed(const Duration(seconds: 1), () => connect()); | ||||
|       }, | ||||
|       onError: (err) { | ||||
|         isConnected.value = false; | ||||
|   | ||||
| @@ -1,7 +1,6 @@ | ||||
| import 'dart:async'; | ||||
|  | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:flutter_background/flutter_background.dart'; | ||||
| import 'package:get/get.dart'; | ||||
| import 'package:livekit_client/livekit_client.dart'; | ||||
| import 'package:permission_handler/permission_handler.dart'; | ||||
| @@ -44,9 +43,6 @@ class ChatCallProvider extends GetxController { | ||||
|     if (lkPlatformIs(PlatformType.macOS) || lkPlatformIs(PlatformType.linux)) { | ||||
|       return; | ||||
|     } | ||||
|     if (lkPlatformIs(PlatformType.android)) { | ||||
|       FlutterBackground.enableBackgroundExecution(); | ||||
|     } | ||||
|  | ||||
|     await Permission.camera.request(); | ||||
|     await Permission.microphone.request(); | ||||
|   | ||||
| @@ -78,9 +78,9 @@ class _AccountScreenState extends State<AccountScreen> { | ||||
|               ); | ||||
|             } | ||||
|  | ||||
|             return Column( | ||||
|             return ListView( | ||||
|               children: [ | ||||
|                 const AccountHeading().paddingOnly(bottom: 8), | ||||
|                 const AccountHeading().paddingOnly(bottom: 8, top: 16), | ||||
|                 ...(actionItems.map( | ||||
|                   (x) => ListTile( | ||||
|                     contentPadding: const EdgeInsets.symmetric(horizontal: 34), | ||||
|   | ||||
| @@ -27,7 +27,7 @@ class _NotificationScreenState extends State<NotificationScreen> { | ||||
|  | ||||
|     List<int> markList = List.empty(growable: true); | ||||
|     for (final element in provider.notifications) { | ||||
|       if (element.isRealtime) continue; | ||||
|       if (element.id <= 0) continue; | ||||
|       markList.add(element.id); | ||||
|     } | ||||
|  | ||||
| @@ -48,7 +48,7 @@ class _NotificationScreenState extends State<NotificationScreen> { | ||||
|  | ||||
|     final AccountProvider provider = Get.find(); | ||||
|  | ||||
|     if (element.isRealtime) { | ||||
|     if (element.id <= 0) { | ||||
|       provider.notifications.removeAt(index); | ||||
|       return; | ||||
|     } | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| import 'dart:async'; | ||||
| import 'dart:math' as math; | ||||
| import 'dart:ui'; | ||||
|  | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:get/get.dart'; | ||||
| @@ -337,37 +337,45 @@ class _ChannelChatScreenState extends State<ChannelChatScreen> { | ||||
|             children: [ | ||||
|               Expanded( | ||||
|                 child: PagedListView<int, Message>( | ||||
|                   clipBehavior: Clip.none, | ||||
|                   reverse: true, | ||||
|                   pagingController: _pagingController, | ||||
|                   builderDelegate: PagedChildBuilderDelegate<Message>( | ||||
|                     itemBuilder: buildHistory, | ||||
|                     noItemsFoundIndicatorBuilder: (_) => Container(), | ||||
|                   ), | ||||
|                 ).paddingOnly(bottom: 64), | ||||
|                 ).paddingOnly(bottom: 56), | ||||
|               ), | ||||
|             ], | ||||
|           ), | ||||
|           Positioned( | ||||
|             bottom: math.max(MediaQuery.of(context).padding.bottom, 16), | ||||
|             bottom: 0, | ||||
|             left: 0, | ||||
|             right: 0, | ||||
|             child: ChatMessageInput( | ||||
|               edit: _messageToEditing, | ||||
|               reply: _messageToReplying, | ||||
|               realm: widget.realm, | ||||
|               placeholder: placeholder, | ||||
|               channel: _channel!, | ||||
|               onSent: (Message item) { | ||||
|                 setState(() { | ||||
|                   _pagingController.itemList?.insert(0, item); | ||||
|                 }); | ||||
|               }, | ||||
|               onReset: () { | ||||
|                 setState(() { | ||||
|                   _messageToReplying = null; | ||||
|                   _messageToEditing = null; | ||||
|                 }); | ||||
|               }, | ||||
|             child: ClipRect( | ||||
|               child: BackdropFilter( | ||||
|                 filter: ImageFilter.blur(sigmaX: 50, sigmaY: 50), | ||||
|                 child: SafeArea( | ||||
|                   child: ChatMessageInput( | ||||
|                     edit: _messageToEditing, | ||||
|                     reply: _messageToReplying, | ||||
|                     realm: widget.realm, | ||||
|                     placeholder: placeholder, | ||||
|                     channel: _channel!, | ||||
|                     onSent: (Message item) { | ||||
|                       setState(() { | ||||
|                         _pagingController.itemList?.insert(0, item); | ||||
|                       }); | ||||
|                     }, | ||||
|                     onReset: () { | ||||
|                       setState(() { | ||||
|                         _messageToReplying = null; | ||||
|                         _messageToEditing = null; | ||||
|                       }); | ||||
|                     }, | ||||
|                   ), | ||||
|                 ), | ||||
|               ), | ||||
|             ), | ||||
|           ), | ||||
|           if (_ongoingCall != null) | ||||
|   | ||||
| @@ -72,7 +72,7 @@ class _ChannelDetailScreenState extends State<ChannelDetailScreen> { | ||||
|       ListTile( | ||||
|         leading: const Icon(Icons.edit), | ||||
|         trailing: const Icon(Icons.chevron_right), | ||||
|         title: Text('channelAdjust'.tr), | ||||
|         title: Text('channelAdjust'.tr.capitalize!), | ||||
|         onTap: () async { | ||||
|           AppRouter.instance | ||||
|               .pushNamed( | ||||
| @@ -129,12 +129,12 @@ class _ChannelDetailScreenState extends State<ChannelDetailScreen> { | ||||
|               ListTile( | ||||
|                 leading: const Icon(Icons.settings), | ||||
|                 trailing: const Icon(Icons.chevron_right), | ||||
|                 title: Text('channelSettings'.tr), | ||||
|                 title: Text('channelSettings'.tr.capitalize!), | ||||
|               ), | ||||
|               ListTile( | ||||
|                 leading: const Icon(Icons.supervisor_account), | ||||
|                 trailing: const Icon(Icons.chevron_right), | ||||
|                 title: Text('channelMembers'.tr), | ||||
|                 title: Text('channelMembers'.tr.capitalize!), | ||||
|                 onTap: () => showMemberList(), | ||||
|               ), | ||||
|               ...(_isOwned ? ownerActions : List.empty()), | ||||
|   | ||||
| @@ -69,7 +69,7 @@ class _RealmDetailScreenState extends State<RealmDetailScreen> { | ||||
|       ListTile( | ||||
|         leading: const Icon(Icons.edit), | ||||
|         trailing: const Icon(Icons.chevron_right), | ||||
|         title: Text('realmAdjust'.tr), | ||||
|         title: Text('realmAdjust'.tr.capitalize!), | ||||
|         onTap: () async { | ||||
|           AppRouter.instance | ||||
|               .pushNamed( | ||||
| @@ -122,12 +122,12 @@ class _RealmDetailScreenState extends State<RealmDetailScreen> { | ||||
|               ListTile( | ||||
|                 leading: const Icon(Icons.settings), | ||||
|                 trailing: const Icon(Icons.chevron_right), | ||||
|                 title: Text('realmSettings'.tr), | ||||
|                 title: Text('realmSettings'.tr.capitalize!), | ||||
|               ), | ||||
|               ListTile( | ||||
|                 leading: const Icon(Icons.supervisor_account), | ||||
|                 trailing: const Icon(Icons.chevron_right), | ||||
|                 title: Text('realmMembers'.tr), | ||||
|                 title: Text('realmMembers'.tr.capitalize!), | ||||
|                 onTap: () => showMemberList(), | ||||
|               ), | ||||
|               ...(_isOwned ? ownerActions : List.empty()), | ||||
|   | ||||
| @@ -14,7 +14,10 @@ abstract class ServiceFinder { | ||||
|  | ||||
|   static GetConnect configureClient(String service, | ||||
|       {timeout = const Duration(seconds: 5)}) { | ||||
|     final client = GetConnect(timeout: timeout, allowAutoSignedCert: true); | ||||
|     final client = GetConnect( | ||||
|       timeout: timeout, | ||||
|       allowAutoSignedCert: true, | ||||
|     ); | ||||
|     client.httpClient.baseUrl = ServiceFinder.services[service]; | ||||
|  | ||||
|     return client; | ||||
|   | ||||
| @@ -116,7 +116,7 @@ class SolianMessages extends Translations { | ||||
|           'realmMembers': 'Realm members', | ||||
|           'realmMembersAdd': 'Add realm members', | ||||
|           'realmMembersAddHint': 'Into @realm', | ||||
|           'realmAdjust': 'Realm Adjustment', | ||||
|           'realmAdjust': 'Realm adjustment', | ||||
|           'realmSettings': 'Realm settings', | ||||
|           'realmEditingNotify': 'You\'re editing realm @realm', | ||||
|           'realmDeletionConfirm': 'Confirm realm deletion', | ||||
| @@ -142,9 +142,9 @@ class SolianMessages extends Translations { | ||||
|           'channelType': 'Channel type', | ||||
|           'channelTypeCommon': 'Regular', | ||||
|           'channelTypeDirect': 'DM', | ||||
|           'channelAdjust': 'Channel Adjustment', | ||||
|           'channelDetail': 'Channel Detail', | ||||
|           'channelSettings': 'Channel Settings', | ||||
|           'channelAdjust': 'Channel adjustment', | ||||
|           'channelDetail': 'Channel detail', | ||||
|           'channelSettings': 'Channel settings', | ||||
|           'channelDeletionConfirm': 'Confirm channel deletion', | ||||
|           'channelDeletionConfirmCaption': | ||||
|               'Are you sure to delete channel @channel? This action cannot be undone!', | ||||
|   | ||||
| @@ -2,7 +2,6 @@ import 'dart:async'; | ||||
|  | ||||
| import 'package:flutter/foundation.dart'; | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:flutter_background/flutter_background.dart'; | ||||
| import 'package:flutter_webrtc/flutter_webrtc.dart'; | ||||
| import 'package:get/get.dart'; | ||||
| import 'package:livekit_client/livekit_client.dart'; | ||||
| @@ -171,35 +170,6 @@ class _ControlsWidgetState extends State<ControlsWidget> { | ||||
|       } | ||||
|       return; | ||||
|     } | ||||
|     if (lkPlatformIs(PlatformType.android)) { | ||||
|       requestBackgroundPermission([bool isRetry = false]) async { | ||||
|         try { | ||||
|           bool hasPermissions = await FlutterBackground.hasPermissions; | ||||
|           if (!isRetry) { | ||||
|             const androidConfig = FlutterBackgroundAndroidConfig( | ||||
|               notificationTitle: 'Screen Sharing', | ||||
|               notificationText: 'Solar Messager is sharing your screen', | ||||
|               notificationImportance: AndroidNotificationImportance.Default, | ||||
|               notificationIcon: | ||||
|                   AndroidResource(name: 'launcher_icon', defType: 'mipmap'), | ||||
|             ); | ||||
|             hasPermissions = await FlutterBackground.initialize( | ||||
|                 androidConfig: androidConfig); | ||||
|           } | ||||
|           if (hasPermissions && | ||||
|               !FlutterBackground.isBackgroundExecutionEnabled) { | ||||
|             await FlutterBackground.enableBackgroundExecution(); | ||||
|           } | ||||
|         } catch (e) { | ||||
|           if (!isRetry) { | ||||
|             return await Future<void>.delayed(const Duration(seconds: 1), | ||||
|                 () => requestBackgroundPermission(true)); | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       await requestBackgroundPermission(); | ||||
|     } | ||||
|     if (lkPlatformIs(PlatformType.iOS)) { | ||||
|       var track = await LocalVideoTrack.createScreenShareTrack( | ||||
|         const ScreenShareCaptureOptions( | ||||
| @@ -223,12 +193,6 @@ class _ControlsWidgetState extends State<ControlsWidget> { | ||||
|  | ||||
|   void disableScreenShare() async { | ||||
|     await participant.setScreenShareEnabled(false); | ||||
|     if (lkPlatformIs(PlatformType.android)) { | ||||
|       // Android specific | ||||
|       try { | ||||
|         await FlutterBackground.disableBackgroundExecution(); | ||||
|       } catch (_) {} | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   @override | ||||
|   | ||||
| @@ -56,7 +56,7 @@ class _ChatMessageInputState extends State<ChatMessageInput> { | ||||
|  | ||||
|   Map<String, dynamic> encodeMessage(String content) { | ||||
|     return { | ||||
|       'value': content, | ||||
|       'value': content.trim(), | ||||
|       'keypair_id': null, | ||||
|       'algorithm': 'plain', | ||||
|     }; | ||||
| @@ -103,9 +103,11 @@ class _ChatMessageInputState extends State<ChatMessageInput> { | ||||
|       senderId: sender.id, | ||||
|     ); | ||||
|  | ||||
|     message.isSending = true; | ||||
|     if (_editTo == null) { | ||||
|       message.isSending = true; | ||||
|       widget.onSent(message); | ||||
|     } | ||||
|  | ||||
|     if (widget.edit == null) widget.onSent(message); | ||||
|     resetInput(); | ||||
|  | ||||
|     Response resp; | ||||
| @@ -131,6 +133,7 @@ class _ChatMessageInputState extends State<ChatMessageInput> { | ||||
|     _editTo = null; | ||||
|     _replyTo = null; | ||||
|     _textController.clear(); | ||||
|     _attachments.clear(); | ||||
|     setState(() {}); | ||||
|   } | ||||
|  | ||||
| @@ -161,70 +164,66 @@ class _ChatMessageInputState extends State<ChatMessageInput> { | ||||
|       ) | ||||
|     ]; | ||||
|  | ||||
|     return Material( | ||||
|       color: Theme.of(context).colorScheme.surface, | ||||
|       child: Column( | ||||
|         mainAxisAlignment: MainAxisAlignment.center, | ||||
|         children: [ | ||||
|           const Divider(thickness: 0.3, height: 1), | ||||
|           if (_replyTo != null) | ||||
|             MaterialBanner( | ||||
|               leading: const FaIcon(FontAwesomeIcons.reply, size: 18), | ||||
|               dividerColor: Colors.transparent, | ||||
|               content: ChatMessage( | ||||
|                 item: _replyTo!, | ||||
|                 isContentPreviewing: true, | ||||
|               ), | ||||
|               actions: notifyBannerActions, | ||||
|     return Column( | ||||
|       mainAxisAlignment: MainAxisAlignment.center, | ||||
|       children: [ | ||||
|         if (_replyTo != null) | ||||
|           MaterialBanner( | ||||
|             leading: const FaIcon(FontAwesomeIcons.reply, size: 18), | ||||
|             dividerColor: Colors.transparent, | ||||
|             content: ChatMessage( | ||||
|               item: _replyTo!, | ||||
|               isContentPreviewing: true, | ||||
|             ), | ||||
|           if (_editTo != null) | ||||
|             MaterialBanner( | ||||
|               leading: const Icon(Icons.edit), | ||||
|               dividerColor: Colors.transparent, | ||||
|               content: ChatMessage( | ||||
|                 item: _editTo!, | ||||
|                 isContentPreviewing: true, | ||||
|               ), | ||||
|               actions: notifyBannerActions, | ||||
|             ), | ||||
|           SizedBox( | ||||
|             height: 56, | ||||
|             child: Row( | ||||
|               mainAxisAlignment: MainAxisAlignment.start, | ||||
|               children: [ | ||||
|                 Expanded( | ||||
|                   child: TextField( | ||||
|                     controller: _textController, | ||||
|                     focusNode: _focusNode, | ||||
|                     maxLines: null, | ||||
|                     autocorrect: true, | ||||
|                     keyboardType: TextInputType.text, | ||||
|                     decoration: InputDecoration.collapsed( | ||||
|                       hintText: widget.placeholder ?? | ||||
|                           'messageInputPlaceholder'.trParams( | ||||
|                             {'channel': '#${widget.channel.alias}'}, | ||||
|                           ), | ||||
|                     ), | ||||
|                     onSubmitted: (_) => sendMessage(), | ||||
|                     onTapOutside: (_) => | ||||
|                         FocusManager.instance.primaryFocus?.unfocus(), | ||||
|                   ), | ||||
|                 ), | ||||
|                 IconButton( | ||||
|                   icon: const Icon(Icons.attach_file), | ||||
|                   color: Colors.teal, | ||||
|                   onPressed: () => showAttachments(), | ||||
|                 ), | ||||
|                 IconButton( | ||||
|                   icon: const Icon(Icons.send), | ||||
|                   color: Theme.of(context).colorScheme.primary, | ||||
|                   onPressed: () => sendMessage(), | ||||
|                 ) | ||||
|               ], | ||||
|             ).paddingOnly(left: 20, right: 16), | ||||
|             actions: notifyBannerActions, | ||||
|           ), | ||||
|         ], | ||||
|       ), | ||||
|         if (_editTo != null) | ||||
|           MaterialBanner( | ||||
|             leading: const Icon(Icons.edit), | ||||
|             dividerColor: Colors.transparent, | ||||
|             content: ChatMessage( | ||||
|               item: _editTo!, | ||||
|               isContentPreviewing: true, | ||||
|             ), | ||||
|             actions: notifyBannerActions, | ||||
|           ), | ||||
|         SizedBox( | ||||
|           height: 56, | ||||
|           child: Row( | ||||
|             mainAxisAlignment: MainAxisAlignment.start, | ||||
|             children: [ | ||||
|               Expanded( | ||||
|                 child: TextField( | ||||
|                   controller: _textController, | ||||
|                   focusNode: _focusNode, | ||||
|                   maxLines: null, | ||||
|                   autocorrect: true, | ||||
|                   keyboardType: TextInputType.text, | ||||
|                   decoration: InputDecoration.collapsed( | ||||
|                     hintText: widget.placeholder ?? | ||||
|                         'messageInputPlaceholder'.trParams( | ||||
|                           {'channel': '#${widget.channel.alias}'}, | ||||
|                         ), | ||||
|                   ), | ||||
|                   onSubmitted: (_) => sendMessage(), | ||||
|                   onTapOutside: (_) => | ||||
|                       FocusManager.instance.primaryFocus?.unfocus(), | ||||
|                 ), | ||||
|               ), | ||||
|               IconButton( | ||||
|                 icon: const Icon(Icons.attach_file), | ||||
|                 color: Colors.teal, | ||||
|                 onPressed: () => showAttachments(), | ||||
|               ), | ||||
|               IconButton( | ||||
|                 icon: const Icon(Icons.send), | ||||
|                 color: Theme.of(context).colorScheme.primary, | ||||
|                 onPressed: () => sendMessage(), | ||||
|               ) | ||||
|             ], | ||||
|           ).paddingOnly(left: 20, right: 16), | ||||
|         ), | ||||
|       ], | ||||
|     ); | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; | ||||
| import 'package:flutter_animate/flutter_animate.dart'; | ||||
| import 'package:get/get.dart'; | ||||
| import 'package:solian/providers/account.dart'; | ||||
| import 'package:solian/providers/auth.dart'; | ||||
| import 'package:solian/providers/chat.dart'; | ||||
|  | ||||
| class BackgroundStateWidget extends StatelessWidget { | ||||
| @@ -9,6 +10,7 @@ class BackgroundStateWidget extends StatelessWidget { | ||||
|  | ||||
|   @override | ||||
|   Widget build(BuildContext context) { | ||||
|     final AuthProvider auth = Get.find(); | ||||
|     final AccountProvider account = Get.find(); | ||||
|     final ChatProvider chat = Get.find(); | ||||
|  | ||||
| @@ -20,35 +22,51 @@ class BackgroundStateWidget extends StatelessWidget { | ||||
|  | ||||
|       return Row(children: [ | ||||
|         if (disconnected && !connecting) | ||||
|           IconButton( | ||||
|             tooltip: [ | ||||
|               if (account.isConnected.isFalse) | ||||
|                 'Lost Connection with Passport Server...', | ||||
|               if (chat.isConnected.isFalse) | ||||
|                 'Lost Connection with Messaging Server...', | ||||
|             ].join('\n'), | ||||
|             icon: const Icon(Icons.wifi_off) | ||||
|                 .animate(onPlay: (c) => c.repeat()) | ||||
|                 .fadeIn(duration: 800.ms) | ||||
|                 .then() | ||||
|                 .fadeOut(duration: 800.ms), | ||||
|             onPressed: () { | ||||
|               if (account.isConnected.isFalse) account.connect(); | ||||
|               if (chat.isConnected.isFalse) chat.connect(); | ||||
|           FutureBuilder( | ||||
|             future: auth.isAuthorized, | ||||
|             builder: (context, snapshot) { | ||||
|               if (!snapshot.hasData || snapshot.data == false) { | ||||
|                 return const SizedBox(); | ||||
|               } | ||||
|               return IconButton( | ||||
|                 tooltip: [ | ||||
|                   if (account.isConnected.isFalse) | ||||
|                     'Lost Connection with Passport Server...', | ||||
|                   if (chat.isConnected.isFalse) | ||||
|                     'Lost Connection with Messaging Server...', | ||||
|                 ].join('\n'), | ||||
|                 icon: const Icon(Icons.wifi_off) | ||||
|                     .animate(onPlay: (c) => c.repeat()) | ||||
|                     .fadeIn(duration: 800.ms) | ||||
|                     .then() | ||||
|                     .fadeOut(duration: 800.ms), | ||||
|                 onPressed: () { | ||||
|                   if (account.isConnected.isFalse) account.connect(); | ||||
|                   if (chat.isConnected.isFalse) chat.connect(); | ||||
|                 }, | ||||
|               ); | ||||
|             }, | ||||
|           ), | ||||
|         if (connecting) | ||||
|           IconButton( | ||||
|             tooltip: [ | ||||
|               if (account.isConnecting.isTrue) | ||||
|                 'Waiting Passport Server Response...', | ||||
|               if (chat.isConnecting.isTrue) | ||||
|                 'Waiting Messaging Server Response...', | ||||
|             ].join('\n'), | ||||
|             icon: const Icon(Icons.sync) | ||||
|                 .animate(onPlay: (c) => c.repeat()) | ||||
|                 .rotate(duration: 1850.ms, begin: 1, end: 0), | ||||
|             onPressed: () {}, | ||||
|           FutureBuilder( | ||||
|             future: auth.isAuthorized, | ||||
|             builder: (context, snapshot) { | ||||
|               if (!snapshot.hasData || snapshot.data == false) { | ||||
|                 return const SizedBox(); | ||||
|               } | ||||
|               return IconButton( | ||||
|                 tooltip: [ | ||||
|                   if (account.isConnecting.isTrue) | ||||
|                     'Waiting Passport Server Response...', | ||||
|                   if (chat.isConnecting.isTrue) | ||||
|                     'Waiting Messaging Server Response...', | ||||
|                 ].join('\n'), | ||||
|                 icon: const Icon(Icons.sync) | ||||
|                     .animate(onPlay: (c) => c.repeat()) | ||||
|                     .rotate(duration: 1850.ms, begin: 1, end: 0), | ||||
|                 onPressed: () {}, | ||||
|               ); | ||||
|             }, | ||||
|           ), | ||||
|       ]); | ||||
|     }); | ||||
|   | ||||
| @@ -9,7 +9,6 @@ | ||||
| #include <file_selector_linux/file_selector_plugin.h> | ||||
| #include <flutter_secure_storage_linux/flutter_secure_storage_linux_plugin.h> | ||||
| #include <flutter_webrtc/flutter_web_r_t_c_plugin.h> | ||||
| #include <platform_device_id_linux/platform_device_id_linux_plugin.h> | ||||
| #include <sentry_flutter/sentry_flutter_plugin.h> | ||||
| #include <url_launcher_linux/url_launcher_plugin.h> | ||||
|  | ||||
| @@ -23,9 +22,6 @@ void fl_register_plugins(FlPluginRegistry* registry) { | ||||
|   g_autoptr(FlPluginRegistrar) flutter_webrtc_registrar = | ||||
|       fl_plugin_registry_get_registrar_for_plugin(registry, "FlutterWebRTCPlugin"); | ||||
|   flutter_web_r_t_c_plugin_register_with_registrar(flutter_webrtc_registrar); | ||||
|   g_autoptr(FlPluginRegistrar) platform_device_id_linux_registrar = | ||||
|       fl_plugin_registry_get_registrar_for_plugin(registry, "PlatformDeviceIdLinuxPlugin"); | ||||
|   platform_device_id_linux_plugin_register_with_registrar(platform_device_id_linux_registrar); | ||||
|   g_autoptr(FlPluginRegistrar) sentry_flutter_registrar = | ||||
|       fl_plugin_registry_get_registrar_for_plugin(registry, "SentryFlutterPlugin"); | ||||
|   sentry_flutter_plugin_register_with_registrar(sentry_flutter_registrar); | ||||
|   | ||||
| @@ -6,7 +6,6 @@ list(APPEND FLUTTER_PLUGIN_LIST | ||||
|   file_selector_linux | ||||
|   flutter_secure_storage_linux | ||||
|   flutter_webrtc | ||||
|   platform_device_id_linux | ||||
|   sentry_flutter | ||||
|   url_launcher_linux | ||||
| ) | ||||
|   | ||||
| @@ -16,9 +16,8 @@ import flutter_webrtc | ||||
| import livekit_client | ||||
| import package_info_plus | ||||
| import path_provider_foundation | ||||
| import platform_device_id | ||||
| import platform_device_id_macos | ||||
| import sentry_flutter | ||||
| import shared_preferences_foundation | ||||
| import sqflite | ||||
| import url_launcher_macos | ||||
| import video_player_avfoundation | ||||
| @@ -36,9 +35,8 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { | ||||
|   LiveKitPlugin.register(with: registry.registrar(forPlugin: "LiveKitPlugin")) | ||||
|   FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin")) | ||||
|   PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) | ||||
|   PlatformDeviceIdMacosPlugin.register(with: registry.registrar(forPlugin: "PlatformDeviceIdMacosPlugin")) | ||||
|   PlatformDeviceIdMacosPlugin.register(with: registry.registrar(forPlugin: "PlatformDeviceIdMacosPlugin")) | ||||
|   SentryFlutterPlugin.register(with: registry.registrar(forPlugin: "SentryFlutterPlugin")) | ||||
|   SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) | ||||
|   SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin")) | ||||
|   UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) | ||||
|   FVPVideoPlayerPlugin.register(with: registry.registrar(forPlugin: "FVPVideoPlayerPlugin")) | ||||
|   | ||||
| @@ -6,6 +6,39 @@ PODS: | ||||
|     - FlutterMacOS | ||||
|   - file_selector_macos (0.0.1): | ||||
|     - FlutterMacOS | ||||
|   - Firebase/CoreOnly (10.27.0): | ||||
|     - FirebaseCore (= 10.27.0) | ||||
|   - Firebase/Messaging (10.27.0): | ||||
|     - Firebase/CoreOnly | ||||
|     - FirebaseMessaging (~> 10.27.0) | ||||
|   - firebase_core (3.0.0): | ||||
|     - Firebase/CoreOnly (~> 10.27.0) | ||||
|     - FlutterMacOS | ||||
|   - firebase_messaging (15.0.0): | ||||
|     - Firebase/CoreOnly (~> 10.27.0) | ||||
|     - Firebase/Messaging (~> 10.27.0) | ||||
|     - firebase_core | ||||
|     - FlutterMacOS | ||||
|   - FirebaseCore (10.27.0): | ||||
|     - FirebaseCoreInternal (~> 10.0) | ||||
|     - GoogleUtilities/Environment (~> 7.12) | ||||
|     - GoogleUtilities/Logger (~> 7.12) | ||||
|   - FirebaseCoreInternal (10.27.0): | ||||
|     - "GoogleUtilities/NSData+zlib (~> 7.8)" | ||||
|   - FirebaseInstallations (10.27.0): | ||||
|     - FirebaseCore (~> 10.0) | ||||
|     - GoogleUtilities/Environment (~> 7.8) | ||||
|     - GoogleUtilities/UserDefaults (~> 7.8) | ||||
|     - PromisesObjC (~> 2.1) | ||||
|   - FirebaseMessaging (10.27.0): | ||||
|     - FirebaseCore (~> 10.0) | ||||
|     - FirebaseInstallations (~> 10.0) | ||||
|     - GoogleDataTransport (~> 9.3) | ||||
|     - GoogleUtilities/AppDelegateSwizzler (~> 7.8) | ||||
|     - GoogleUtilities/Environment (~> 7.8) | ||||
|     - GoogleUtilities/Reachability (~> 7.8) | ||||
|     - GoogleUtilities/UserDefaults (~> 7.8) | ||||
|     - nanopb (< 2.30911.0, >= 2.30908.0) | ||||
|   - flutter_local_notifications (0.0.1): | ||||
|     - FlutterMacOS | ||||
|   - flutter_secure_storage_macos (6.1.1): | ||||
| @@ -14,14 +47,49 @@ PODS: | ||||
|     - FlutterMacOS | ||||
|     - WebRTC-SDK (= 114.5735.10) | ||||
|   - FlutterMacOS (1.0.0) | ||||
|   - livekit_client (2.1.5): | ||||
|   - GoogleDataTransport (9.4.1): | ||||
|     - GoogleUtilities/Environment (~> 7.7) | ||||
|     - nanopb (< 2.30911.0, >= 2.30908.0) | ||||
|     - PromisesObjC (< 3.0, >= 1.2) | ||||
|   - GoogleUtilities/AppDelegateSwizzler (7.13.3): | ||||
|     - GoogleUtilities/Environment | ||||
|     - GoogleUtilities/Logger | ||||
|     - GoogleUtilities/Network | ||||
|     - GoogleUtilities/Privacy | ||||
|   - GoogleUtilities/Environment (7.13.3): | ||||
|     - GoogleUtilities/Privacy | ||||
|     - PromisesObjC (< 3.0, >= 1.2) | ||||
|   - GoogleUtilities/Logger (7.13.3): | ||||
|     - GoogleUtilities/Environment | ||||
|     - GoogleUtilities/Privacy | ||||
|   - GoogleUtilities/Network (7.13.3): | ||||
|     - GoogleUtilities/Logger | ||||
|     - "GoogleUtilities/NSData+zlib" | ||||
|     - GoogleUtilities/Privacy | ||||
|     - GoogleUtilities/Reachability | ||||
|   - "GoogleUtilities/NSData+zlib (7.13.3)": | ||||
|     - GoogleUtilities/Privacy | ||||
|   - GoogleUtilities/Privacy (7.13.3) | ||||
|   - GoogleUtilities/Reachability (7.13.3): | ||||
|     - GoogleUtilities/Logger | ||||
|     - GoogleUtilities/Privacy | ||||
|   - GoogleUtilities/UserDefaults (7.13.3): | ||||
|     - GoogleUtilities/Logger | ||||
|     - GoogleUtilities/Privacy | ||||
|   - livekit_client (2.1.6): | ||||
|     - FlutterMacOS | ||||
|     - WebRTC-SDK (= 114.5735.10) | ||||
|   - nanopb (2.30910.0): | ||||
|     - nanopb/decode (= 2.30910.0) | ||||
|     - nanopb/encode (= 2.30910.0) | ||||
|   - nanopb/decode (2.30910.0) | ||||
|   - nanopb/encode (2.30910.0) | ||||
|   - package_info_plus (0.0.1): | ||||
|     - FlutterMacOS | ||||
|   - path_provider_foundation (0.0.1): | ||||
|     - Flutter | ||||
|     - FlutterMacOS | ||||
|   - PromisesObjC (2.4.0) | ||||
|   - Sentry/HybridSDK (8.25.2) | ||||
|   - sentry_flutter (8.2.0): | ||||
|     - Flutter | ||||
| @@ -43,6 +111,8 @@ DEPENDENCIES: | ||||
|   - connectivity_plus (from `Flutter/ephemeral/.symlinks/plugins/connectivity_plus/darwin`) | ||||
|   - device_info_plus (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos`) | ||||
|   - file_selector_macos (from `Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos`) | ||||
|   - firebase_core (from `Flutter/ephemeral/.symlinks/plugins/firebase_core/macos`) | ||||
|   - firebase_messaging (from `Flutter/ephemeral/.symlinks/plugins/firebase_messaging/macos`) | ||||
|   - flutter_local_notifications (from `Flutter/ephemeral/.symlinks/plugins/flutter_local_notifications/macos`) | ||||
|   - flutter_secure_storage_macos (from `Flutter/ephemeral/.symlinks/plugins/flutter_secure_storage_macos/macos`) | ||||
|   - flutter_webrtc (from `Flutter/ephemeral/.symlinks/plugins/flutter_webrtc/macos`) | ||||
| @@ -58,6 +128,15 @@ DEPENDENCIES: | ||||
|  | ||||
| SPEC REPOS: | ||||
|   trunk: | ||||
|     - Firebase | ||||
|     - FirebaseCore | ||||
|     - FirebaseCoreInternal | ||||
|     - FirebaseInstallations | ||||
|     - FirebaseMessaging | ||||
|     - GoogleDataTransport | ||||
|     - GoogleUtilities | ||||
|     - nanopb | ||||
|     - PromisesObjC | ||||
|     - Sentry | ||||
|     - WebRTC-SDK | ||||
|  | ||||
| @@ -68,6 +147,10 @@ EXTERNAL SOURCES: | ||||
|     :path: Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos | ||||
|   file_selector_macos: | ||||
|     :path: Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos | ||||
|   firebase_core: | ||||
|     :path: Flutter/ephemeral/.symlinks/plugins/firebase_core/macos | ||||
|   firebase_messaging: | ||||
|     :path: Flutter/ephemeral/.symlinks/plugins/firebase_messaging/macos | ||||
|   flutter_local_notifications: | ||||
|     :path: Flutter/ephemeral/.symlinks/plugins/flutter_local_notifications/macos | ||||
|   flutter_secure_storage_macos: | ||||
| @@ -97,13 +180,24 @@ SPEC CHECKSUMS: | ||||
|   connectivity_plus: ddd7f30999e1faaef5967c23d5b6d503d10434db | ||||
|   device_info_plus: ce1b7762849d3ec103d0e0517299f2db7ad60720 | ||||
|   file_selector_macos: 54fdab7caa3ac3fc43c9fac4d7d8d231277f8cf2 | ||||
|   Firebase: 26b040b20866a55f55eb3611b9fcf3ae64816b86 | ||||
|   firebase_core: 0b3b9c6c93f774c7392f1f9a6712f0d9ce9b1771 | ||||
|   firebase_messaging: cea8e96b86f4fa6344d7b858d8fc8816e55f1b64 | ||||
|   FirebaseCore: a2b95ae4ce7c83ceecfbbbe3b6f1cddc7415a808 | ||||
|   FirebaseCoreInternal: 4b297a2d56063dbea2c1d0d04222d44a8d058862 | ||||
|   FirebaseInstallations: 766dabca09fd94aef922538aaf144cc4a6fb6869 | ||||
|   FirebaseMessaging: 585984d0a1df120617eb10b44cad8968b859815e | ||||
|   flutter_local_notifications: 3805ca215b2fb7f397d78b66db91f6a747af52e4 | ||||
|   flutter_secure_storage_macos: 59459653abe1adb92abbc8ea747d79f8d19866c9 | ||||
|   flutter_webrtc: 823284e171ecb2487b7210c214886a949c122a59 | ||||
|   FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 | ||||
|   livekit_client: ca5f0447742014b6e462c27b71d49dcf03ec0446 | ||||
|   GoogleDataTransport: 6c09b596d841063d76d4288cc2d2f42cc36e1e2a | ||||
|   GoogleUtilities: ea963c370a38a8069cc5f7ba4ca849a60b6d7d15 | ||||
|   livekit_client: a87c5b7bac4ecd63da1183682ec10f5cafadbaf7 | ||||
|   nanopb: 438bc412db1928dac798aa6fd75726007be04262 | ||||
|   package_info_plus: fa739dd842b393193c5ca93c26798dff6e3d0e0c | ||||
|   path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 | ||||
|   PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 | ||||
|   Sentry: 51b056d96914a741f63eca774d118678b1eb05a1 | ||||
|   sentry_flutter: e8397d13e297a5d4b6be8a752e33140b21c5cc97 | ||||
|   sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec | ||||
|   | ||||
| @@ -243,6 +243,7 @@ | ||||
| 				33CC110E2044A8840003C045 /* Bundle Framework */, | ||||
| 				3399D490228B24CF009A79C7 /* ShellScript */, | ||||
| 				C5DDC734703B72E778163C68 /* [CP] Embed Pods Frameworks */, | ||||
| 				7009C53F1F4A3CB93BB64EF3 /* [CP] Copy Pods Resources */, | ||||
| 			); | ||||
| 			buildRules = ( | ||||
| 			); | ||||
| @@ -386,6 +387,23 @@ | ||||
| 			shellPath = /bin/sh; | ||||
| 			shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; | ||||
| 		}; | ||||
| 		7009C53F1F4A3CB93BB64EF3 /* [CP] Copy Pods Resources */ = { | ||||
| 			isa = PBXShellScriptBuildPhase; | ||||
| 			buildActionMask = 2147483647; | ||||
| 			files = ( | ||||
| 			); | ||||
| 			inputFileListPaths = ( | ||||
| 				"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", | ||||
| 			); | ||||
| 			name = "[CP] Copy Pods Resources"; | ||||
| 			outputFileListPaths = ( | ||||
| 				"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", | ||||
| 			); | ||||
| 			runOnlyForDeploymentPostprocessing = 0; | ||||
| 			shellPath = /bin/sh; | ||||
| 			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; | ||||
| 			showEnvVarsInLog = 0; | ||||
| 		}; | ||||
| 		C1C3653094F6B3FFFFCFD12B /* [CP] Check Pods Manifest.lock */ = { | ||||
| 			isa = PBXShellScriptBuildPhase; | ||||
| 			buildActionMask = 2147483647; | ||||
|   | ||||
							
								
								
									
										154
									
								
								pubspec.lock
									
									
									
									
									
								
							
							
						
						
									
										154
									
								
								pubspec.lock
									
									
									
									
									
								
							| @@ -153,14 +153,6 @@ packages: | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "3.0.3" | ||||
|   cryptography: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: cryptography | ||||
|       sha256: d146b76d33d94548cf035233fbc2f4338c1242fa119013bead807d033fc4ae05 | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "2.7.0" | ||||
|   csslib: | ||||
|     dependency: transitive | ||||
|     description: | ||||
| @@ -181,10 +173,10 @@ packages: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: dart_webrtc | ||||
|       sha256: fe4db21dc389b99e04cb7bf43bc927dba2e42768d4c28211b66a4b5a16e4d516 | ||||
|       sha256: d663abfe6ed95afadcb64083e364aa16dbeaadead193bb03047cf6913e57b65e | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "1.4.5" | ||||
|     version: "1.4.6+hotfix.1" | ||||
|   dbus: | ||||
|     dependency: transitive | ||||
|     description: | ||||
| @@ -193,24 +185,8 @@ packages: | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "0.7.10" | ||||
|   device_info: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: device_info | ||||
|       sha256: f4a8156cb7b7480d969cb734907d18b333c8f0bc0b1ad0b342cdcecf30d62c48 | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "2.0.3" | ||||
|   device_info_platform_interface: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: device_info_platform_interface | ||||
|       sha256: b148e0bf9640145d09a4f8dea96614076f889e7f7f8b5ecab1c7e5c2dbc73c1b | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "2.0.1" | ||||
|   device_info_plus: | ||||
|     dependency: transitive | ||||
|     dependency: "direct main" | ||||
|     description: | ||||
|       name: device_info_plus | ||||
|       sha256: eead12d1a1ed83d8283ab4c2f3fca23ac4082f29f25f29dff0f758f57d06ec91 | ||||
| @@ -366,14 +342,6 @@ packages: | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "4.5.0" | ||||
|   flutter_background: | ||||
|     dependency: "direct main" | ||||
|     description: | ||||
|       name: flutter_background | ||||
|       sha256: "035c31a738509d67ee70bbf174e5aa7db462c371e838ec8259700c5c4e7ca17f" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "1.2.0" | ||||
|   flutter_cache_manager: | ||||
|     dependency: transitive | ||||
|     description: | ||||
| @@ -516,10 +484,10 @@ packages: | ||||
|     dependency: "direct main" | ||||
|     description: | ||||
|       name: flutter_webrtc | ||||
|       sha256: "1c61bc08d14be57ac28e9e540c44b8b1b9ab1b25bbdb66a8c658e61a3211cc5d" | ||||
|       sha256: fd5f115a08dcdc00b988bea3003c956f1b60a78a61d899cbddfb44f5d0e44d4a | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "0.10.7" | ||||
|     version: "0.10.8" | ||||
|   font_awesome_flutter: | ||||
|     dependency: "direct main" | ||||
|     description: | ||||
| @@ -708,10 +676,10 @@ packages: | ||||
|     dependency: "direct main" | ||||
|     description: | ||||
|       name: livekit_client | ||||
|       sha256: "3792c4339db035d0320f1be8e2d99f394e5f3fe4215f95b371ce43db44a9d150" | ||||
|       sha256: e743aadc7dfbdcc9a1bc447cfe81e6f85346b624d972a71db3ce0f11b8a00a3b | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "2.1.5" | ||||
|     version: "2.1.6" | ||||
|   logging: | ||||
|     dependency: transitive | ||||
|     description: | ||||
| @@ -936,54 +904,6 @@ packages: | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "2.0.11" | ||||
|   platform_device_id: | ||||
|     dependency: "direct main" | ||||
|     description: | ||||
|       name: platform_device_id | ||||
|       sha256: "7a12ec84de4a823bb10eba2f0e1ad29e2365abba17790489a0d78029904f562e" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "1.0.1" | ||||
|   platform_device_id_linux: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: platform_device_id_linux | ||||
|       sha256: "994b1608593e527a629af2d5aeb241c60d308d3434bc78b0f6fcb3c1a02dff43" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "1.0.0" | ||||
|   platform_device_id_macos: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: platform_device_id_macos | ||||
|       sha256: "968db2a504c611294b12a031b3734432d6df10553a0d3ae3b33ed21abfdbaba0" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "1.0.0" | ||||
|   platform_device_id_platform_interface: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: platform_device_id_platform_interface | ||||
|       sha256: c61607594252aaddacf3e4c4371ab08f2ef85ff427817fa6e48a169429610c46 | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "1.0.0" | ||||
|   platform_device_id_web: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: platform_device_id_web | ||||
|       sha256: "58e124594e1165db7f108395a780b1d1e1cd403021978e5228cf4289fbe736d5" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "1.0.0" | ||||
|   platform_device_id_windows: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: platform_device_id_windows | ||||
|       sha256: dbf8dcf03ad8555320ebae2403a3081b79f137f37661874e161fe2de0a84eeeb | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "1.0.0" | ||||
|   plugin_platform_interface: | ||||
|     dependency: transitive | ||||
|     description: | ||||
| @@ -1048,6 +968,62 @@ packages: | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "8.2.0" | ||||
|   shared_preferences: | ||||
|     dependency: "direct main" | ||||
|     description: | ||||
|       name: shared_preferences | ||||
|       sha256: d3bbe5553a986e83980916ded2f0b435ef2e1893dfaa29d5a7a790d0eca12180 | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "2.2.3" | ||||
|   shared_preferences_android: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: shared_preferences_android | ||||
|       sha256: "93d0ec9dd902d85f326068e6a899487d1f65ffcd5798721a95330b26c8131577" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "2.2.3" | ||||
|   shared_preferences_foundation: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: shared_preferences_foundation | ||||
|       sha256: "0a8a893bf4fd1152f93fec03a415d11c27c74454d96e2318a7ac38dd18683ab7" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "2.4.0" | ||||
|   shared_preferences_linux: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: shared_preferences_linux | ||||
|       sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "2.3.2" | ||||
|   shared_preferences_platform_interface: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: shared_preferences_platform_interface | ||||
|       sha256: "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "2.3.2" | ||||
|   shared_preferences_web: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: shared_preferences_web | ||||
|       sha256: "9aee1089b36bd2aafe06582b7d7817fd317ef05fc30e6ba14bff247d0933042a" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "2.3.0" | ||||
|   shared_preferences_windows: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: shared_preferences_windows | ||||
|       sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "2.3.2" | ||||
|   sky_engine: | ||||
|     dependency: transitive | ||||
|     description: flutter | ||||
| @@ -1257,10 +1233,10 @@ packages: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: video_player_android | ||||
|       sha256: "4f77780499ebbdb3a8387f3de7a9d07a7665cfb3a3741177c44a52353fe41d64" | ||||
|       sha256: "9529001630e42988f755772972d5014d30121610700e8e502278a245939f8fc8" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "2.4.16" | ||||
|     version: "2.5.0" | ||||
|   video_player_avfoundation: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|   | ||||
| @@ -62,13 +62,13 @@ dependencies: | ||||
|   livekit_client: ^2.1.5 | ||||
|   flutter_webrtc: ^0.10.7 | ||||
|   wakelock_plus: ^1.2.5 | ||||
|   flutter_background: ^1.2.0 | ||||
|   cached_network_image: ^3.3.1 | ||||
|   sentry_flutter: ^8.2.0 | ||||
|   firebase_core: ^3.0.0 | ||||
|   firebase_messaging: ^15.0.0 | ||||
|   platform_device_id: ^1.0.1 | ||||
|   package_info_plus: ^8.0.0 | ||||
|   device_info_plus: ^10.1.0 | ||||
|   shared_preferences: ^2.2.3 | ||||
|  | ||||
| dev_dependencies: | ||||
|   flutter_test: | ||||
|   | ||||
| @@ -13,7 +13,6 @@ | ||||
| #include <flutter_webrtc/flutter_web_r_t_c_plugin.h> | ||||
| #include <livekit_client/live_kit_plugin.h> | ||||
| #include <permission_handler_windows/permission_handler_windows_plugin.h> | ||||
| #include <platform_device_id_windows/platform_device_id_windows_plugin.h> | ||||
| #include <sentry_flutter/sentry_flutter_plugin.h> | ||||
| #include <url_launcher_windows/url_launcher_windows.h> | ||||
| #include <video_player_win/video_player_win_plugin_c_api.h> | ||||
| @@ -33,8 +32,6 @@ void RegisterPlugins(flutter::PluginRegistry* registry) { | ||||
|       registry->GetRegistrarForPlugin("LiveKitPlugin")); | ||||
|   PermissionHandlerWindowsPluginRegisterWithRegistrar( | ||||
|       registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin")); | ||||
|   PlatformDeviceIdWindowsPluginRegisterWithRegistrar( | ||||
|       registry->GetRegistrarForPlugin("PlatformDeviceIdWindowsPlugin")); | ||||
|   SentryFlutterPluginRegisterWithRegistrar( | ||||
|       registry->GetRegistrarForPlugin("SentryFlutterPlugin")); | ||||
|   UrlLauncherWindowsRegisterWithRegistrar( | ||||
|   | ||||
| @@ -10,7 +10,6 @@ list(APPEND FLUTTER_PLUGIN_LIST | ||||
|   flutter_webrtc | ||||
|   livekit_client | ||||
|   permission_handler_windows | ||||
|   platform_device_id_windows | ||||
|   sentry_flutter | ||||
|   url_launcher_windows | ||||
|   video_player_win | ||||
|   | ||||
		Reference in New Issue
	
	Block a user