🧱 Add basis of tencent rtc
This commit is contained in:
parent
937e249b87
commit
419ed666f6
@ -165,6 +165,14 @@ PODS:
|
|||||||
- super_native_extensions (0.0.1):
|
- super_native_extensions (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- SwiftyGif (5.4.5)
|
- SwiftyGif (5.4.5)
|
||||||
|
- tencent_rtc_sdk (0.0.1):
|
||||||
|
- Flutter
|
||||||
|
- TXCustomBeautyProcesserPlugin (= 1.0.2)
|
||||||
|
- TXLiteAVSDK_Professional (~> 12.3.16995)
|
||||||
|
- TXCustomBeautyProcesserPlugin (1.0.2)
|
||||||
|
- TXLiteAVSDK_Professional (12.3.16995):
|
||||||
|
- TXLiteAVSDK_Professional/Professional (= 12.3.16995)
|
||||||
|
- TXLiteAVSDK_Professional/Professional (12.3.16995)
|
||||||
- url_launcher_ios (0.0.1):
|
- url_launcher_ios (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- volume_controller (0.0.1):
|
- volume_controller (0.0.1):
|
||||||
@ -193,6 +201,7 @@ DEPENDENCIES:
|
|||||||
- sqflite_darwin (from `.symlinks/plugins/sqflite_darwin/darwin`)
|
- sqflite_darwin (from `.symlinks/plugins/sqflite_darwin/darwin`)
|
||||||
- sqlite3_flutter_libs (from `.symlinks/plugins/sqlite3_flutter_libs/darwin`)
|
- sqlite3_flutter_libs (from `.symlinks/plugins/sqlite3_flutter_libs/darwin`)
|
||||||
- super_native_extensions (from `.symlinks/plugins/super_native_extensions/ios`)
|
- super_native_extensions (from `.symlinks/plugins/super_native_extensions/ios`)
|
||||||
|
- tencent_rtc_sdk (from `.symlinks/plugins/tencent_rtc_sdk/ios`)
|
||||||
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
|
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
|
||||||
- volume_controller (from `.symlinks/plugins/volume_controller/ios`)
|
- volume_controller (from `.symlinks/plugins/volume_controller/ios`)
|
||||||
- wakelock_plus (from `.symlinks/plugins/wakelock_plus/ios`)
|
- wakelock_plus (from `.symlinks/plugins/wakelock_plus/ios`)
|
||||||
@ -216,6 +225,8 @@ SPEC REPOS:
|
|||||||
- SDWebImage
|
- SDWebImage
|
||||||
- sqlite3
|
- sqlite3
|
||||||
- SwiftyGif
|
- SwiftyGif
|
||||||
|
- TXCustomBeautyProcesserPlugin
|
||||||
|
- TXLiteAVSDK_Professional
|
||||||
|
|
||||||
EXTERNAL SOURCES:
|
EXTERNAL SOURCES:
|
||||||
croppy:
|
croppy:
|
||||||
@ -256,6 +267,8 @@ EXTERNAL SOURCES:
|
|||||||
:path: ".symlinks/plugins/sqlite3_flutter_libs/darwin"
|
:path: ".symlinks/plugins/sqlite3_flutter_libs/darwin"
|
||||||
super_native_extensions:
|
super_native_extensions:
|
||||||
:path: ".symlinks/plugins/super_native_extensions/ios"
|
:path: ".symlinks/plugins/super_native_extensions/ios"
|
||||||
|
tencent_rtc_sdk:
|
||||||
|
:path: ".symlinks/plugins/tencent_rtc_sdk/ios"
|
||||||
url_launcher_ios:
|
url_launcher_ios:
|
||||||
:path: ".symlinks/plugins/url_launcher_ios/ios"
|
:path: ".symlinks/plugins/url_launcher_ios/ios"
|
||||||
volume_controller:
|
volume_controller:
|
||||||
@ -300,6 +313,9 @@ SPEC CHECKSUMS:
|
|||||||
sqlite3_flutter_libs: f6acaa2172e6bb3e2e70c771661905080e8ebcf2
|
sqlite3_flutter_libs: f6acaa2172e6bb3e2e70c771661905080e8ebcf2
|
||||||
super_native_extensions: b763c02dc3a8fd078389f410bf15149179020cb4
|
super_native_extensions: b763c02dc3a8fd078389f410bf15149179020cb4
|
||||||
SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4
|
SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4
|
||||||
|
tencent_rtc_sdk: 13f066e69b87068b4cf3df90ad04097eb8773ae2
|
||||||
|
TXCustomBeautyProcesserPlugin: 099393b941cb40eda12b3a80bf6c0319957b1cfd
|
||||||
|
TXLiteAVSDK_Professional: 6e8fa18eeb0e52e6bbbcd97bab9ec9fbdc828df3
|
||||||
url_launcher_ios: 694010445543906933d732453a59da0a173ae33d
|
url_launcher_ios: 694010445543906933d732453a59da0a173ae33d
|
||||||
volume_controller: 3657a1f65bedb98fa41ff7dc5793537919f31b12
|
volume_controller: 3657a1f65bedb98fa41ff7dc5793537919f31b12
|
||||||
wakelock_plus: e29112ab3ef0b318e58cfa5c32326458be66b556
|
wakelock_plus: e29112ab3ef0b318e58cfa5c32326458be66b556
|
||||||
|
16
lib/database/database.native.dart
Normal file
16
lib/database/database.native.dart
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
import 'dart:io';
|
||||||
|
|
||||||
|
import 'package:drift/drift.dart';
|
||||||
|
import 'package:drift/native.dart';
|
||||||
|
import 'package:island/database/drift_db.dart';
|
||||||
|
import 'package:path/path.dart' as p;
|
||||||
|
import 'package:path_provider/path_provider.dart';
|
||||||
|
|
||||||
|
AppDatabase constructDb() {
|
||||||
|
final db = LazyDatabase(() async {
|
||||||
|
final dbFolder = await getApplicationDocumentsDirectory();
|
||||||
|
final file = File(p.join(dbFolder.path, 'solar_network_data.sqlite'));
|
||||||
|
return NativeDatabase(file);
|
||||||
|
});
|
||||||
|
return AppDatabase(db);
|
||||||
|
}
|
20
lib/database/database.web.dart
Normal file
20
lib/database/database.web.dart
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
import 'package:drift/drift.dart';
|
||||||
|
import 'package:drift/wasm.dart';
|
||||||
|
import 'package:island/database/drift_db.dart';
|
||||||
|
|
||||||
|
AppDatabase constructDb() {
|
||||||
|
return AppDatabase(connectOnWeb());
|
||||||
|
}
|
||||||
|
|
||||||
|
DatabaseConnection connectOnWeb() {
|
||||||
|
return DatabaseConnection.delayed(
|
||||||
|
Future(() async {
|
||||||
|
final result = await WasmDatabase.open(
|
||||||
|
databaseName: 'solar_network_data',
|
||||||
|
sqlite3Uri: Uri.parse('sqlite3.wasm'),
|
||||||
|
driftWorkerUri: Uri.parse('drift_worker.dart.js'),
|
||||||
|
);
|
||||||
|
return result.resolvedExecutor;
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
}
|
@ -1,17 +1,13 @@
|
|||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
import 'dart:io';
|
|
||||||
import 'package:drift/drift.dart';
|
import 'package:drift/drift.dart';
|
||||||
import 'package:drift/native.dart';
|
|
||||||
import 'package:island/database/message.dart';
|
import 'package:island/database/message.dart';
|
||||||
import 'package:path_provider/path_provider.dart';
|
|
||||||
import 'package:path/path.dart' as p;
|
|
||||||
|
|
||||||
part 'drift_db.g.dart';
|
part 'drift_db.g.dart';
|
||||||
|
|
||||||
// Define the database
|
// Define the database
|
||||||
@DriftDatabase(tables: [ChatMessages])
|
@DriftDatabase(tables: [ChatMessages])
|
||||||
class AppDatabase extends _$AppDatabase {
|
class AppDatabase extends _$AppDatabase {
|
||||||
AppDatabase() : super(_openConnection());
|
AppDatabase(super.e);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
int get schemaVersion => 1;
|
int get schemaVersion => 1;
|
||||||
@ -75,12 +71,3 @@ class AppDatabase extends _$AppDatabase {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Helper to open the database connection
|
|
||||||
LazyDatabase _openConnection() {
|
|
||||||
return LazyDatabase(() async {
|
|
||||||
final dbFolder = await getApplicationDocumentsDirectory();
|
|
||||||
final file = File(p.join(dbFolder.path, 'solar_network_data.sqlite'));
|
|
||||||
return NativeDatabase(file);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
@ -124,3 +124,14 @@ abstract class MessageSyncResponse with _$MessageSyncResponse {
|
|||||||
factory MessageSyncResponse.fromJson(Map<String, dynamic> json) =>
|
factory MessageSyncResponse.fromJson(Map<String, dynamic> json) =>
|
||||||
_$MessageSyncResponseFromJson(json);
|
_$MessageSyncResponseFromJson(json);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
abstract class ChatRealtimeJoinResponse with _$ChatRealtimeJoinResponse {
|
||||||
|
const factory ChatRealtimeJoinResponse({
|
||||||
|
required String token,
|
||||||
|
required Map<String, dynamic> config,
|
||||||
|
}) = _ChatRealtimeJoinResponse;
|
||||||
|
|
||||||
|
factory ChatRealtimeJoinResponse.fromJson(Map<String, dynamic> json) =>
|
||||||
|
_$ChatRealtimeJoinResponseFromJson(json);
|
||||||
|
}
|
||||||
|
@ -1179,6 +1179,148 @@ as DateTime,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$ChatRealtimeJoinResponse {
|
||||||
|
|
||||||
|
String get token; Map<String, dynamic> get config;
|
||||||
|
/// Create a copy of ChatRealtimeJoinResponse
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
$ChatRealtimeJoinResponseCopyWith<ChatRealtimeJoinResponse> get copyWith => _$ChatRealtimeJoinResponseCopyWithImpl<ChatRealtimeJoinResponse>(this as ChatRealtimeJoinResponse, _$identity);
|
||||||
|
|
||||||
|
/// Serializes this ChatRealtimeJoinResponse to a JSON map.
|
||||||
|
Map<String, dynamic> toJson();
|
||||||
|
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) || (other.runtimeType == runtimeType&&other is ChatRealtimeJoinResponse&&(identical(other.token, token) || other.token == token)&&const DeepCollectionEquality().equals(other.config, config));
|
||||||
|
}
|
||||||
|
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hash(runtimeType,token,const DeepCollectionEquality().hash(config));
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'ChatRealtimeJoinResponse(token: $token, config: $config)';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract mixin class $ChatRealtimeJoinResponseCopyWith<$Res> {
|
||||||
|
factory $ChatRealtimeJoinResponseCopyWith(ChatRealtimeJoinResponse value, $Res Function(ChatRealtimeJoinResponse) _then) = _$ChatRealtimeJoinResponseCopyWithImpl;
|
||||||
|
@useResult
|
||||||
|
$Res call({
|
||||||
|
String token, Map<String, dynamic> config
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
/// @nodoc
|
||||||
|
class _$ChatRealtimeJoinResponseCopyWithImpl<$Res>
|
||||||
|
implements $ChatRealtimeJoinResponseCopyWith<$Res> {
|
||||||
|
_$ChatRealtimeJoinResponseCopyWithImpl(this._self, this._then);
|
||||||
|
|
||||||
|
final ChatRealtimeJoinResponse _self;
|
||||||
|
final $Res Function(ChatRealtimeJoinResponse) _then;
|
||||||
|
|
||||||
|
/// Create a copy of ChatRealtimeJoinResponse
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline') @override $Res call({Object? token = null,Object? config = null,}) {
|
||||||
|
return _then(_self.copyWith(
|
||||||
|
token: null == token ? _self.token : token // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,config: null == config ? _self.config : config // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Map<String, dynamic>,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
@JsonSerializable()
|
||||||
|
|
||||||
|
class _ChatRealtimeJoinResponse implements ChatRealtimeJoinResponse {
|
||||||
|
const _ChatRealtimeJoinResponse({required this.token, required final Map<String, dynamic> config}): _config = config;
|
||||||
|
factory _ChatRealtimeJoinResponse.fromJson(Map<String, dynamic> json) => _$ChatRealtimeJoinResponseFromJson(json);
|
||||||
|
|
||||||
|
@override final String token;
|
||||||
|
final Map<String, dynamic> _config;
|
||||||
|
@override Map<String, dynamic> get config {
|
||||||
|
if (_config is EqualUnmodifiableMapView) return _config;
|
||||||
|
// ignore: implicit_dynamic_type
|
||||||
|
return EqualUnmodifiableMapView(_config);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// Create a copy of ChatRealtimeJoinResponse
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override @JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
_$ChatRealtimeJoinResponseCopyWith<_ChatRealtimeJoinResponse> get copyWith => __$ChatRealtimeJoinResponseCopyWithImpl<_ChatRealtimeJoinResponse>(this, _$identity);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
return _$ChatRealtimeJoinResponseToJson(this, );
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) || (other.runtimeType == runtimeType&&other is _ChatRealtimeJoinResponse&&(identical(other.token, token) || other.token == token)&&const DeepCollectionEquality().equals(other._config, _config));
|
||||||
|
}
|
||||||
|
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hash(runtimeType,token,const DeepCollectionEquality().hash(_config));
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'ChatRealtimeJoinResponse(token: $token, config: $config)';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract mixin class _$ChatRealtimeJoinResponseCopyWith<$Res> implements $ChatRealtimeJoinResponseCopyWith<$Res> {
|
||||||
|
factory _$ChatRealtimeJoinResponseCopyWith(_ChatRealtimeJoinResponse value, $Res Function(_ChatRealtimeJoinResponse) _then) = __$ChatRealtimeJoinResponseCopyWithImpl;
|
||||||
|
@override @useResult
|
||||||
|
$Res call({
|
||||||
|
String token, Map<String, dynamic> config
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
/// @nodoc
|
||||||
|
class __$ChatRealtimeJoinResponseCopyWithImpl<$Res>
|
||||||
|
implements _$ChatRealtimeJoinResponseCopyWith<$Res> {
|
||||||
|
__$ChatRealtimeJoinResponseCopyWithImpl(this._self, this._then);
|
||||||
|
|
||||||
|
final _ChatRealtimeJoinResponse _self;
|
||||||
|
final $Res Function(_ChatRealtimeJoinResponse) _then;
|
||||||
|
|
||||||
|
/// Create a copy of ChatRealtimeJoinResponse
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override @pragma('vm:prefer-inline') $Res call({Object? token = null,Object? config = null,}) {
|
||||||
|
return _then(_ChatRealtimeJoinResponse(
|
||||||
|
token: null == token ? _self.token : token // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,config: null == config ? _self._config : config // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Map<String, dynamic>,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// dart format on
|
// dart format on
|
||||||
|
@ -223,3 +223,14 @@ Map<String, dynamic> _$MessageSyncResponseToJson(
|
|||||||
'changes': instance.changes.map((e) => e.toJson()).toList(),
|
'changes': instance.changes.map((e) => e.toJson()).toList(),
|
||||||
'current_timestamp': instance.currentTimestamp.toIso8601String(),
|
'current_timestamp': instance.currentTimestamp.toIso8601String(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
_ChatRealtimeJoinResponse _$ChatRealtimeJoinResponseFromJson(
|
||||||
|
Map<String, dynamic> json,
|
||||||
|
) => _ChatRealtimeJoinResponse(
|
||||||
|
token: json['token'] as String,
|
||||||
|
config: json['config'] as Map<String, dynamic>,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$ChatRealtimeJoinResponseToJson(
|
||||||
|
_ChatRealtimeJoinResponse instance,
|
||||||
|
) => <String, dynamic>{'token': instance.token, 'config': instance.config};
|
||||||
|
11
lib/pods/database.dart
Normal file
11
lib/pods/database.dart
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
import 'package:island/database/drift_db.dart';
|
||||||
|
|
||||||
|
import 'package:island/database/database.native.dart'
|
||||||
|
if (dart.library.html) 'package:island/database/database.web.dart';
|
||||||
|
|
||||||
|
final databaseProvider = Provider<AppDatabase>((ref) {
|
||||||
|
final db = constructDb();
|
||||||
|
ref.onDispose(() => db.close());
|
||||||
|
return db;
|
||||||
|
});
|
@ -2,16 +2,10 @@ import 'dart:io';
|
|||||||
|
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:island/database/drift_db.dart';
|
import 'package:island/pods/database.dart';
|
||||||
import 'package:path/path.dart';
|
import 'package:path/path.dart';
|
||||||
import 'package:path_provider/path_provider.dart';
|
import 'package:path_provider/path_provider.dart';
|
||||||
|
|
||||||
final databaseProvider = Provider<AppDatabase>((ref) {
|
|
||||||
final db = AppDatabase();
|
|
||||||
ref.onDispose(() => db.close());
|
|
||||||
return db;
|
|
||||||
});
|
|
||||||
|
|
||||||
Future<void> resetDatabase(WidgetRef ref) async {
|
Future<void> resetDatabase(WidgetRef ref) async {
|
||||||
if (kIsWeb) return;
|
if (kIsWeb) return;
|
||||||
|
|
||||||
|
@ -10,11 +10,13 @@ import 'package:island/database/message_repository.dart';
|
|||||||
import 'package:island/models/chat.dart';
|
import 'package:island/models/chat.dart';
|
||||||
import 'package:island/models/file.dart';
|
import 'package:island/models/file.dart';
|
||||||
import 'package:island/pods/config.dart';
|
import 'package:island/pods/config.dart';
|
||||||
import 'package:island/pods/message.dart';
|
import 'package:island/pods/database.dart';
|
||||||
import 'package:island/pods/network.dart';
|
import 'package:island/pods/network.dart';
|
||||||
|
import 'package:island/pods/userinfo.dart';
|
||||||
import 'package:island/pods/websocket.dart';
|
import 'package:island/pods/websocket.dart';
|
||||||
import 'package:island/route.gr.dart';
|
import 'package:island/route.gr.dart';
|
||||||
import 'package:island/screens/posts/compose.dart';
|
import 'package:island/screens/posts/compose.dart';
|
||||||
|
import 'package:island/services/rtc.dart';
|
||||||
import 'package:island/widgets/alert.dart';
|
import 'package:island/widgets/alert.dart';
|
||||||
import 'package:island/widgets/content/cloud_file_collection.dart';
|
import 'package:island/widgets/content/cloud_file_collection.dart';
|
||||||
import 'package:island/widgets/content/cloud_files.dart';
|
import 'package:island/widgets/content/cloud_files.dart';
|
||||||
@ -471,6 +473,21 @@ class ChatRoomScreen extends HookConsumerWidget {
|
|||||||
error: (_, __) => const Text('Error'),
|
error: (_, __) => const Text('Error'),
|
||||||
),
|
),
|
||||||
actions: [
|
actions: [
|
||||||
|
IconButton(
|
||||||
|
onPressed: () {
|
||||||
|
final user = ref.watch(userInfoProvider);
|
||||||
|
if (currentlyJoined) {
|
||||||
|
leaveRealtimeChat(chatRoom.value!);
|
||||||
|
} else {
|
||||||
|
joinRealtimeChat(
|
||||||
|
ref.watch(apiClientProvider),
|
||||||
|
chatRoom.value!,
|
||||||
|
user.value!,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
icon: const Icon(Symbols.video_call),
|
||||||
|
),
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: const Icon(Icons.more_vert),
|
icon: const Icon(Icons.more_vert),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
|
51
lib/services/rtc.dart
Normal file
51
lib/services/rtc.dart
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
import 'package:dio/dio.dart';
|
||||||
|
import 'package:island/models/chat.dart';
|
||||||
|
import 'package:island/models/user.dart';
|
||||||
|
import 'package:tencent_rtc_sdk/trtc_cloud.dart';
|
||||||
|
import 'package:tencent_rtc_sdk/trtc_cloud_def.dart';
|
||||||
|
import 'package:tencent_rtc_sdk/trtc_cloud_listener.dart';
|
||||||
|
|
||||||
|
Future<TRTCCloud> _getTRTCCloud() async {
|
||||||
|
return TRTCCloud.sharedInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool currentlyJoined = false;
|
||||||
|
|
||||||
|
Future<void> joinRealtimeChat(
|
||||||
|
Dio apiClient,
|
||||||
|
SnChatRoom chat,
|
||||||
|
SnAccount user,
|
||||||
|
) async {
|
||||||
|
final resp = await apiClient.get('/chat/realtime/${chat.id}');
|
||||||
|
final data = ChatRealtimeJoinResponse.fromJson(resp.data);
|
||||||
|
final config = data.config;
|
||||||
|
final cloud = await _getTRTCCloud();
|
||||||
|
cloud.setConsoleEnabled(true);
|
||||||
|
cloud.registerListener(
|
||||||
|
TRTCCloudListener(
|
||||||
|
onRemoteUserEnterRoom: (userId) {
|
||||||
|
print('onRemoteUserEnterRoom: $userId');
|
||||||
|
},
|
||||||
|
onRemoteUserLeaveRoom: (userId, reason) {
|
||||||
|
print('onRemoteUserLeaveRoom: $userId, $reason');
|
||||||
|
},
|
||||||
|
),
|
||||||
|
);
|
||||||
|
cloud.enterRoom(
|
||||||
|
TRTCParams(
|
||||||
|
sdkAppId: config['app_id'],
|
||||||
|
userId: user.name,
|
||||||
|
userSig: data.token,
|
||||||
|
roomId: chat.id,
|
||||||
|
role: TRTCRoleType.anchor,
|
||||||
|
),
|
||||||
|
TRTCAppScene.voiceChatRoom,
|
||||||
|
);
|
||||||
|
cloud.startLocalAudio(TRTCAudioQuality.speech);
|
||||||
|
currentlyJoined = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> leaveRealtimeChat(SnChatRoom chat) async {
|
||||||
|
final cloud = await _getTRTCCloud();
|
||||||
|
cloud.exitRoom();
|
||||||
|
}
|
@ -6,6 +6,7 @@ import 'package:easy_localization/easy_localization.dart';
|
|||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
import 'package:island/pods/userinfo.dart';
|
||||||
import 'package:island/pods/websocket.dart';
|
import 'package:island/pods/websocket.dart';
|
||||||
import 'package:island/route.dart';
|
import 'package:island/route.dart';
|
||||||
import 'package:material_symbols_icons/material_symbols_icons.dart';
|
import 'package:material_symbols_icons/material_symbols_icons.dart';
|
||||||
@ -258,6 +259,7 @@ class _WebSocketIndicator extends HookConsumerWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
|
final user = ref.watch(userInfoProvider);
|
||||||
final websocketState = ref.watch(websocketStateProvider);
|
final websocketState = ref.watch(websocketStateProvider);
|
||||||
final indicatorHeight = MediaQuery.of(context).padding.top + 60;
|
final indicatorHeight = MediaQuery.of(context).padding.top + 60;
|
||||||
|
|
||||||
@ -277,7 +279,10 @@ class _WebSocketIndicator extends HookConsumerWidget {
|
|||||||
|
|
||||||
return AnimatedPositioned(
|
return AnimatedPositioned(
|
||||||
duration: Duration(milliseconds: 1850),
|
duration: Duration(milliseconds: 1850),
|
||||||
top: websocketState == WebSocketState.connected() ? -indicatorHeight : 0,
|
top:
|
||||||
|
!user.hasValue || websocketState == WebSocketState.connected()
|
||||||
|
? -indicatorHeight
|
||||||
|
: 0,
|
||||||
curve: Curves.fastLinearToSlowEaseIn,
|
curve: Curves.fastLinearToSlowEaseIn,
|
||||||
left: 0,
|
left: 0,
|
||||||
right: 0,
|
right: 0,
|
||||||
|
@ -23,6 +23,7 @@ import shared_preferences_foundation
|
|||||||
import sqflite_darwin
|
import sqflite_darwin
|
||||||
import sqlite3_flutter_libs
|
import sqlite3_flutter_libs
|
||||||
import super_native_extensions
|
import super_native_extensions
|
||||||
|
import tencent_rtc_sdk
|
||||||
import url_launcher_macos
|
import url_launcher_macos
|
||||||
import volume_controller
|
import volume_controller
|
||||||
import wakelock_plus
|
import wakelock_plus
|
||||||
@ -46,6 +47,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
|||||||
SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
|
SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
|
||||||
Sqlite3FlutterLibsPlugin.register(with: registry.registrar(forPlugin: "Sqlite3FlutterLibsPlugin"))
|
Sqlite3FlutterLibsPlugin.register(with: registry.registrar(forPlugin: "Sqlite3FlutterLibsPlugin"))
|
||||||
SuperNativeExtensionsPlugin.register(with: registry.registrar(forPlugin: "SuperNativeExtensionsPlugin"))
|
SuperNativeExtensionsPlugin.register(with: registry.registrar(forPlugin: "SuperNativeExtensionsPlugin"))
|
||||||
|
TencentRTCCloud.register(with: registry.registrar(forPlugin: "TencentRTCCloud"))
|
||||||
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
|
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
|
||||||
VolumeControllerPlugin.register(with: registry.registrar(forPlugin: "VolumeControllerPlugin"))
|
VolumeControllerPlugin.register(with: registry.registrar(forPlugin: "VolumeControllerPlugin"))
|
||||||
WakelockPlusMacosPlugin.register(with: registry.registrar(forPlugin: "WakelockPlusMacosPlugin"))
|
WakelockPlusMacosPlugin.register(with: registry.registrar(forPlugin: "WakelockPlusMacosPlugin"))
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
PODS:
|
PODS:
|
||||||
- bitsdojo_window_macos (0.0.1):
|
- bitsdojo_window_macos (0.0.1):
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
|
- croppy (0.0.1):
|
||||||
|
- FlutterMacOS
|
||||||
- device_info_plus (0.0.1):
|
- device_info_plus (0.0.1):
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- file_picker (0.0.1):
|
- file_picker (0.0.1):
|
||||||
@ -94,8 +96,6 @@ PODS:
|
|||||||
- Flutter
|
- Flutter
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- PromisesObjC (2.4.0)
|
- PromisesObjC (2.4.0)
|
||||||
- quill_native_bridge_macos (0.0.1):
|
|
||||||
- FlutterMacOS
|
|
||||||
- SAMKeychain (1.5.3)
|
- SAMKeychain (1.5.3)
|
||||||
- shared_preferences_foundation (0.0.1):
|
- shared_preferences_foundation (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
@ -127,6 +127,10 @@ PODS:
|
|||||||
- sqlite3/rtree
|
- sqlite3/rtree
|
||||||
- super_native_extensions (0.0.1):
|
- super_native_extensions (0.0.1):
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
|
- tencent_rtc_sdk (10.4):
|
||||||
|
- FlutterMacOS
|
||||||
|
- TXLiteAVSDK_TRTC_Mac (~> 12.3.16995)
|
||||||
|
- TXLiteAVSDK_TRTC_Mac (12.3.16995)
|
||||||
- url_launcher_macos (0.0.1):
|
- url_launcher_macos (0.0.1):
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- volume_controller (0.0.1):
|
- volume_controller (0.0.1):
|
||||||
@ -136,6 +140,7 @@ PODS:
|
|||||||
|
|
||||||
DEPENDENCIES:
|
DEPENDENCIES:
|
||||||
- bitsdojo_window_macos (from `Flutter/ephemeral/.symlinks/plugins/bitsdojo_window_macos/macos`)
|
- bitsdojo_window_macos (from `Flutter/ephemeral/.symlinks/plugins/bitsdojo_window_macos/macos`)
|
||||||
|
- croppy (from `Flutter/ephemeral/.symlinks/plugins/croppy/macos`)
|
||||||
- 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_picker (from `Flutter/ephemeral/.symlinks/plugins/file_picker/macos`)
|
- file_picker (from `Flutter/ephemeral/.symlinks/plugins/file_picker/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`)
|
||||||
@ -150,11 +155,11 @@ DEPENDENCIES:
|
|||||||
- media_kit_video (from `Flutter/ephemeral/.symlinks/plugins/media_kit_video/macos`)
|
- media_kit_video (from `Flutter/ephemeral/.symlinks/plugins/media_kit_video/macos`)
|
||||||
- package_info_plus (from `Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos`)
|
- package_info_plus (from `Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos`)
|
||||||
- path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`)
|
- path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`)
|
||||||
- quill_native_bridge_macos (from `Flutter/ephemeral/.symlinks/plugins/quill_native_bridge_macos/macos`)
|
|
||||||
- shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`)
|
- shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`)
|
||||||
- sqflite_darwin (from `Flutter/ephemeral/.symlinks/plugins/sqflite_darwin/darwin`)
|
- sqflite_darwin (from `Flutter/ephemeral/.symlinks/plugins/sqflite_darwin/darwin`)
|
||||||
- sqlite3_flutter_libs (from `Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/darwin`)
|
- sqlite3_flutter_libs (from `Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/darwin`)
|
||||||
- super_native_extensions (from `Flutter/ephemeral/.symlinks/plugins/super_native_extensions/macos`)
|
- super_native_extensions (from `Flutter/ephemeral/.symlinks/plugins/super_native_extensions/macos`)
|
||||||
|
- tencent_rtc_sdk (from `Flutter/ephemeral/.symlinks/plugins/tencent_rtc_sdk/macos`)
|
||||||
- url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`)
|
- url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`)
|
||||||
- volume_controller (from `Flutter/ephemeral/.symlinks/plugins/volume_controller/macos`)
|
- volume_controller (from `Flutter/ephemeral/.symlinks/plugins/volume_controller/macos`)
|
||||||
- wakelock_plus (from `Flutter/ephemeral/.symlinks/plugins/wakelock_plus/macos`)
|
- wakelock_plus (from `Flutter/ephemeral/.symlinks/plugins/wakelock_plus/macos`)
|
||||||
@ -173,10 +178,13 @@ SPEC REPOS:
|
|||||||
- PromisesObjC
|
- PromisesObjC
|
||||||
- SAMKeychain
|
- SAMKeychain
|
||||||
- sqlite3
|
- sqlite3
|
||||||
|
- TXLiteAVSDK_TRTC_Mac
|
||||||
|
|
||||||
EXTERNAL SOURCES:
|
EXTERNAL SOURCES:
|
||||||
bitsdojo_window_macos:
|
bitsdojo_window_macos:
|
||||||
:path: Flutter/ephemeral/.symlinks/plugins/bitsdojo_window_macos/macos
|
:path: Flutter/ephemeral/.symlinks/plugins/bitsdojo_window_macos/macos
|
||||||
|
croppy:
|
||||||
|
:path: Flutter/ephemeral/.symlinks/plugins/croppy/macos
|
||||||
device_info_plus:
|
device_info_plus:
|
||||||
:path: Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos
|
:path: Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos
|
||||||
file_picker:
|
file_picker:
|
||||||
@ -205,8 +213,6 @@ EXTERNAL SOURCES:
|
|||||||
:path: Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos
|
:path: Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos
|
||||||
path_provider_foundation:
|
path_provider_foundation:
|
||||||
:path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin
|
:path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin
|
||||||
quill_native_bridge_macos:
|
|
||||||
:path: Flutter/ephemeral/.symlinks/plugins/quill_native_bridge_macos/macos
|
|
||||||
shared_preferences_foundation:
|
shared_preferences_foundation:
|
||||||
:path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin
|
:path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin
|
||||||
sqflite_darwin:
|
sqflite_darwin:
|
||||||
@ -215,6 +221,8 @@ EXTERNAL SOURCES:
|
|||||||
:path: Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/darwin
|
:path: Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/darwin
|
||||||
super_native_extensions:
|
super_native_extensions:
|
||||||
:path: Flutter/ephemeral/.symlinks/plugins/super_native_extensions/macos
|
:path: Flutter/ephemeral/.symlinks/plugins/super_native_extensions/macos
|
||||||
|
tencent_rtc_sdk:
|
||||||
|
:path: Flutter/ephemeral/.symlinks/plugins/tencent_rtc_sdk/macos
|
||||||
url_launcher_macos:
|
url_launcher_macos:
|
||||||
:path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos
|
:path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos
|
||||||
volume_controller:
|
volume_controller:
|
||||||
@ -224,6 +232,7 @@ EXTERNAL SOURCES:
|
|||||||
|
|
||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
bitsdojo_window_macos: 7959fb0ca65a3ccda30095c181ecb856fae48ea9
|
bitsdojo_window_macos: 7959fb0ca65a3ccda30095c181ecb856fae48ea9
|
||||||
|
croppy: d9bfc8c02f3cd1851f669a421df298a474b78f43
|
||||||
device_info_plus: 4fb280989f669696856f8b129e4a5e3cd6c48f76
|
device_info_plus: 4fb280989f669696856f8b129e4a5e3cd6c48f76
|
||||||
file_picker: 7584aae6fa07a041af2b36a2655122d42f578c1a
|
file_picker: 7584aae6fa07a041af2b36a2655122d42f578c1a
|
||||||
file_selector_macos: 6280b52b459ae6c590af5d78fc35c7267a3c4b31
|
file_selector_macos: 6280b52b459ae6c590af5d78fc35c7267a3c4b31
|
||||||
@ -248,13 +257,14 @@ SPEC CHECKSUMS:
|
|||||||
package_info_plus: f0052d280d17aa382b932f399edf32507174e870
|
package_info_plus: f0052d280d17aa382b932f399edf32507174e870
|
||||||
path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
|
path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
|
||||||
PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
|
PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
|
||||||
quill_native_bridge_macos: 2b005cb56902bb740e0cd9620aa399dfac6b4882
|
|
||||||
SAMKeychain: 483e1c9f32984d50ca961e26818a534283b4cd5c
|
SAMKeychain: 483e1c9f32984d50ca961e26818a534283b4cd5c
|
||||||
shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
|
shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
|
||||||
sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0
|
sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0
|
||||||
sqlite3: fc1400008a9b3525f5914ed715a5d1af0b8f4983
|
sqlite3: fc1400008a9b3525f5914ed715a5d1af0b8f4983
|
||||||
sqlite3_flutter_libs: f6acaa2172e6bb3e2e70c771661905080e8ebcf2
|
sqlite3_flutter_libs: f6acaa2172e6bb3e2e70c771661905080e8ebcf2
|
||||||
super_native_extensions: c2795d6d9aedf4a79fae25cb6160b71b50549189
|
super_native_extensions: c2795d6d9aedf4a79fae25cb6160b71b50549189
|
||||||
|
tencent_rtc_sdk: bedbb2bcdf50f5cff9b551d19ed7228391ba1a5c
|
||||||
|
TXLiteAVSDK_TRTC_Mac: bd4218d0415c950913f8f893267e18dd4333f633
|
||||||
url_launcher_macos: 0fba8ddabfc33ce0a9afe7c5fef5aab3d8d2d673
|
url_launcher_macos: 0fba8ddabfc33ce0a9afe7c5fef5aab3d8d2d673
|
||||||
volume_controller: 5c068e6d085c80dadd33fc2c918d2114b775b3dd
|
volume_controller: 5c068e6d085c80dadd33fc2c918d2114b775b3dd
|
||||||
wakelock_plus: 21ddc249ac4b8d018838dbdabd65c5976c308497
|
wakelock_plus: 21ddc249ac4b8d018838dbdabd65c5976c308497
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; };
|
33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; };
|
||||||
33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; };
|
33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; };
|
||||||
33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; };
|
33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; };
|
||||||
|
73FC47352DCA4A98007D6BA4 /* ScreenCaptureKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73FC47332DCA4A96007D6BA4 /* ScreenCaptureKit.framework */; };
|
||||||
81323E2800290FDA28F313ED /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 99A9898F9135B8B94E49BD2B /* Pods_Runner.framework */; };
|
81323E2800290FDA28F313ED /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 99A9898F9135B8B94E49BD2B /* Pods_Runner.framework */; };
|
||||||
B48F10F93F6AB0C5490C5A07 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = B48604B824333A68BCFDF84A /* GoogleService-Info.plist */; };
|
B48F10F93F6AB0C5490C5A07 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = B48604B824333A68BCFDF84A /* GoogleService-Info.plist */; };
|
||||||
C2C92AFDE3C1A59CFAF66C7C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DEA64C50BF85AF58D10A213 /* Pods_RunnerTests.framework */; };
|
C2C92AFDE3C1A59CFAF66C7C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DEA64C50BF85AF58D10A213 /* Pods_RunnerTests.framework */; };
|
||||||
@ -49,19 +50,6 @@
|
|||||||
};
|
};
|
||||||
/* End PBXContainerItemProxy section */
|
/* End PBXContainerItemProxy section */
|
||||||
|
|
||||||
/* Begin PBXCopyFilesBuildPhase section */
|
|
||||||
33CC110E2044A8840003C045 /* Bundle Framework */ = {
|
|
||||||
isa = PBXCopyFilesBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
dstPath = "";
|
|
||||||
dstSubfolderSpec = 10;
|
|
||||||
files = (
|
|
||||||
);
|
|
||||||
name = "Bundle Framework";
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
/* End PBXCopyFilesBuildPhase section */
|
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
1DEA64C50BF85AF58D10A213 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
1DEA64C50BF85AF58D10A213 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
30FD87E3D579B3530B39AD6D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = "<group>"; };
|
30FD87E3D579B3530B39AD6D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = "<group>"; };
|
||||||
@ -84,6 +72,7 @@
|
|||||||
43D88ABB378B9C7DB274779D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
|
43D88ABB378B9C7DB274779D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
|
||||||
45CA28B3BA0F7F54A2F794A5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = "<group>"; };
|
45CA28B3BA0F7F54A2F794A5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = "<group>"; };
|
||||||
4FD6FBF4162DE650C8F39C11 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
|
4FD6FBF4162DE650C8F39C11 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
|
||||||
|
73FC47332DCA4A96007D6BA4 /* ScreenCaptureKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ScreenCaptureKit.framework; path = System/Library/Frameworks/ScreenCaptureKit.framework; sourceTree = SDKROOT; };
|
||||||
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = "<group>"; };
|
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = "<group>"; };
|
||||||
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = "<group>"; };
|
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = "<group>"; };
|
||||||
97CE52E8413D7559BF9A7981 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = "<group>"; };
|
97CE52E8413D7559BF9A7981 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = "<group>"; };
|
||||||
@ -105,6 +94,7 @@
|
|||||||
isa = PBXFrameworksBuildPhase;
|
isa = PBXFrameworksBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
73FC47352DCA4A98007D6BA4 /* ScreenCaptureKit.framework in Frameworks */,
|
||||||
81323E2800290FDA28F313ED /* Pods_Runner.framework in Frameworks */,
|
81323E2800290FDA28F313ED /* Pods_Runner.framework in Frameworks */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
@ -204,6 +194,7 @@
|
|||||||
D73912EC22F37F3D000D13A0 /* Frameworks */ = {
|
D73912EC22F37F3D000D13A0 /* Frameworks */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
73FC47332DCA4A96007D6BA4 /* ScreenCaptureKit.framework */,
|
||||||
99A9898F9135B8B94E49BD2B /* Pods_Runner.framework */,
|
99A9898F9135B8B94E49BD2B /* Pods_Runner.framework */,
|
||||||
1DEA64C50BF85AF58D10A213 /* Pods_RunnerTests.framework */,
|
1DEA64C50BF85AF58D10A213 /* Pods_RunnerTests.framework */,
|
||||||
);
|
);
|
||||||
@ -240,7 +231,6 @@
|
|||||||
33CC10E92044A3C60003C045 /* Sources */,
|
33CC10E92044A3C60003C045 /* Sources */,
|
||||||
33CC10EA2044A3C60003C045 /* Frameworks */,
|
33CC10EA2044A3C60003C045 /* Frameworks */,
|
||||||
33CC10EB2044A3C60003C045 /* Resources */,
|
33CC10EB2044A3C60003C045 /* Resources */,
|
||||||
33CC110E2044A8840003C045 /* Bundle Framework */,
|
|
||||||
3399D490228B24CF009A79C7 /* ShellScript */,
|
3399D490228B24CF009A79C7 /* ShellScript */,
|
||||||
F1E275A871246799FC3019F6 /* [CP] Embed Pods Frameworks */,
|
F1E275A871246799FC3019F6 /* [CP] Embed Pods Frameworks */,
|
||||||
8D06F41203F1FD2FDE04DC7F /* [CP] Copy Pods Resources */,
|
8D06F41203F1FD2FDE04DC7F /* [CP] Copy Pods Resources */,
|
||||||
|
@ -1738,6 +1738,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.3.1"
|
version: "3.3.1"
|
||||||
|
tencent_rtc_sdk:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: tencent_rtc_sdk
|
||||||
|
sha256: "0ec7f3a32c443573a0509d06bf390e11a709fca338a46645c1d4dbc3f17f029a"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "12.3.6"
|
||||||
term_glyph:
|
term_glyph:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -91,6 +91,7 @@ dependencies:
|
|||||||
flutter_expandable_fab: ^2.5.0
|
flutter_expandable_fab: ^2.5.0
|
||||||
markdown_editor_plus: ^0.2.15
|
markdown_editor_plus: ^0.2.15
|
||||||
croppy: ^1.3.6
|
croppy: ^1.3.6
|
||||||
|
tencent_rtc_sdk: ^12.3.6
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
2
web/_redirects
Normal file
2
web/_redirects
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/assets/assets/translations/en.json /assets/assets/translations/en-US.json 301
|
||||||
|
/assets/assets/translations/zh.json /assets/assets/translations/zh-CN.json 301
|
13631
web/drift_worker.dart.js
Normal file
13631
web/drift_worker.dart.js
Normal file
File diff suppressed because one or more lines are too long
BIN
web/sqlite3.wasm
Normal file
BIN
web/sqlite3.wasm
Normal file
Binary file not shown.
@ -17,6 +17,7 @@
|
|||||||
#include <media_kit_video/media_kit_video_plugin_c_api.h>
|
#include <media_kit_video/media_kit_video_plugin_c_api.h>
|
||||||
#include <sqlite3_flutter_libs/sqlite3_flutter_libs_plugin.h>
|
#include <sqlite3_flutter_libs/sqlite3_flutter_libs_plugin.h>
|
||||||
#include <super_native_extensions/super_native_extensions_plugin_c_api.h>
|
#include <super_native_extensions/super_native_extensions_plugin_c_api.h>
|
||||||
|
#include <tencent_rtc_sdk/trtc_plugin_c_api.h>
|
||||||
#include <url_launcher_windows/url_launcher_windows.h>
|
#include <url_launcher_windows/url_launcher_windows.h>
|
||||||
#include <volume_controller/volume_controller_plugin_c_api.h>
|
#include <volume_controller/volume_controller_plugin_c_api.h>
|
||||||
|
|
||||||
@ -43,6 +44,8 @@ void RegisterPlugins(flutter::PluginRegistry* registry) {
|
|||||||
registry->GetRegistrarForPlugin("Sqlite3FlutterLibsPlugin"));
|
registry->GetRegistrarForPlugin("Sqlite3FlutterLibsPlugin"));
|
||||||
SuperNativeExtensionsPluginCApiRegisterWithRegistrar(
|
SuperNativeExtensionsPluginCApiRegisterWithRegistrar(
|
||||||
registry->GetRegistrarForPlugin("SuperNativeExtensionsPluginCApi"));
|
registry->GetRegistrarForPlugin("SuperNativeExtensionsPluginCApi"));
|
||||||
|
TrtcPluginCApiRegisterWithRegistrar(
|
||||||
|
registry->GetRegistrarForPlugin("TrtcPluginCApi"));
|
||||||
UrlLauncherWindowsRegisterWithRegistrar(
|
UrlLauncherWindowsRegisterWithRegistrar(
|
||||||
registry->GetRegistrarForPlugin("UrlLauncherWindows"));
|
registry->GetRegistrarForPlugin("UrlLauncherWindows"));
|
||||||
VolumeControllerPluginCApiRegisterWithRegistrar(
|
VolumeControllerPluginCApiRegisterWithRegistrar(
|
||||||
|
@ -14,6 +14,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
|
|||||||
media_kit_video
|
media_kit_video
|
||||||
sqlite3_flutter_libs
|
sqlite3_flutter_libs
|
||||||
super_native_extensions
|
super_native_extensions
|
||||||
|
tencent_rtc_sdk
|
||||||
url_launcher_windows
|
url_launcher_windows
|
||||||
volume_controller
|
volume_controller
|
||||||
)
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user