🐛 Bug fixes and optimization

This commit is contained in:
LittleSheep 2024-06-08 21:35:50 +08:00
parent e88a0ddb22
commit 6acbd1ee9e
34 changed files with 481 additions and 392 deletions

View File

@ -4,7 +4,7 @@
# This file should be version controlled and should not be manually edited. # This file should be version controlled and should not be manually edited.
version: version:
revision: "54e66469a933b60ddf175f858f82eaeb97e48c8d" revision: "a14f74ff3a1cbd521163c5f03d68113d50af93d3"
channel: "stable" channel: "stable"
project_type: app project_type: app
@ -13,26 +13,26 @@ project_type: app
migration: migration:
platforms: platforms:
- platform: root - platform: root
create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
- platform: android - platform: android
create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
- platform: ios - platform: ios
create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
- platform: linux - platform: linux
create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
- platform: macos - platform: macos
create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
- platform: web - platform: web
create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
- platform: windows - platform: windows
create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
# User provided section # User provided section

View File

@ -1,65 +1,64 @@
plugins { plugins {
id "com.android.application" id "com.android.application"
// START: FlutterFire Configuration
id 'com.google.gms.google-services' id 'com.google.gms.google-services'
// END: FlutterFire Configuration
id "kotlin-android" id "kotlin-android"
id "dev.flutter.flutter-gradle-plugin" id "dev.flutter.flutter-gradle-plugin"
} }
def localProperties = new Properties() def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties') def localPropertiesFile = rootProject.file("local.properties")
if (localPropertiesFile.exists()) { if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader -> localPropertiesFile.withReader("UTF-8") { reader ->
localProperties.load(reader) localProperties.load(reader)
} }
} }
def flutterVersionCode = localProperties.getProperty('flutter.versionCode') def flutterVersionCode = localProperties.getProperty("flutter.versionCode")
if (flutterVersionCode == null) { if (flutterVersionCode == null) {
flutterVersionCode = '1' flutterVersionCode = "1"
} }
def flutterVersionName = localProperties.getProperty('flutter.versionName') def flutterVersionName = localProperties.getProperty("flutter.versionName")
if (flutterVersionName == null) { if (flutterVersionName == null) {
flutterVersionName = '1.0' flutterVersionName = "1.0"
} }
android { android {
namespace "dev.solsynth.solian" namespace = "dev.solsynth.solian"
compileSdk flutter.compileSdkVersion compileSdk = flutter.compileSdkVersion
ndkVersion flutter.ndkVersion ndkVersion = flutter.ndkVersion
defaultConfig {
multiDexEnabled true
}
compileOptions { compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8 coreLibraryDesugaringEnabled true
targetCompatibility JavaVersion.VERSION_1_8 sourceCompatibility = JavaVersion.VERSION_1_8
} targetCompatibility = JavaVersion.VERSION_1_8
kotlinOptions {
jvmTarget = '1.8'
}
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
} }
defaultConfig { defaultConfig {
applicationId "dev.solsynth.solian" applicationId = "dev.solsynth.solian"
minSdkVersion flutter.minSdkVersion // You can update the following values to match your application needs.
targetSdkVersion flutter.targetSdkVersion // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
versionCode flutterVersionCode.toInteger() minSdk = flutter.minSdkVersion
versionName flutterVersionName targetSdk = flutter.targetSdkVersion
versionCode = flutterVersionCode.toInteger()
versionName = flutterVersionName
} }
buildTypes { buildTypes {
release { release {
signingConfig signingConfigs.debug signingConfig = signingConfigs.debug
} }
} }
} }
dependencies {
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4'
}
flutter { flutter {
source '../..' source = "../.."
} }
dependencies {}

View File

@ -13,6 +13,21 @@
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" /> <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
<application
android:label="solian"
android:name="${applicationName}"
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 <meta-data
android:name="firebase_messaging_auto_init_enabled" android:name="firebase_messaging_auto_init_enabled"
android:value="false" /> android:value="false" />
@ -20,14 +35,11 @@
android:name="firebase_analytics_collection_enabled" android:name="firebase_analytics_collection_enabled"
android:value="false" /> android:value="false" />
<application
android:label="Solian"
android:name="${applicationName}"
android:icon="@mipmap/launcher_icon">
<activity <activity
android:name=".MainActivity" android:name=".MainActivity"
android:exported="true" android:exported="true"
android:launchMode="singleTop" android:launchMode="singleTop"
android:taskAffinity=""
android:theme="@style/LaunchTheme" android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true" android:hardwareAccelerated="true"
@ -52,7 +64,7 @@
android:value="2" /> android:value="2" />
</application> </application>
<!-- Required to query activities that can process text, see: <!-- 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. 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. --> In particular, this is used by the Flutter engine in io.flutter.plugin.text.ProcessTextPlugin. -->

View File

@ -1,4 +1,4 @@
package com.example.solian package dev.solsynth.solian
import io.flutter.embedding.android.FlutterActivity import io.flutter.embedding.android.FlutterActivity

View File

