diff --git a/assets/translations/en.json b/assets/translations/en.json index d2927b6..24325b7 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -175,6 +175,12 @@ "channelDeleteDescription": "Are you sure you want to delete this channel? This operation is irreversible, all messages in this channel will be permanently deleted.", "channelDetailPersonalRegion": "Personal", "channelDetailMemberRegion": "Members", + "channelMemberManage": "Manage Member", + "channelMemberManageDescription": "Manage the existing members of this channel.", + "channelMemberAdd": "Add Member", + "channelMemberAddDescription": "Add new member to this channel.", + "channelMemberAdded": "Channel member has been added.", + "fieldMemberRelatedName": "Member name / account ID", "channelDetailAdminRegion": "Administration", "channelEditProfile": "Edit Channel Profile", "channelEdit": "Edit Channel", diff --git a/assets/translations/zh.json b/assets/translations/zh.json index e4a7bbe..70210cd 100644 --- a/assets/translations/zh.json +++ b/assets/translations/zh.json @@ -175,6 +175,12 @@ "channelDeleteDescription": "你确定要删除这个聊天频道吗?该操作不可撤销,其频道内的所有消息将被永久删除。", "channelDetailPersonalRegion": "个人区域", "channelDetailMemberRegion": "成员管理", + "channelMemberManage": "管理成员", + "channelMemberManageDescription": "管理频道内现有成员。", + "channelMemberAdd": "添加成员", + "channelMemberAddDescription": "给当前频道添加新成员。", + "channelMemberAdded": "频道成员已添加。", + "fieldMemberRelatedName": "成员名 / 账户 ID", "channelDetailAdminRegion": "管理区域", "channelEditProfile": "更改频道身份", "channelEdit": "编辑频道", diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 8924a71..5aab488 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -162,7 +162,7 @@ PODS: - GoogleUtilities/Privacy - image_picker_ios (0.0.1): - Flutter - - livekit_client (2.3.0): + - livekit_client (2.3.1): - Flutter - WebRTC-SDK (= 125.6422.05) - media_kit_libs_ios_video (1.0.4): @@ -189,9 +189,9 @@ PODS: - SAMKeychain (1.5.3) - screen_brightness_ios (0.1.0): - Flutter - - SDWebImage (5.19.7): - - SDWebImage/Core (= 5.19.7) - - SDWebImage/Core (5.19.7) + - SDWebImage (5.20.0): + - SDWebImage/Core (= 5.20.0) + - SDWebImage/Core (5.20.0) - Sentry/HybridSDK (8.40.1) - sentry_flutter (8.10.1): - Flutter @@ -346,7 +346,7 @@ SPEC CHECKSUMS: GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7 GoogleUtilities: 26a3abef001b6533cf678d3eb38fd3f614b7872d image_picker_ios: c560581cceedb403a6ff17f2f816d7fea1421fc1 - livekit_client: 5c31e13cd17dd0d545a074290c937dbdff1d809d + livekit_client: e5e1be9c3fedd51c63f3ec4b4d3c616e9744c92b media_kit_libs_ios_video: a5fe24bc7875ccd6378a0978c13185e1344651c1 media_kit_native_event_loop: e6b2ab20cf0746eb1c33be961fcf79667304fa2a media_kit_video: 5da63f157170e5bf303bf85453b7ef6971218a2e @@ -358,7 +358,7 @@ SPEC CHECKSUMS: PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 SAMKeychain: 483e1c9f32984d50ca961e26818a534283b4cd5c screen_brightness_ios: 715ca807df953bf676d339f11464e438143ee625 - SDWebImage: 8a6b7b160b4d710e2a22b6900e25301075c34cb3 + SDWebImage: 73c6079366fea25fa4bb9640d5fb58f0893facd8 Sentry: e9215d7b17f7902692b4f8700e061e4f853e3521 sentry_flutter: 927eed60d66951d1b0f1db37fe94ff5cb7c80231 shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 @@ -371,4 +371,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: d2bdaa1cc7915e14cf47235c34a21fcb07b00390 -COCOAPODS: 1.15.2 +COCOAPODS: 1.16.2 diff --git a/lib/main.dart b/lib/main.dart index 45ba465..fa65d2c 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -55,8 +55,6 @@ void main() async { 'https://c218d44126d59d69301e730498494def@o4506965897117696.ingest.us.sentry.io/4508346768228352'; options.tracesSampleRate = 1.0; options.profilesSampleRate = 1.0; - options.experimental.replay.sessionSampleRate = 1.0; - options.experimental.replay.onErrorSampleRate = 1.0; }, appRunner: () => runApp(const SolianApp()), ); diff --git a/lib/providers/notification.dart b/lib/providers/notification.dart index ccd5a7e..d2b177c 100644 --- a/lib/providers/notification.dart +++ b/lib/providers/notification.dart @@ -8,17 +8,14 @@ import 'package:flutter_udid/flutter_udid.dart'; import 'package:provider/provider.dart'; import 'package:surface/providers/sn_network.dart'; import 'package:surface/providers/userinfo.dart'; -import 'package:surface/providers/websocket.dart'; class NotificationProvider extends ChangeNotifier { late final SnNetworkProvider _sn; late final UserProvider _ua; - late final WebSocketProvider _ws; NotificationProvider(BuildContext context) { _sn = context.read(); _ua = context.read(); - _ws = context.read(); // Delay to wait user provider ready to use Future.delayed(const Duration(milliseconds: 3000), () async { diff --git a/lib/screens/chat/channel_detail.dart b/lib/screens/chat/channel_detail.dart index 54c2fea..1279085 100644 --- a/lib/screens/chat/channel_detail.dart +++ b/lib/screens/chat/channel_detail.dart @@ -14,6 +14,7 @@ import 'package:surface/types/chat.dart'; import 'package:surface/widgets/account/account_image.dart'; import 'package:surface/widgets/dialog.dart'; import 'package:surface/widgets/loading_indicator.dart'; +import 'package:very_good_infinite_list/very_good_infinite_list.dart'; class ChannelDetailScreen extends StatefulWidget { final String scope; @@ -155,6 +156,24 @@ class _ChannelDetailScreenState extends State { }); } + void _showMemberList() { + showModalBottomSheet( + context: context, + builder: (context) => _ChannelMemberListWidget( + channel: _channel!, + ), + ); + } + + void _showMemberAdd() { + showModalBottomSheet( + context: context, + builder: (context) => _NewChannelMemberWidget( + channel: _channel!, + ), + ); + } + @override void initState() { super.initState(); @@ -270,6 +289,32 @@ class _ChannelDetailScreenState extends State { ), ], ).padding(bottom: 16), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text('channelDetailMemberRegion') + .bold() + .fontSize(17) + .tr() + .padding(horizontal: 20, bottom: 4), + ListTile( + leading: const Icon(Symbols.group), + trailing: const Icon(Symbols.chevron_right), + title: Text('channelMemberManage').tr(), + subtitle: Text('channelMemberManageDescription').tr(), + contentPadding: const EdgeInsets.symmetric(horizontal: 24), + onTap: _showMemberList, + ), + ListTile( + leading: const Icon(Symbols.group_add), + trailing: const Icon(Symbols.chevron_right), + title: Text('channelMemberAdd').tr(), + subtitle: Text('channelMemberAddDescription').tr(), + contentPadding: const EdgeInsets.symmetric(horizontal: 24), + onTap: _showMemberAdd, + ), + ], + ).padding(bottom: 16), Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -395,3 +440,220 @@ class _ChannelProfileDetailDialogState ); } } + +class _ChannelMemberListWidget extends StatefulWidget { + final SnChannel channel; + const _ChannelMemberListWidget({super.key, required this.channel}); + + @override + State<_ChannelMemberListWidget> createState() => + _ChannelMemberListWidgetState(); +} + +class _ChannelMemberListWidgetState extends State<_ChannelMemberListWidget> { + bool _isBusy = false; + + int? _totalCount; + final List _members = List.empty(growable: true); + + Future _fetchMembers() async { + setState(() => _isBusy = true); + + try { + final ud = context.read(); + final sn = context.read(); + final resp = await sn.client.get( + '/cgi/im/channels/${widget.channel.keyPath}/members', + queryParameters: { + 'take': 10, + 'offset': 0, + }); + final out = List.from( + resp.data['data']?.map((e) => SnChannelMember.fromJson(e)) ?? [], + ); + + _totalCount = resp.data['count']; + _members.addAll(out); + + await ud.listAccount(out.map((ele) => ele.accountId).toSet()); + } catch (err) { + if (!mounted) return; + context.showErrorDialog(err); + } finally { + setState(() => _isBusy = false); + } + } + + bool _isUpdating = false; + + Future _deleteMember(SnChannelMember member) async { + if (_isUpdating) return; + + setState(() => _isUpdating = true); + + try { + final sn = context.read(); + await sn.client.delete( + '/cgi/im/channels/${widget.channel.keyPath}/members/${member.id}', + ); + if (!mounted) return; + _members.clear(); + _fetchMembers(); + } catch (err) { + if (!mounted) return; + context.showErrorDialog(err); + } finally { + setState(() => _isUpdating = false); + } + } + + @override + void initState() { + super.initState(); + _fetchMembers(); + } + + @override + Widget build(BuildContext context) { + final ud = context.read(); + + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const Icon(Symbols.group, size: 24), + const Gap(16), + Text('channelMemberManage') + .tr() + .textStyle(Theme.of(context).textTheme.titleLarge!), + ], + ).padding(horizontal: 20, top: 16, bottom: 12), + Expanded( + child: RefreshIndicator( + onRefresh: () { + _members.clear(); + return _fetchMembers(); + }, + child: InfiniteList( + itemCount: _members.length, + hasReachedMax: + _totalCount != null && _members.length >= _totalCount!, + isLoading: _isBusy, + onFetchData: _fetchMembers, + itemBuilder: (context, index) { + final member = _members[index]; + return ListTile( + contentPadding: const EdgeInsets.only(right: 24, left: 16), + leading: AccountImage( + content: ud.getAccountFromCache(member.accountId)?.avatar, + ), + title: Text( + ud.getAccountFromCache(member.accountId)?.name ?? + 'unknown'.tr(), + ), + subtitle: Text(member.nick ?? 'unknown'.tr()), + trailing: SizedBox( + height: 48, + width: 120, + child: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + IconButton( + onPressed: + _isUpdating ? null : () => _deleteMember(member), + icon: const Icon(Symbols.person_remove), + ), + ], + ), + ), + ); + }, + ), + ), + ), + ], + ); + } +} + +class _NewChannelMemberWidget extends StatefulWidget { + final SnChannel channel; + const _NewChannelMemberWidget({super.key, required this.channel}); + + @override + State<_NewChannelMemberWidget> createState() => + _NewChannelMemberWidgetState(); +} + +class _NewChannelMemberWidgetState extends State<_NewChannelMemberWidget> { + bool _isBusy = false; + + final TextEditingController _relatedController = TextEditingController(); + + Future _performAction() async { + if (_relatedController.text.isEmpty) return; + + setState(() => _isBusy = true); + + try { + final sn = context.read(); + await sn.client.post( + '/cgi/im/channels/${widget.channel.keyPath}/members', + data: { + 'related': _relatedController.text, + }, + ); + if (!mounted) return; + Navigator.pop(context, true); + context.showSnackbar('channelMemberAdded'.tr()); + } catch (err) { + if (!mounted) return; + context.showErrorDialog(err); + } finally { + setState(() => _isBusy = false); + } + } + + @override + void dispose() { + super.dispose(); + _relatedController.dispose(); + } + + @override + Widget build(BuildContext context) { + return StyledWidget(Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + 'channelMemberAdd', + style: Theme.of(context).textTheme.titleLarge, + ).tr(), + const Gap(12), + TextField( + controller: _relatedController, + readOnly: _isBusy, + autocorrect: false, + autofocus: true, + textCapitalization: TextCapitalization.none, + decoration: InputDecoration( + labelText: 'fieldMemberRelatedName'.tr(), + suffix: SizedBox( + height: 24, + child: IconButton( + onPressed: _isBusy ? null : () => _performAction(), + icon: Icon(Symbols.send), + visualDensity: + const VisualDensity(horizontal: -4, vertical: -4), + padding: EdgeInsets.zero, + ), + ), + ), + onTapOutside: (_) => FocusManager.instance.primaryFocus?.unfocus(), + ) + ], + )).padding(all: 24); + } +} diff --git a/lib/screens/friend.dart b/lib/screens/friend.dart index 3883c7e..7a8ac3f 100644 --- a/lib/screens/friend.dart +++ b/lib/screens/friend.dart @@ -133,7 +133,7 @@ class _FriendScreenState extends State { void _showRequests() { showModalBottomSheet( context: context, - builder: (context) => _FriendshipPopupWidget(relations: _requests), + builder: (context) => _FriendshipListWidget(relations: _requests), ).then((value) { if (value != null) { _fetchRequests(); @@ -145,7 +145,7 @@ class _FriendScreenState extends State { void _showBlocks() { showModalBottomSheet( context: context, - builder: (context) => _FriendshipPopupWidget(relations: _blocks), + builder: (context) => _FriendshipListWidget(relations: _blocks), ).then((value) { if (value != null) { _fetchBlocks(); @@ -335,15 +335,15 @@ class _NewFriendWidgetState extends State<_NewFriendWidget> { } } -class _FriendshipPopupWidget extends StatefulWidget { +class _FriendshipListWidget extends StatefulWidget { final List relations; - const _FriendshipPopupWidget({super.key, required this.relations}); + const _FriendshipListWidget({super.key, required this.relations}); @override - State<_FriendshipPopupWidget> createState() => _FriendshipPopupWidgetState(); + State<_FriendshipListWidget> createState() => _FriendshipListWidgetState(); } -class _FriendshipPopupWidgetState extends State<_FriendshipPopupWidget> { +class _FriendshipListWidgetState extends State<_FriendshipListWidget> { bool _isBusy = false; Future _acceptRequest(SnRelationship relation) async { diff --git a/macos/Podfile b/macos/Podfile index c795730..dbccf89 100644 --- a/macos/Podfile +++ b/macos/Podfile @@ -1,4 +1,4 @@ -platform :osx, '10.14' +platform :osx, '11.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/macos/Podfile.lock b/macos/Podfile.lock new file mode 100644 index 0000000..24bb298 --- /dev/null +++ b/macos/Podfile.lock @@ -0,0 +1,307 @@ +PODS: + - connectivity_plus (0.0.1): + - Flutter + - FlutterMacOS + - croppy (0.0.1): + - FlutterMacOS + - cupertino_http (0.0.1): + - FlutterMacOS + - device_info_plus (0.0.1): + - FlutterMacOS + - file_selector_macos (0.0.1): + - FlutterMacOS + - Firebase/Analytics (11.4.0): + - Firebase/Core + - Firebase/Core (11.4.0): + - Firebase/CoreOnly + - FirebaseAnalytics (~> 11.4.0) + - Firebase/CoreOnly (11.4.0): + - FirebaseCore (= 11.4.0) + - Firebase/Messaging (11.4.0): + - Firebase/CoreOnly + - FirebaseMessaging (~> 11.4.0) + - firebase_analytics (11.3.5): + - Firebase/Analytics (= 11.4.0) + - firebase_core + - FlutterMacOS + - firebase_core (3.8.0): + - Firebase/CoreOnly (~> 11.4.0) + - FlutterMacOS + - firebase_messaging (15.1.5): + - Firebase/CoreOnly (~> 11.4.0) + - Firebase/Messaging (~> 11.4.0) + - firebase_core + - FlutterMacOS + - FirebaseAnalytics (11.4.0): + - FirebaseAnalytics/AdIdSupport (= 11.4.0) + - FirebaseCore (~> 11.0) + - FirebaseInstallations (~> 11.0) + - GoogleUtilities/AppDelegateSwizzler (~> 8.0) + - GoogleUtilities/MethodSwizzler (~> 8.0) + - GoogleUtilities/Network (~> 8.0) + - "GoogleUtilities/NSData+zlib (~> 8.0)" + - nanopb (~> 3.30910.0) + - FirebaseAnalytics/AdIdSupport (11.4.0): + - FirebaseCore (~> 11.0) + - FirebaseInstallations (~> 11.0) + - GoogleAppMeasurement (= 11.4.0) + - GoogleUtilities/AppDelegateSwizzler (~> 8.0) + - GoogleUtilities/MethodSwizzler (~> 8.0) + - GoogleUtilities/Network (~> 8.0) + - "GoogleUtilities/NSData+zlib (~> 8.0)" + - nanopb (~> 3.30910.0) + - FirebaseCore (11.4.0): + - FirebaseCoreInternal (~> 11.0) + - GoogleUtilities/Environment (~> 8.0) + - GoogleUtilities/Logger (~> 8.0) + - FirebaseCoreInternal (11.5.0): + - "GoogleUtilities/NSData+zlib (~> 8.0)" + - FirebaseInstallations (11.4.0): + - FirebaseCore (~> 11.0) + - GoogleUtilities/Environment (~> 8.0) + - GoogleUtilities/UserDefaults (~> 8.0) + - PromisesObjC (~> 2.4) + - FirebaseMessaging (11.4.0): + - FirebaseCore (~> 11.0) + - FirebaseInstallations (~> 11.0) + - GoogleDataTransport (~> 10.0) + - GoogleUtilities/AppDelegateSwizzler (~> 8.0) + - GoogleUtilities/Environment (~> 8.0) + - GoogleUtilities/Reachability (~> 8.0) + - GoogleUtilities/UserDefaults (~> 8.0) + - nanopb (~> 3.30910.0) + - flutter_udid (0.0.1): + - FlutterMacOS + - SAMKeychain + - flutter_webrtc (0.12.2): + - FlutterMacOS + - WebRTC-SDK (= 125.6422.05) + - FlutterMacOS (1.0.0) + - GoogleAppMeasurement (11.4.0): + - GoogleAppMeasurement/AdIdSupport (= 11.4.0) + - GoogleUtilities/AppDelegateSwizzler (~> 8.0) + - GoogleUtilities/MethodSwizzler (~> 8.0) + - GoogleUtilities/Network (~> 8.0) + - "GoogleUtilities/NSData+zlib (~> 8.0)" + - nanopb (~> 3.30910.0) + - GoogleAppMeasurement/AdIdSupport (11.4.0): + - GoogleAppMeasurement/WithoutAdIdSupport (= 11.4.0) + - GoogleUtilities/AppDelegateSwizzler (~> 8.0) + - GoogleUtilities/MethodSwizzler (~> 8.0) + - GoogleUtilities/Network (~> 8.0) + - "GoogleUtilities/NSData+zlib (~> 8.0)" + - nanopb (~> 3.30910.0) + - GoogleAppMeasurement/WithoutAdIdSupport (11.4.0): + - GoogleUtilities/AppDelegateSwizzler (~> 8.0) + - GoogleUtilities/MethodSwizzler (~> 8.0) + - GoogleUtilities/Network (~> 8.0) + - "GoogleUtilities/NSData+zlib (~> 8.0)" + - nanopb (~> 3.30910.0) + - GoogleDataTransport (10.1.0): + - nanopb (~> 3.30910.0) + - PromisesObjC (~> 2.4) + - GoogleUtilities/AppDelegateSwizzler (8.0.2): + - GoogleUtilities/Environment + - GoogleUtilities/Logger + - GoogleUtilities/Network + - GoogleUtilities/Privacy + - GoogleUtilities/Environment (8.0.2): + - GoogleUtilities/Privacy + - GoogleUtilities/Logger (8.0.2): + - GoogleUtilities/Environment + - GoogleUtilities/Privacy + - GoogleUtilities/MethodSwizzler (8.0.2): + - GoogleUtilities/Logger + - GoogleUtilities/Privacy + - GoogleUtilities/Network (8.0.2): + - GoogleUtilities/Logger + - "GoogleUtilities/NSData+zlib" + - GoogleUtilities/Privacy + - GoogleUtilities/Reachability + - "GoogleUtilities/NSData+zlib (8.0.2)": + - GoogleUtilities/Privacy + - GoogleUtilities/Privacy (8.0.2) + - GoogleUtilities/Reachability (8.0.2): + - GoogleUtilities/Logger + - GoogleUtilities/Privacy + - GoogleUtilities/UserDefaults (8.0.2): + - GoogleUtilities/Logger + - GoogleUtilities/Privacy + - livekit_client (2.3.1): + - FlutterMacOS + - WebRTC-SDK (= 125.6422.05) + - media_kit_libs_macos_video (1.0.4): + - FlutterMacOS + - media_kit_native_event_loop (1.0.0): + - FlutterMacOS + - media_kit_video (0.0.1): + - FlutterMacOS + - nanopb (3.30910.0): + - nanopb/decode (= 3.30910.0) + - nanopb/encode (= 3.30910.0) + - nanopb/decode (3.30910.0) + - nanopb/encode (3.30910.0) + - package_info_plus (0.0.1): + - FlutterMacOS + - pasteboard (0.0.1): + - FlutterMacOS + - path_provider_foundation (0.0.1): + - Flutter + - FlutterMacOS + - PromisesObjC (2.4.0) + - SAMKeychain (1.5.3) + - screen_brightness_macos (0.1.0): + - FlutterMacOS + - Sentry/HybridSDK (8.40.1) + - sentry_flutter (8.10.1): + - Flutter + - FlutterMacOS + - Sentry/HybridSDK (= 8.40.1) + - shared_preferences_foundation (0.0.1): + - Flutter + - FlutterMacOS + - sqflite_darwin (0.0.4): + - Flutter + - FlutterMacOS + - url_launcher_macos (0.0.1): + - FlutterMacOS + - wakelock_plus (0.0.1): + - FlutterMacOS + - WebRTC-SDK (125.6422.05) + +DEPENDENCIES: + - connectivity_plus (from `Flutter/ephemeral/.symlinks/plugins/connectivity_plus/darwin`) + - croppy (from `Flutter/ephemeral/.symlinks/plugins/croppy/macos`) + - cupertino_http (from `Flutter/ephemeral/.symlinks/plugins/cupertino_http/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`) + - firebase_analytics (from `Flutter/ephemeral/.symlinks/plugins/firebase_analytics/macos`) + - firebase_core (from `Flutter/ephemeral/.symlinks/plugins/firebase_core/macos`) + - firebase_messaging (from `Flutter/ephemeral/.symlinks/plugins/firebase_messaging/macos`) + - flutter_udid (from `Flutter/ephemeral/.symlinks/plugins/flutter_udid/macos`) + - flutter_webrtc (from `Flutter/ephemeral/.symlinks/plugins/flutter_webrtc/macos`) + - FlutterMacOS (from `Flutter/ephemeral`) + - livekit_client (from `Flutter/ephemeral/.symlinks/plugins/livekit_client/macos`) + - media_kit_libs_macos_video (from `Flutter/ephemeral/.symlinks/plugins/media_kit_libs_macos_video/macos`) + - media_kit_native_event_loop (from `Flutter/ephemeral/.symlinks/plugins/media_kit_native_event_loop/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`) + - pasteboard (from `Flutter/ephemeral/.symlinks/plugins/pasteboard/macos`) + - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`) + - screen_brightness_macos (from `Flutter/ephemeral/.symlinks/plugins/screen_brightness_macos/macos`) + - sentry_flutter (from `Flutter/ephemeral/.symlinks/plugins/sentry_flutter/macos`) + - shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`) + - sqflite_darwin (from `Flutter/ephemeral/.symlinks/plugins/sqflite_darwin/darwin`) + - url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`) + - wakelock_plus (from `Flutter/ephemeral/.symlinks/plugins/wakelock_plus/macos`) + +SPEC REPOS: + trunk: + - Firebase + - FirebaseAnalytics + - FirebaseCore + - FirebaseCoreInternal + - FirebaseInstallations + - FirebaseMessaging + - GoogleAppMeasurement + - GoogleDataTransport + - GoogleUtilities + - nanopb + - PromisesObjC + - SAMKeychain + - Sentry + - WebRTC-SDK + +EXTERNAL SOURCES: + connectivity_plus: + :path: Flutter/ephemeral/.symlinks/plugins/connectivity_plus/darwin + croppy: + :path: Flutter/ephemeral/.symlinks/plugins/croppy/macos + cupertino_http: + :path: Flutter/ephemeral/.symlinks/plugins/cupertino_http/macos + device_info_plus: + :path: Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos + file_selector_macos: + :path: Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos + firebase_analytics: + :path: Flutter/ephemeral/.symlinks/plugins/firebase_analytics/macos + firebase_core: + :path: Flutter/ephemeral/.symlinks/plugins/firebase_core/macos + firebase_messaging: + :path: Flutter/ephemeral/.symlinks/plugins/firebase_messaging/macos + flutter_udid: + :path: Flutter/ephemeral/.symlinks/plugins/flutter_udid/macos + flutter_webrtc: + :path: Flutter/ephemeral/.symlinks/plugins/flutter_webrtc/macos + FlutterMacOS: + :path: Flutter/ephemeral + livekit_client: + :path: Flutter/ephemeral/.symlinks/plugins/livekit_client/macos + media_kit_libs_macos_video: + :path: Flutter/ephemeral/.symlinks/plugins/media_kit_libs_macos_video/macos + media_kit_native_event_loop: + :path: Flutter/ephemeral/.symlinks/plugins/media_kit_native_event_loop/macos + media_kit_video: + :path: Flutter/ephemeral/.symlinks/plugins/media_kit_video/macos + package_info_plus: + :path: Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos + pasteboard: + :path: Flutter/ephemeral/.symlinks/plugins/pasteboard/macos + path_provider_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin + screen_brightness_macos: + :path: Flutter/ephemeral/.symlinks/plugins/screen_brightness_macos/macos + sentry_flutter: + :path: Flutter/ephemeral/.symlinks/plugins/sentry_flutter/macos + shared_preferences_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin + sqflite_darwin: + :path: Flutter/ephemeral/.symlinks/plugins/sqflite_darwin/darwin + url_launcher_macos: + :path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos + wakelock_plus: + :path: Flutter/ephemeral/.symlinks/plugins/wakelock_plus/macos + +SPEC CHECKSUMS: + connectivity_plus: 4c41c08fc6d7c91f63bc7aec70ffe3730b04f563 + croppy: 25a638bd7d05411d8c697f481568f261037694fc + cupertino_http: 1d506209e339211efa0764caa7b2de4bc55b6818 + device_info_plus: 1b14eed9bf95428983aed283a8d51cce3d8c4215 + file_selector_macos: cc3858c981fe6889f364731200d6232dac1d812d + Firebase: cf1b19f21410b029b6786a54e9764a0cacad3c99 + firebase_analytics: 0b7c895f240587bbc77ed28144c1a599dd4523ff + firebase_core: d95c4a2225d7b6ed46bc31fb2a6f421fc7c8285b + firebase_messaging: 821b4f05a071d54d6ed826923a48c9101b93d443 + FirebaseAnalytics: 3feef9ae8733c567866342a1000691baaa7cad49 + FirebaseCore: e0510f1523bc0eb21653cac00792e1e2bd6f1771 + FirebaseCoreInternal: f47dd28ae7782e6a4738aad3106071a8fe0af604 + FirebaseInstallations: 6ef4a1c7eb2a61ee1f74727d7f6ce2e72acf1414 + FirebaseMessaging: f8a160d99c2c2e5babbbcc90c4a3e15db036aee2 + flutter_udid: 6b2b89780c3dfeecf0047bdf93f622d6416b1c07 + flutter_webrtc: 646bc8ab7ba7e45aae7279a371177e414cd5a326 + FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 + GoogleAppMeasurement: 987769c4ca6b968f2479fbcc9fe3ce34af454b8e + GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7 + GoogleUtilities: 26a3abef001b6533cf678d3eb38fd3f614b7872d + livekit_client: 6ff0eb9b53ca4fbe0deb7e4b875f4ae9167702d2 + media_kit_libs_macos_video: b3e2bbec2eef97c285f2b1baa7963c67c753fb82 + media_kit_native_event_loop: 81fd5b45192b72f8b5b69eaf5b540f45777eb8d5 + media_kit_video: c75b07f14d59706c775778e4dd47dd027de8d1e5 + nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 + package_info_plus: 12f1c5c2cfe8727ca46cbd0b26677728972d9a5b + pasteboard: 9b69dba6fedbb04866be632205d532fe2f6b1d99 + path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 + PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 + SAMKeychain: 483e1c9f32984d50ca961e26818a534283b4cd5c + screen_brightness_macos: 2d6d3af2165592d9a55ffcd95b7550970e41ebda + Sentry: e9215d7b17f7902692b4f8700e061e4f853e3521 + sentry_flutter: 927eed60d66951d1b0f1db37fe94ff5cb7c80231 + shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 + sqflite_darwin: 5a7236e3b501866c1c9befc6771dfd73ffb8702d + url_launcher_macos: c82c93949963e55b228a30115bd219499a6fe404 + wakelock_plus: 4783562c9a43d209c458cb9b30692134af456269 + WebRTC-SDK: 1990a1a595bd0b59c17485ce13ff17f575732c12 + +PODFILE CHECKSUM: c2e95c8c0fe03c5c57e438583cae4cc732296009 + +COCOAPODS: 1.16.2 diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index 076b755..5815a69 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -28,6 +28,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 7BEDD71A80BBA169684ACB81 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B55B651CA7BF500777D4B1B /* Pods_RunnerTests.framework */; }; + EC0463C9851FCEB24D5D595B /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E729DB63C8B32609599AE830 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -61,6 +63,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 1E03E25E9DE71857FFBD29C2 /* 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 = ""; }; + 1EDAEBC97BEEAFE2C6DB7378 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 2B55B651CA7BF500777D4B1B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -77,9 +82,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 450EB9DBD4B8BDF042B4AD98 /* 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 = ""; }; + 5E588FEF31814EFAB089FF75 /* 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 = ""; }; + 7A55AFFCE236DD307D3A0F24 /* 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 = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; B39E2ED81C91DEB7E23A8321 /* GoogleService-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "Runner/GoogleService-Info.plist"; sourceTree = ""; }; + E729DB63C8B32609599AE830 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F8242928618FC0DCAE7048D2 /* 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 = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -87,6 +97,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 7BEDD71A80BBA169684ACB81 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -94,6 +105,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + EC0463C9851FCEB24D5D595B /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -128,6 +140,7 @@ 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, B39E2ED81C91DEB7E23A8321 /* GoogleService-Info.plist */, + F0482EAFD414E133BFFF5285 /* Pods */, ); sourceTree = ""; }; @@ -178,10 +191,26 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( + E729DB63C8B32609599AE830 /* Pods_Runner.framework */, + 2B55B651CA7BF500777D4B1B /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; + F0482EAFD414E133BFFF5285 /* Pods */ = { + isa = PBXGroup; + children = ( + 1EDAEBC97BEEAFE2C6DB7378 /* Pods-Runner.debug.xcconfig */, + 7A55AFFCE236DD307D3A0F24 /* Pods-Runner.release.xcconfig */, + 5E588FEF31814EFAB089FF75 /* Pods-Runner.profile.xcconfig */, + 1E03E25E9DE71857FFBD29C2 /* Pods-RunnerTests.debug.xcconfig */, + 450EB9DBD4B8BDF042B4AD98 /* Pods-RunnerTests.release.xcconfig */, + F8242928618FC0DCAE7048D2 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -189,6 +218,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + F7F1CDAFD26257FA68B331E4 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -207,12 +237,15 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + DFE34D71304FB71FCDE7AA8E /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, EF14D4B7B68679D2F4942581 /* FlutterFire: "flutterfire upload-crashlytics-symbols" */, + EADDB3C7145F18E2F1CE8E5B /* [CP] Embed Pods Frameworks */, + CA5645E740F67EC9BB6B7366 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -334,6 +367,62 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; + CA5645E740F67EC9BB6B7366 /* [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; + }; + DFE34D71304FB71FCDE7AA8E /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + EADDB3C7145F18E2F1CE8E5B /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; EF14D4B7B68679D2F4942581 /* FlutterFire: "flutterfire upload-crashlytics-symbols" */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -352,6 +441,28 @@ shellPath = /bin/sh; shellScript = "\n#!/bin/bash\nPATH=${PATH}:$FLUTTER_ROOT/bin:$HOME/.pub-cache/bin\nflutterfire upload-crashlytics-symbols --upload-symbols-script-path=$PODS_ROOT/FirebaseCrashlytics/upload-symbols --platform=macos --apple-project-path=${SRCROOT} --env-platform-name=${PLATFORM_NAME} --env-configuration=${CONFIGURATION} --env-project-dir=${PROJECT_DIR} --env-built-products-dir=${BUILT_PRODUCTS_DIR} --env-dwarf-dsym-folder-path=${DWARF_DSYM_FOLDER_PATH} --env-dwarf-dsym-file-name=${DWARF_DSYM_FILE_NAME} --env-infoplist-path=${INFOPLIST_PATH} --default-config=default\n"; }; + F7F1CDAFD26257FA68B331E4 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -403,6 +514,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 1E03E25E9DE71857FFBD29C2 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -417,6 +529,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 450EB9DBD4B8BDF042B4AD98 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -431,6 +544,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = F8242928618FC0DCAE7048D2 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/macos/Runner.xcworkspace/contents.xcworkspacedata b/macos/Runner.xcworkspace/contents.xcworkspacedata index 1d526a1..21a3cc1 100644 --- a/macos/Runner.xcworkspace/contents.xcworkspacedata +++ b/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/pubspec.lock b/pubspec.lock index 069a842..e539341 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -667,13 +667,13 @@ packages: source: sdk version: "0.0.0" flutter_webrtc: - dependency: transitive + dependency: "direct main" description: name: flutter_webrtc - sha256: "4838217405c42cce422698eacc9c2e17089b9c05322be899c0a725107dcddbdc" + sha256: fcaee6f28cc1221e804fcba16fbee6f20b0848af20fe11174a0f97c3b9833381 url: "https://pub.dev" source: hosted - version: "0.12.3" + version: "0.12.2" freezed: dependency: "direct dev" description: diff --git a/pubspec.yaml b/pubspec.yaml index 16a116a..1476d4f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -89,6 +89,7 @@ dependencies: sentry_flutter: ^8.10.1 synchronized: ^3.3.0+3 livekit_client: ^2.3.0 + flutter_webrtc: 0.12.2 # TODO: Remove this once livekit solved its dependency issue, https://github.com/livekit/client-sdk-flutter/issues/648 wakelock_plus: ^1.2.8 permission_handler: ^11.3.1 flutter_staggered_grid_view: ^0.7.0