@ -5,12 +5,12 @@ allprojects {
} }
} }
rootProject.buildDir = '../build' rootProject.buildDir = "../build"
subprojects { subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}" project.buildDir = "${rootProject.buildDir}/${project.name}"
} }
subprojects { subprojects {
project.evaluationDependsOn(':app') project.evaluationDependsOn(":app")
} }
tasks.register("clean", Delete) { tasks.register("clean", Delete) {

View File

@ -1,3 +1,6 @@
org.gradle.jvmargs=-Xmx4G org.gradle.jvmargs=-Xmx4G -XX:+HeapDumpOnOutOfMemoryError
android.useAndroidX=true android.useAndroidX=true
android.enableJetifier=true android.enableJetifier=true
android.defaults.buildfeatures.buildconfig=true
android.nonTransitiveRClass=false
android.nonFinalResIds=false

View File

@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists 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

View File

@ -5,10 +5,9 @@ pluginManagement {
def flutterSdkPath = properties.getProperty("flutter.sdk") def flutterSdkPath = properties.getProperty("flutter.sdk")
assert flutterSdkPath != null, "flutter.sdk not set in local.properties" assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
return flutterSdkPath return flutterSdkPath
} }()
settings.ext.flutterSdkPath = flutterSdkPath()
includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle") includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")
repositories { repositories {
google() google()
@ -19,10 +18,8 @@ pluginManagement {
plugins { plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0" id "dev.flutter.flutter-plugin-loader" version "1.0.0"
id "com.android.application" version "7.3.0" apply false id "com.android.application" version '8.4.0' apply false
// START: FlutterFire Configuration
id "com.google.gms.google-services" version "4.3.15" 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 id "org.jetbrains.kotlin.android" version "1.7.10" apply false
} }

View File

@ -2,8 +2,6 @@ PODS:
- connectivity_plus (0.0.1): - connectivity_plus (0.0.1):
- Flutter - Flutter
- FlutterMacOS - FlutterMacOS
- device_info (0.0.1):
- Flutter
- device_info_plus (0.0.1): - device_info_plus (0.0.1):
- Flutter - Flutter
- DKImagePickerController/Core (4.3.9): - DKImagePickerController/Core (4.3.9):
@ -111,7 +109,7 @@ PODS:
- GoogleUtilities/Privacy - GoogleUtilities/Privacy
- image_picker_ios (0.0.1): - image_picker_ios (0.0.1):
- Flutter - Flutter
- livekit_client (2.1.5): - livekit_client (2.1.6):
- Flutter - Flutter
- WebRTC-SDK (= 114.5735.10) - WebRTC-SDK (= 114.5735.10)
- nanopb (2.30910.0): - nanopb (2.30910.0):
@ -126,8 +124,6 @@ PODS:
- FlutterMacOS - FlutterMacOS
- permission_handler_apple (9.3.0): - permission_handler_apple (9.3.0):
- Flutter - Flutter
- platform_device_id (0.0.1):
- Flutter
- PromisesObjC (2.4.0) - PromisesObjC (2.4.0)
- SDWebImage (5.19.2): - SDWebImage (5.19.2):
- SDWebImage/Core (= 5.19.2) - SDWebImage/Core (= 5.19.2)
@ -152,7 +148,6 @@ PODS:
DEPENDENCIES: DEPENDENCIES:
- connectivity_plus (from `.symlinks/plugins/connectivity_plus/darwin`) - 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`) - device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
- file_picker (from `.symlinks/plugins/file_picker/ios`) - file_picker (from `.symlinks/plugins/file_picker/ios`)
- firebase_core (from `.symlinks/plugins/firebase_core/ios`) - firebase_core (from `.symlinks/plugins/firebase_core/ios`)
@ -166,7 +161,6 @@ DEPENDENCIES:
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
- permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`) - 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`) - sentry_flutter (from `.symlinks/plugins/sentry_flutter/ios`)
- sqflite (from `.symlinks/plugins/sqflite/darwin`) - sqflite (from `.symlinks/plugins/sqflite/darwin`)
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
@ -194,8 +188,6 @@ SPEC REPOS:
EXTERNAL SOURCES: EXTERNAL SOURCES:
connectivity_plus: connectivity_plus:
:path: ".symlinks/plugins/connectivity_plus/darwin" :path: ".symlinks/plugins/connectivity_plus/darwin"
device_info:
:path: ".symlinks/plugins/device_info/ios"
device_info_plus: device_info_plus:
:path: ".symlinks/plugins/device_info_plus/ios" :path: ".symlinks/plugins/device_info_plus/ios"
file_picker: file_picker:
@ -222,8 +214,6 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/path_provider_foundation/darwin" :path: ".symlinks/plugins/path_provider_foundation/darwin"
permission_handler_apple: permission_handler_apple:
:path: ".symlinks/plugins/permission_handler_apple/ios" :path: ".symlinks/plugins/permission_handler_apple/ios"
platform_device_id:
:path: ".symlinks/plugins/platform_device_id/ios"
sentry_flutter: sentry_flutter:
:path: ".symlinks/plugins/sentry_flutter/ios" :path: ".symlinks/plugins/sentry_flutter/ios"
sqflite: sqflite:
@ -237,7 +227,6 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS: SPEC CHECKSUMS:
connectivity_plus: ddd7f30999e1faaef5967c23d5b6d503d10434db connectivity_plus: ddd7f30999e1faaef5967c23d5b6d503d10434db
device_info: d7d233b645a32c40dfdc212de5cf646ca482f175
device_info_plus: 97af1d7e84681a90d0693e63169a5d50e0839a0d device_info_plus: 97af1d7e84681a90d0693e63169a5d50e0839a0d
DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c
DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60 DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60
@ -256,12 +245,11 @@ SPEC CHECKSUMS:
GoogleDataTransport: 6c09b596d841063d76d4288cc2d2f42cc36e1e2a GoogleDataTransport: 6c09b596d841063d76d4288cc2d2f42cc36e1e2a
GoogleUtilities: ea963c370a38a8069cc5f7ba4ca849a60b6d7d15 GoogleUtilities: ea963c370a38a8069cc5f7ba4ca849a60b6d7d15
image_picker_ios: c560581cceedb403a6ff17f2f816d7fea1421fc1 image_picker_ios: c560581cceedb403a6ff17f2f816d7fea1421fc1
livekit_client: e6adadd527ee8e52fff579498467ee89921d99f6 livekit_client: 72da4281bddb8bda3d275f49b46e9a2046d57c58
nanopb: 438bc412db1928dac798aa6fd75726007be04262 nanopb: 438bc412db1928dac798aa6fd75726007be04262
package_info_plus: 58f0028419748fad15bf008b270aaa8e54380b1c package_info_plus: 58f0028419748fad15bf008b270aaa8e54380b1c
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2 permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2
platform_device_id: 81b3e2993881f87d0c82ef151dc274df4869aef5
PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
SDWebImage: dfe95b2466a9823cf9f0c6d01217c06550d7b29a SDWebImage: dfe95b2466a9823cf9f0c6d01217c06550d7b29a
Sentry: 51b056d96914a741f63eca774d118678b1eb05a1 Sentry: 51b056d96914a741f63eca774d118678b1eb05a1

View File

@ -10,4 +10,8 @@ import Flutter
GeneratedPluginRegistrant.register(with: self) GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions) return super.application(application, didFinishLaunchingWithOptions: launchOptions)
} }
override func applicationDidBecomeActive(_ application: UIApplication) {
application.applicationIconBadgeNumber = 0;
}
} }

View File

@ -9,22 +9,12 @@ extension SolianExtenions on BuildContext {
} }
Future<void> showErrorDialog(dynamic exception) { 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>( return showDialog<void>(
useRootNavigator: true, useRootNavigator: true,
context: this, context: this,
builder: (ctx) => AlertDialog( builder: (ctx) => AlertDialog(
title: Text('errorHappened'.tr), title: Text('errorHappened'.tr),
content: Text(formatMessage(exception)), content: Text(exception.toString().capitalize!),
actions: [ actions: [
TextButton( TextButton(
onPressed: () => Navigator.pop(ctx), onPressed: () => Navigator.pop(ctx),

View File

@ -6,8 +6,6 @@ class Notification {
String subject; String subject;
String content; String content;
List<Link>? links; List<Link>? links;
bool isImportant;
bool isRealtime;
DateTime? readAt; DateTime? readAt;
int? senderId; int? senderId;
int recipientId; int recipientId;
@ -20,8 +18,6 @@ class Notification {
required this.subject, required this.subject,
required this.content, required this.content,
required this.links, required this.links,
required this.isImportant,
required this.isRealtime,
required this.readAt, required this.readAt,
required this.senderId, required this.senderId,
required this.recipientId, required this.recipientId,
@ -41,8 +37,6 @@ class Notification {
links: json['links'] != null links: json['links'] != null
? List<Link>.from(json['links'].map((x) => Link.fromJson(x))) ? List<Link>.from(json['links'].map((x) => Link.fromJson(x)))
: List.empty(), : List.empty(),
isImportant: json['is_important'],
isRealtime: json['is_realtime'],
readAt: json['read_at'], readAt: json['read_at'],
senderId: json['sender_id'], senderId: json['sender_id'],
recipientId: json['recipient_id'], recipientId: json['recipient_id'],
@ -58,8 +52,6 @@ class Notification {
'links': links != null 'links': links != null
? List<dynamic>.from(links!.map((x) => x.toJson())) ? List<dynamic>.from(links!.map((x) => x.toJson()))
: List.empty(), : List.empty(),
'is_important': isImportant,
'is_realtime': isRealtime,
'read_at': readAt, 'read_at': readAt,
'sender_id': senderId, 'sender_id': senderId,
'recipient_id': recipientId, 'recipient_id': recipientId,

View File

@ -1,11 +1,12 @@
import 'dart:async';
import 'dart:convert'; import 'dart:convert';
import 'dart:developer';
import 'dart:io'; import 'dart:io';
import 'dart:math' as math; import 'dart:math' as math;
import 'package:device_info_plus/device_info_plus.dart';
import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:get/get.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/notification.dart';
import 'package:solian/models/packet.dart'; import 'package:solian/models/packet.dart';
import 'package:solian/models/pagination.dart'; import 'package:solian/models/pagination.dart';
@ -30,7 +31,14 @@ class AccountProvider extends GetxController {
@override @override
onInit() { onInit() {
Permission.notification.request().then((status) { FirebaseMessaging.instance
.requestPermission(
alert: true,
announcement: true,
carPlay: true,
badge: true,
sound: true)
.then((status) {
notifyInitialization(); notifyInitialization();
notifyPrefetch(); notifyPrefetch();
}); });
@ -94,7 +102,7 @@ class AccountProvider extends GetxController {
}, },
onDone: () { onDone: () {
isConnected.value = false; isConnected.value = false;
Future.delayed(const Duration(seconds: 3), () => connect()); Future.delayed(const Duration(seconds: 1), () => connect());
}, },
onError: (err) { onError: (err) {
isConnected.value = false; isConnected.value = false;
@ -175,7 +183,11 @@ class AccountProvider extends GetxController {
late final String? token; late final String? token;
late final String provider; 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) { if (PlatformInfo.isIOS || PlatformInfo.isMacOS) {
provider = "apple"; provider = "apple";
@ -196,4 +208,31 @@ class AccountProvider extends GetxController {
throw Exception(resp.bodyString); 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;
}
} }

View File

@ -63,7 +63,7 @@ class ChatProvider extends GetxController {
}, },
onDone: () { onDone: () {
isConnected.value = false; isConnected.value = false;
Future.delayed(const Duration(seconds: 3), () => connect()); Future.delayed(const Duration(seconds: 1), () => connect());
}, },
onError: (err) { onError: (err) {
isConnected.value = false; isConnected.value = false;

View File

@ -1,7 +1,6 @@
import 'dart:async'; import 'dart:async';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_background/flutter_background.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:livekit_client/livekit_client.dart'; import 'package:livekit_client/livekit_client.dart';
import 'package:permission_handler/permission_handler.dart'; import 'package:permission_handler/permission_handler.dart';
@ -44,9 +43,6 @@ class ChatCallProvider extends GetxController {
if (lkPlatformIs(PlatformType.macOS) || lkPlatformIs(PlatformType.linux)) { if (lkPlatformIs(PlatformType.macOS) || lkPlatformIs(PlatformType.linux)) {
return; return;
} }
if (lkPlatformIs(PlatformType.android)) {
FlutterBackground.enableBackgroundExecution();
}
await Permission.camera.request(); await Permission.camera.request();
await Permission.microphone.request(); await Permission.microphone.request();

View File

@ -78,9 +78,9 @@ class _AccountScreenState extends State<AccountScreen> {
); );
} }
return Column( return ListView(
children: [ children: [
const AccountHeading().paddingOnly(bottom: 8), const AccountHeading().paddingOnly(bottom: 8, top: 16),
...(actionItems.map( ...(actionItems.map(
(x) => ListTile( (x) => ListTile(
contentPadding: const EdgeInsets.symmetric(horizontal: 34), contentPadding: const EdgeInsets.symmetric(horizontal: 34),

View File

@ -27,7 +27,7 @@ class _NotificationScreenState extends State<NotificationScreen> {
List<int> markList = List.empty(growable: true); List<int> markList = List.empty(growable: true);
for (final element in provider.notifications) { for (final element in provider.notifications) {
if (element.isRealtime) continue; if (element.id <= 0) continue;
markList.add(element.id); markList.add(element.id);
} }
@ -48,7 +48,7 @@ class _NotificationScreenState extends State<NotificationScreen> {
final AccountProvider provider = Get.find(); final AccountProvider provider = Get.find();
if (element.isRealtime) { if (element.id <= 0) {
provider.notifications.removeAt(index); provider.notifications.removeAt(index);
return; return;
} }

View File

@ -1,5 +1,5 @@
import 'dart:async'; import 'dart:async';
import 'dart:math' as math; import 'dart:ui';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
@ -337,20 +337,25 @@ class _ChannelChatScreenState extends State<ChannelChatScreen> {
children: [ children: [
Expanded( Expanded(
child: PagedListView<int, Message>( child: PagedListView<int, Message>(
clipBehavior: Clip.none,
reverse: true, reverse: true,
pagingController: _pagingController, pagingController: _pagingController,
builderDelegate: PagedChildBuilderDelegate<Message>( builderDelegate: PagedChildBuilderDelegate<Message>(
itemBuilder: buildHistory, itemBuilder: buildHistory,
noItemsFoundIndicatorBuilder: (_) => Container(), noItemsFoundIndicatorBuilder: (_) => Container(),
), ),
).paddingOnly(bottom: 64), ).paddingOnly(bottom: 56),
), ),
], ],
), ),
Positioned( Positioned(
bottom: math.max(MediaQuery.of(context).padding.bottom, 16), bottom: 0,
left: 0, left: 0,
right: 0, right: 0,
child: ClipRect(
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 50, sigmaY: 50),
child: SafeArea(
child: ChatMessageInput( child: ChatMessageInput(
edit: _messageToEditing, edit: _messageToEditing,
reply: _messageToReplying, reply: _messageToReplying,
@ -370,6 +375,9 @@ class _ChannelChatScreenState extends State<ChannelChatScreen> {
}, },
), ),
), ),
),
),
),
if (_ongoingCall != null) if (_ongoingCall != null)
Positioned( Positioned(
top: 0, top: 0,

View File

@ -72,7 +72,7 @@ class _ChannelDetailScreenState extends State<ChannelDetailScreen> {
ListTile( ListTile(
leading: const Icon(Icons.edit), leading: const Icon(Icons.edit),
trailing: const Icon(Icons.chevron_right), trailing: const Icon(Icons.chevron_right),
title: Text('channelAdjust'.tr), title: Text('channelAdjust'.tr.capitalize!),
onTap: () async { onTap: () async {
AppRouter.instance AppRouter.instance
.pushNamed( .pushNamed(
@ -129,12 +129,12 @@ class _ChannelDetailScreenState extends State<ChannelDetailScreen> {
ListTile( ListTile(
leading: const Icon(Icons.settings), leading: const Icon(Icons.settings),
trailing: const Icon(Icons.chevron_right), trailing: const Icon(Icons.chevron_right),
title: Text('channelSettings'.tr), title: Text('channelSettings'.tr.capitalize!),
), ),
ListTile( ListTile(
leading: const Icon(Icons.supervisor_account), leading: const Icon(Icons.supervisor_account),
trailing: const Icon(Icons.chevron_right), trailing: const Icon(Icons.chevron_right),
title: Text('channelMembers'.tr), title: Text('channelMembers'.tr.capitalize!),
onTap: () => showMemberList(), onTap: () => showMemberList(),
), ),
...(_isOwned ? ownerActions : List.empty()), ...(_isOwned ? ownerActions : List.empty()),

View File

@ -69,7 +69,7 @@ class _RealmDetailScreenState extends State<RealmDetailScreen> {
ListTile( ListTile(
leading: const Icon(Icons.edit), leading: const Icon(Icons.edit),
trailing: const Icon(Icons.chevron_right), trailing: const Icon(Icons.chevron_right),
title: Text('realmAdjust'.tr), title: Text('realmAdjust'.tr.capitalize!),
onTap: () async { onTap: () async {
AppRouter.instance AppRouter.instance
.pushNamed( .pushNamed(
@ -122,12 +122,12 @@ class _RealmDetailScreenState extends State<RealmDetailScreen> {
ListTile( ListTile(
leading: const Icon(Icons.settings), leading: const Icon(Icons.settings),
trailing: const Icon(Icons.chevron_right), trailing: const Icon(Icons.chevron_right),
title: Text('realmSettings'.tr), title: Text('realmSettings'.tr.capitalize!),
), ),
ListTile( ListTile(
leading: const Icon(Icons.supervisor_account), leading: const Icon(Icons.supervisor_account),
trailing: const Icon(Icons.chevron_right), trailing: const Icon(Icons.chevron_right),
title: Text('realmMembers'.tr), title: Text('realmMembers'.tr.capitalize!),
onTap: () => showMemberList(), onTap: () => showMemberList(),
), ),
...(_isOwned ? ownerActions : List.empty()), ...(_isOwned ? ownerActions : List.empty()),

View File

@ -14,7 +14,10 @@ abstract class ServiceFinder {
static GetConnect configureClient(String service, static GetConnect configureClient(String service,
{timeout = const Duration(seconds: 5)}) { {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]; client.httpClient.baseUrl = ServiceFinder.services[service];
return client; return client;

View File

@ -116,7 +116,7 @@ class SolianMessages extends Translations {
'realmMembers': 'Realm members', 'realmMembers': 'Realm members',
'realmMembersAdd': 'Add realm members', 'realmMembersAdd': 'Add realm members',
'realmMembersAddHint': 'Into @realm', 'realmMembersAddHint': 'Into @realm',
'realmAdjust': 'Realm Adjustment', 'realmAdjust': 'Realm adjustment',
'realmSettings': 'Realm settings', 'realmSettings': 'Realm settings',
'realmEditingNotify': 'You\'re editing realm @realm', 'realmEditingNotify': 'You\'re editing realm @realm',
'realmDeletionConfirm': 'Confirm realm deletion', 'realmDeletionConfirm': 'Confirm realm deletion',
@ -142,9 +142,9 @@ class SolianMessages extends Translations {
'channelType': 'Channel type', 'channelType': 'Channel type',
'channelTypeCommon': 'Regular', 'channelTypeCommon': 'Regular',
'channelTypeDirect': 'DM', 'channelTypeDirect': 'DM',
'channelAdjust': 'Channel Adjustment', 'channelAdjust': 'Channel adjustment',
'channelDetail': 'Channel Detail', 'channelDetail': 'Channel detail',
'channelSettings': 'Channel Settings', 'channelSettings': 'Channel settings',
'channelDeletionConfirm': 'Confirm channel deletion', 'channelDeletionConfirm': 'Confirm channel deletion',
'channelDeletionConfirmCaption': 'channelDeletionConfirmCaption':
'Are you sure to delete channel @channel? This action cannot be undone!', 'Are you sure to delete channel @channel? This action cannot be undone!',

View File

@ -2,7 +2,6 @@ import 'dart:async';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_background/flutter_background.dart';
import 'package:flutter_webrtc/flutter_webrtc.dart'; import 'package:flutter_webrtc/flutter_webrtc.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:livekit_client/livekit_client.dart'; import 'package:livekit_client/livekit_client.dart';
@ -171,35 +170,6 @@ class _ControlsWidgetState extends State<ControlsWidget> {
} }
return; 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)) { if (lkPlatformIs(PlatformType.iOS)) {
var track = await LocalVideoTrack.createScreenShareTrack( var track = await LocalVideoTrack.createScreenShareTrack(
const ScreenShareCaptureOptions( const ScreenShareCaptureOptions(
@ -223,12 +193,6 @@ class _ControlsWidgetState extends State<ControlsWidget> {
void disableScreenShare() async { void disableScreenShare() async {
await participant.setScreenShareEnabled(false); await participant.setScreenShareEnabled(false);
if (lkPlatformIs(PlatformType.android)) {
// Android specific
try {
await FlutterBackground.disableBackgroundExecution();
} catch (_) {}
}
} }
@override @override

View File

@ -56,7 +56,7 @@ class _ChatMessageInputState extends State<ChatMessageInput> {
Map<String, dynamic> encodeMessage(String content) { Map<String, dynamic> encodeMessage(String content) {
return { return {
'value': content, 'value': content.trim(),
'keypair_id': null, 'keypair_id': null,
'algorithm': 'plain', 'algorithm': 'plain',
}; };
@ -103,9 +103,11 @@ class _ChatMessageInputState extends State<ChatMessageInput> {
senderId: sender.id, senderId: sender.id,
); );
if (_editTo == null) {
message.isSending = true; message.isSending = true;
widget.onSent(message);
}
if (widget.edit == null) widget.onSent(message);
resetInput(); resetInput();
Response resp; Response resp;
@ -131,6 +133,7 @@ class _ChatMessageInputState extends State<ChatMessageInput> {
_editTo = null; _editTo = null;
_replyTo = null; _replyTo = null;
_textController.clear(); _textController.clear();
_attachments.clear();
setState(() {}); setState(() {});
} }
@ -161,12 +164,9 @@ class _ChatMessageInputState extends State<ChatMessageInput> {
) )
]; ];
return Material( return Column(
color: Theme.of(context).colorScheme.surface,
child: Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
const Divider(thickness: 0.3, height: 1),
if (_replyTo != null) if (_replyTo != null)
MaterialBanner( MaterialBanner(
leading: const FaIcon(FontAwesomeIcons.reply, size: 18), leading: const FaIcon(FontAwesomeIcons.reply, size: 18),
@ -224,7 +224,6 @@ class _ChatMessageInputState extends State<ChatMessageInput> {
).paddingOnly(left: 20, right: 16), ).paddingOnly(left: 20, right: 16),
), ),
], ],
),
); );
} }
} }

View File

@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_animate/flutter_animate.dart'; import 'package:flutter_animate/flutter_animate.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:solian/providers/account.dart'; import 'package:solian/providers/account.dart';
import 'package:solian/providers/auth.dart';
import 'package:solian/providers/chat.dart'; import 'package:solian/providers/chat.dart';
class BackgroundStateWidget extends StatelessWidget { class BackgroundStateWidget extends StatelessWidget {
@ -9,6 +10,7 @@ class BackgroundStateWidget extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final AuthProvider auth = Get.find();
final AccountProvider account = Get.find(); final AccountProvider account = Get.find();
final ChatProvider chat = Get.find(); final ChatProvider chat = Get.find();
@ -20,7 +22,13 @@ class BackgroundStateWidget extends StatelessWidget {
return Row(children: [ return Row(children: [
if (disconnected && !connecting) if (disconnected && !connecting)
IconButton( FutureBuilder(
future: auth.isAuthorized,
builder: (context, snapshot) {
if (!snapshot.hasData || snapshot.data == false) {
return const SizedBox();
}
return IconButton(
tooltip: [ tooltip: [
if (account.isConnected.isFalse) if (account.isConnected.isFalse)
'Lost Connection with Passport Server...', 'Lost Connection with Passport Server...',
@ -36,9 +44,17 @@ class BackgroundStateWidget extends StatelessWidget {
if (account.isConnected.isFalse) account.connect(); if (account.isConnected.isFalse) account.connect();
if (chat.isConnected.isFalse) chat.connect(); if (chat.isConnected.isFalse) chat.connect();
}, },
);
},
), ),
if (connecting) if (connecting)
IconButton( FutureBuilder(
future: auth.isAuthorized,
builder: (context, snapshot) {
if (!snapshot.hasData || snapshot.data == false) {
return const SizedBox();
}
return IconButton(
tooltip: [ tooltip: [
if (account.isConnecting.isTrue) if (account.isConnecting.isTrue)
'Waiting Passport Server Response...', 'Waiting Passport Server Response...',
@ -49,6 +65,8 @@ class BackgroundStateWidget extends StatelessWidget {
.animate(onPlay: (c) => c.repeat()) .animate(onPlay: (c) => c.repeat())
.rotate(duration: 1850.ms, begin: 1, end: 0), .rotate(duration: 1850.ms, begin: 1, end: 0),
onPressed: () {}, onPressed: () {},
);
},
), ),
]); ]);
}); });

View File

@ -9,7 +9,6 @@
#include <file_selector_linux/file_selector_plugin.h> #include <file_selector_linux/file_selector_plugin.h>
#include <flutter_secure_storage_linux/flutter_secure_storage_linux_plugin.h> #include <flutter_secure_storage_linux/flutter_secure_storage_linux_plugin.h>
#include <flutter_webrtc/flutter_web_r_t_c_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 <sentry_flutter/sentry_flutter_plugin.h>
#include <url_launcher_linux/url_launcher_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 = g_autoptr(FlPluginRegistrar) flutter_webrtc_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "FlutterWebRTCPlugin"); fl_plugin_registry_get_registrar_for_plugin(registry, "FlutterWebRTCPlugin");
flutter_web_r_t_c_plugin_register_with_registrar(flutter_webrtc_registrar); 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 = g_autoptr(FlPluginRegistrar) sentry_flutter_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "SentryFlutterPlugin"); fl_plugin_registry_get_registrar_for_plugin(registry, "SentryFlutterPlugin");
sentry_flutter_plugin_register_with_registrar(sentry_flutter_registrar); sentry_flutter_plugin_register_with_registrar(sentry_flutter_registrar);

View File

@ -6,7 +6,6 @@ list(APPEND FLUTTER_PLUGIN_LIST
file_selector_linux file_selector_linux
flutter_secure_storage_linux flutter_secure_storage_linux
flutter_webrtc flutter_webrtc
platform_device_id_linux
sentry_flutter sentry_flutter
url_launcher_linux url_launcher_linux
) )

View File

@ -16,9 +16,8 @@ import flutter_webrtc
import livekit_client import livekit_client
import package_info_plus import package_info_plus
import path_provider_foundation import path_provider_foundation
import platform_device_id
import platform_device_id_macos
import sentry_flutter import sentry_flutter
import shared_preferences_foundation
import sqflite import sqflite
import url_launcher_macos import url_launcher_macos
import video_player_avfoundation import video_player_avfoundation
@ -36,9 +35,8 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
LiveKitPlugin.register(with: registry.registrar(forPlugin: "LiveKitPlugin")) LiveKitPlugin.register(with: registry.registrar(forPlugin: "LiveKitPlugin"))
FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin")) FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) 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")) SentryFlutterPlugin.register(with: registry.registrar(forPlugin: "SentryFlutterPlugin"))
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin")) SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
FVPVideoPlayerPlugin.register(with: registry.registrar(forPlugin: "FVPVideoPlayerPlugin")) FVPVideoPlayerPlugin.register(with: registry.registrar(forPlugin: "FVPVideoPlayerPlugin"))

View File

@ -6,6 +6,39 @@ PODS:
- FlutterMacOS - FlutterMacOS
- file_selector_macos (0.0.1): - file_selector_macos (0.0.1):
- FlutterMacOS - 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): - flutter_local_notifications (0.0.1):
- FlutterMacOS - FlutterMacOS
- flutter_secure_storage_macos (6.1.1): - flutter_secure_storage_macos (6.1.1):
@ -14,14 +47,49 @@ PODS:
- FlutterMacOS - FlutterMacOS
- WebRTC-SDK (= 114.5735.10) - WebRTC-SDK (= 114.5735.10)
- FlutterMacOS (1.0.0) - 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 - FlutterMacOS
- WebRTC-SDK (= 114.5735.10) - 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): - package_info_plus (0.0.1):
- FlutterMacOS - FlutterMacOS
- path_provider_foundation (0.0.1): - path_provider_foundation (0.0.1):
- Flutter - Flutter
- FlutterMacOS - FlutterMacOS
- PromisesObjC (2.4.0)
- Sentry/HybridSDK (8.25.2) - Sentry/HybridSDK (8.25.2)
- sentry_flutter (8.2.0): - sentry_flutter (8.2.0):
- Flutter - Flutter
@ -43,6 +111,8 @@ DEPENDENCIES:
- connectivity_plus (from `Flutter/ephemeral/.symlinks/plugins/connectivity_plus/darwin`) - connectivity_plus (from `Flutter/ephemeral/.symlinks/plugins/connectivity_plus/darwin`)
- device_info_plus (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos`) - device_info_plus (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos`)
- file_selector_macos (from `Flutter/ephemeral/.symlinks/plugins/file_selector_macos/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_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_secure_storage_macos (from `Flutter/ephemeral/.symlinks/plugins/flutter_secure_storage_macos/macos`)
- flutter_webrtc (from `Flutter/ephemeral/.symlinks/plugins/flutter_webrtc/macos`) - flutter_webrtc (from `Flutter/ephemeral/.symlinks/plugins/flutter_webrtc/macos`)
@ -58,6 +128,15 @@ DEPENDENCIES:
SPEC REPOS: SPEC REPOS:
trunk: trunk:
- Firebase
- FirebaseCore
- FirebaseCoreInternal
- FirebaseInstallations
- FirebaseMessaging
- GoogleDataTransport
- GoogleUtilities
- nanopb
- PromisesObjC
- Sentry - Sentry
- WebRTC-SDK - WebRTC-SDK
@ -68,6 +147,10 @@ EXTERNAL SOURCES:
:path: Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos :path: Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos
file_selector_macos: file_selector_macos:
:path: Flutter/ephemeral/.symlinks/plugins/file_selector_macos/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: flutter_local_notifications:
:path: Flutter/ephemeral/.symlinks/plugins/flutter_local_notifications/macos :path: Flutter/ephemeral/.symlinks/plugins/flutter_local_notifications/macos
flutter_secure_storage_macos: flutter_secure_storage_macos:
@ -97,13 +180,24 @@ SPEC CHECKSUMS:
connectivity_plus: ddd7f30999e1faaef5967c23d5b6d503d10434db connectivity_plus: ddd7f30999e1faaef5967c23d5b6d503d10434db
device_info_plus: ce1b7762849d3ec103d0e0517299f2db7ad60720 device_info_plus: ce1b7762849d3ec103d0e0517299f2db7ad60720
file_selector_macos: 54fdab7caa3ac3fc43c9fac4d7d8d231277f8cf2 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_local_notifications: 3805ca215b2fb7f397d78b66db91f6a747af52e4
flutter_secure_storage_macos: 59459653abe1adb92abbc8ea747d79f8d19866c9 flutter_secure_storage_macos: 59459653abe1adb92abbc8ea747d79f8d19866c9
flutter_webrtc: 823284e171ecb2487b7210c214886a949c122a59 flutter_webrtc: 823284e171ecb2487b7210c214886a949c122a59
FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
livekit_client: ca5f0447742014b6e462c27b71d49dcf03ec0446 GoogleDataTransport: 6c09b596d841063d76d4288cc2d2f42cc36e1e2a
GoogleUtilities: ea963c370a38a8069cc5f7ba4ca849a60b6d7d15
livekit_client: a87c5b7bac4ecd63da1183682ec10f5cafadbaf7
nanopb: 438bc412db1928dac798aa6fd75726007be04262
package_info_plus: fa739dd842b393193c5ca93c26798dff6e3d0e0c package_info_plus: fa739dd842b393193c5ca93c26798dff6e3d0e0c
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
Sentry: 51b056d96914a741f63eca774d118678b1eb05a1 Sentry: 51b056d96914a741f63eca774d118678b1eb05a1
sentry_flutter: e8397d13e297a5d4b6be8a752e33140b21c5cc97 sentry_flutter: e8397d13e297a5d4b6be8a752e33140b21c5cc97
sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec

View File

@ -243,6 +243,7 @@
33CC110E2044A8840003C045 /* Bundle Framework */, 33CC110E2044A8840003C045 /* Bundle Framework */,
3399D490228B24CF009A79C7 /* ShellScript */, 3399D490228B24CF009A79C7 /* ShellScript */,
C5DDC734703B72E778163C68 /* [CP] Embed Pods Frameworks */, C5DDC734703B72E778163C68 /* [CP] Embed Pods Frameworks */,
7009C53F1F4A3CB93BB64EF3 /* [CP] Copy Pods Resources */,
); );
buildRules = ( buildRules = (
); );
@ -386,6 +387,23 @@
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; 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 */ = { C1C3653094F6B3FFFFCFD12B /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;

View File

@ -153,14 +153,6 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.3" version: "3.0.3"
cryptography:
dependency: transitive
description:
name: cryptography
sha256: d146b76d33d94548cf035233fbc2f4338c1242fa119013bead807d033fc4ae05
url: "https://pub.dev"
source: hosted
version: "2.7.0"
csslib: csslib:
dependency: transitive dependency: transitive
description: description:
@ -181,10 +173,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: dart_webrtc name: dart_webrtc
sha256: fe4db21dc389b99e04cb7bf43bc927dba2e42768d4c28211b66a4b5a16e4d516 sha256: d663abfe6ed95afadcb64083e364aa16dbeaadead193bb03047cf6913e57b65e
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.4.5" version: "1.4.6+hotfix.1"
dbus: dbus:
dependency: transitive dependency: transitive
description: description:
@ -193,24 +185,8 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.7.10" 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: device_info_plus:
dependency: transitive dependency: "direct main"
description: description:
name: device_info_plus name: device_info_plus
sha256: eead12d1a1ed83d8283ab4c2f3fca23ac4082f29f25f29dff0f758f57d06ec91 sha256: eead12d1a1ed83d8283ab4c2f3fca23ac4082f29f25f29dff0f758f57d06ec91
@ -366,14 +342,6 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.5.0" 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: flutter_cache_manager:
dependency: transitive dependency: transitive
description: description:
@ -516,10 +484,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: flutter_webrtc name: flutter_webrtc
sha256: "1c61bc08d14be57ac28e9e540c44b8b1b9ab1b25bbdb66a8c658e61a3211cc5d" sha256: fd5f115a08dcdc00b988bea3003c956f1b60a78a61d899cbddfb44f5d0e44d4a
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.10.7" version: "0.10.8"
font_awesome_flutter: font_awesome_flutter:
dependency: "direct main" dependency: "direct main"
description: description:
@ -708,10 +676,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: livekit_client name: livekit_client
sha256: "3792c4339db035d0320f1be8e2d99f394e5f3fe4215f95b371ce43db44a9d150" sha256: e743aadc7dfbdcc9a1bc447cfe81e6f85346b624d972a71db3ce0f11b8a00a3b
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.5" version: "2.1.6"
logging: logging:
dependency: transitive dependency: transitive
description: description:
@ -936,54 +904,6 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.11" 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: plugin_platform_interface:
dependency: transitive dependency: transitive
description: description:
@ -1048,6 +968,62 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "8.2.0" 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: sky_engine:
dependency: transitive dependency: transitive
description: flutter description: flutter
@ -1257,10 +1233,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: video_player_android name: video_player_android
sha256: "4f77780499ebbdb3a8387f3de7a9d07a7665cfb3a3741177c44a52353fe41d64" sha256: "9529001630e42988f755772972d5014d30121610700e8e502278a245939f8fc8"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.4.16" version: "2.5.0"
video_player_avfoundation: video_player_avfoundation:
dependency: transitive dependency: transitive
description: description:

View File

@ -62,13 +62,13 @@ dependencies:
livekit_client: ^2.1.5 livekit_client: ^2.1.5
flutter_webrtc: ^0.10.7 flutter_webrtc: ^0.10.7
wakelock_plus: ^1.2.5 wakelock_plus: ^1.2.5
flutter_background: ^1.2.0
cached_network_image: ^3.3.1 cached_network_image: ^3.3.1
sentry_flutter: ^8.2.0 sentry_flutter: ^8.2.0
firebase_core: ^3.0.0 firebase_core: ^3.0.0
firebase_messaging: ^15.0.0 firebase_messaging: ^15.0.0
platform_device_id: ^1.0.1
package_info_plus: ^8.0.0 package_info_plus: ^8.0.0
device_info_plus: ^10.1.0
shared_preferences: ^2.2.3
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:

View File

@ -13,7 +13,6 @@
#include <flutter_webrtc/flutter_web_r_t_c_plugin.h> #include <flutter_webrtc/flutter_web_r_t_c_plugin.h>
#include <livekit_client/live_kit_plugin.h> #include <livekit_client/live_kit_plugin.h>
#include <permission_handler_windows/permission_handler_windows_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 <sentry_flutter/sentry_flutter_plugin.h>
#include <url_launcher_windows/url_launcher_windows.h> #include <url_launcher_windows/url_launcher_windows.h>
#include <video_player_win/video_player_win_plugin_c_api.h> #include <video_player_win/video_player_win_plugin_c_api.h>
@ -33,8 +32,6 @@ void RegisterPlugins(flutter::PluginRegistry* registry) {
registry->GetRegistrarForPlugin("LiveKitPlugin")); registry->GetRegistrarForPlugin("LiveKitPlugin"));
PermissionHandlerWindowsPluginRegisterWithRegistrar( PermissionHandlerWindowsPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin")); registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin"));
PlatformDeviceIdWindowsPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("PlatformDeviceIdWindowsPlugin"));
SentryFlutterPluginRegisterWithRegistrar( SentryFlutterPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("SentryFlutterPlugin")); registry->GetRegistrarForPlugin("SentryFlutterPlugin"));
UrlLauncherWindowsRegisterWithRegistrar( UrlLauncherWindowsRegisterWithRegistrar(

View File

@ -10,7 +10,6 @@ list(APPEND FLUTTER_PLUGIN_LIST
flutter_webrtc flutter_webrtc
livekit_client livekit_client
permission_handler_windows permission_handler_windows
platform_device_id_windows
sentry_flutter sentry_flutter
url_launcher_windows url_launcher_windows
video_player_win video_player_win