From 11a3d8f39befc5e4eaf6837e6018f421ec6b28e6 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Sun, 14 Apr 2024 23:39:18 +0800 Subject: [PATCH] :sparkles: Comment create, delete and update --- lib/i18n/app_en.arb | 1 + lib/i18n/app_zh.arb | 1 + lib/router.dart | 12 +- lib/screens/posts/comment_editor.dart | 170 ++++++++++++++++++ lib/widgets/posts/comment_list.dart | 13 +- lib/widgets/posts/content/attachment.dart | 1 + lib/widgets/posts/item.dart | 7 +- macos/Podfile.lock | 72 ++++++++ macos/Runner.xcodeproj/project.pbxproj | 96 ++++++++++ .../contents.xcworkspacedata | 3 + macos/Runner/Configs/AppInfo.xcconfig | 6 +- macos/Runner/DebugProfile.entitlements | 2 + macos/Runner/Release.entitlements | 2 + 13 files changed, 375 insertions(+), 11 deletions(-) create mode 100644 lib/screens/posts/comment_editor.dart create mode 100644 macos/Podfile.lock diff --git a/lib/i18n/app_en.arb b/lib/i18n/app_en.arb index 6ba9f98..9a2cca5 100644 --- a/lib/i18n/app_en.arb +++ b/lib/i18n/app_en.arb @@ -20,6 +20,7 @@ "attachmentAdd": "Add new attachment", "pickPhoto": "Gallery photo", "newMoment": "Record a moment", + "newComment": "Leave a comment", "postIdentityNotify": "You will create this post as", "postContentPlaceholder": "What's happened?!", "postDeleteConfirm": "Are you sure you want to delete this post? This operation cannot be revert!" diff --git a/lib/i18n/app_zh.arb b/lib/i18n/app_zh.arb index b69e4ae..3935588 100644 --- a/lib/i18n/app_zh.arb +++ b/lib/i18n/app_zh.arb @@ -20,6 +20,7 @@ "attachmentAdd": "附加新附件", "pickPhoto": "相册照片", "newMoment": "记录时刻", + "newComment": "留下评论", "postIdentityNotify": "你将会以该身份发表本帖子", "postContentPlaceholder": "发生什么事了?!", "postDeleteConfirm": "你确定要删除这篇帖子吗?这意味着这个帖子将永远被我们丢弃在硬盘海中!该操作不可被反转!" diff --git a/lib/router.dart b/lib/router.dart index ae013fd..93e268d 100644 --- a/lib/router.dart +++ b/lib/router.dart @@ -2,6 +2,7 @@ import 'package:go_router/go_router.dart'; import 'package:solian/models/post.dart'; import 'package:solian/screens/account.dart'; import 'package:solian/screens/explore.dart'; +import 'package:solian/screens/posts/comment_editor.dart'; import 'package:solian/screens/posts/moment_editor.dart'; import 'package:solian/screens/posts/screen.dart'; @@ -18,11 +19,20 @@ final router = GoRouter( builder: (context, state) => const AccountScreen(), ), GoRoute( - path: '/posts/moments/do/editor', + path: '/posts/publish/moments', name: 'posts.moments.editor', builder: (context, state) => MomentEditorScreen(editing: state.extra as Post?), ), + GoRoute( + path: '/posts/publish/comments', + name: 'posts.comments.editor', + builder: (context, state) { + final args = state.extra as CommentPostArguments; + return CommentEditorScreen( + editing: args.editing, related: args.related); + }, + ), GoRoute( path: '/posts/:dataset/:alias', name: 'posts.screen', diff --git a/lib/screens/posts/comment_editor.dart b/lib/screens/posts/comment_editor.dart new file mode 100644 index 0000000..9c40e5f --- /dev/null +++ b/lib/screens/posts/comment_editor.dart @@ -0,0 +1,170 @@ +import 'dart:convert'; + +import 'package:flutter/material.dart'; +import 'package:http/http.dart'; +import 'package:provider/provider.dart'; +import 'package:solian/models/post.dart'; +import 'package:solian/providers/auth.dart'; +import 'package:solian/router.dart'; +import 'package:solian/utils/service_url.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:solian/widgets/indent_wrapper.dart'; +import 'package:solian/widgets/posts/attachment_editor.dart'; + +class CommentPostArguments { + final Post related; + final Post? editing; + + CommentPostArguments({required this.related, this.editing}); +} + +class CommentEditorScreen extends StatefulWidget { + final Post related; + final Post? editing; + + const CommentEditorScreen({super.key, required this.related, this.editing}); + + @override + State createState() => _CommentEditorScreenState(); +} + +class _CommentEditorScreenState extends State { + final _textController = TextEditingController(); + + String? _alias; + bool _isSubmitting = false; + + List _attachments = List.empty(growable: true); + + void viewAttachments(BuildContext context) { + showModalBottomSheet( + context: context, + builder: (context) => AttachmentEditor( + current: _attachments, + onUpdate: (value) => _attachments = value, + ), + ); + } + + Future applyPost(BuildContext context) async { + final auth = context.read(); + if (!await auth.isAuthorized()) return; + + final relatedDataset = '${widget.related.modelType}s'; + final uri = widget.editing == null + ? getRequestUri('interactive', '/api/p/$relatedDataset/${widget.related.alias}/comments') + : getRequestUri('interactive', '/api/p/comments/${widget.editing!.id}'); + + final req = Request(widget.editing == null ? "POST" : "PUT", uri); + req.headers['Content-Type'] = 'application/json'; + req.body = jsonEncode({ + 'alias': _alias, + 'content': _textController.value.text, + 'attachments': _attachments, + }); + + setState(() => _isSubmitting = true); + var res = await Response.fromStream(await auth.client!.send(req)); + if (res.statusCode != 200) { + var message = utf8.decode(res.bodyBytes); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text("Something went wrong... $message")), + ); + } else { + if (router.canPop()) { + router.pop(true); + } + } + setState(() => _isSubmitting = false); + } + + @override + void initState() { + if (widget.editing != null) { + _alias = widget.editing!.alias; + _textController.text = widget.editing!.content; + _attachments = widget.editing!.attachments ?? List.empty(growable: true); + } + + super.initState(); + } + + @override + Widget build(BuildContext context) { + final auth = context.read(); + + return IndentWrapper( + hideDrawer: true, + title: AppLocalizations.of(context)!.newComment, + appBarActions: [ + TextButton( + onPressed: !_isSubmitting ? () => applyPost(context) : null, + child: Text(AppLocalizations.of(context)!.postVerb.toUpperCase()), + ), + ], + child: Center( + child: Container( + constraints: const BoxConstraints(maxWidth: 640), + child: Column( + children: [ + _isSubmitting ? const LinearProgressIndicator() : Container(), + FutureBuilder( + future: auth.getProfiles(), + builder: (context, snapshot) { + if (snapshot.hasData) { + var userinfo = snapshot.data; + return ListTile( + title: Text(userinfo["nick"]), + subtitle: Text( + AppLocalizations.of(context)!.postIdentityNotify, + ), + leading: CircleAvatar( + backgroundImage: NetworkImage(userinfo["picture"]), + ), + ); + } else { + return Container(); + } + }, + ), + const Divider(thickness: 0.3), + Expanded( + child: Container( + padding: + const EdgeInsets.symmetric(horizontal: 16, vertical: 8), + child: TextField( + maxLines: null, + autofocus: true, + autocorrect: true, + keyboardType: TextInputType.multiline, + controller: _textController, + decoration: InputDecoration.collapsed( + hintText: + AppLocalizations.of(context)!.postContentPlaceholder, + ), + ), + ), + ), + Container( + decoration: const BoxDecoration( + border: Border( + top: BorderSide(width: 0.3, color: Color(0xffdedede)), + ), + ), + child: Row( + children: [ + TextButton( + style: TextButton.styleFrom(shape: const CircleBorder()), + child: const Icon(Icons.camera_alt), + onPressed: () => viewAttachments(context), + ) + ], + ), + ), + ], + ), + ), + ), + ); + } +} diff --git a/lib/widgets/posts/comment_list.dart b/lib/widgets/posts/comment_list.dart index e4f773a..c31d11a 100644 --- a/lib/widgets/posts/comment_list.dart +++ b/lib/widgets/posts/comment_list.dart @@ -8,6 +8,7 @@ import 'package:solian/models/post.dart'; import 'package:http/http.dart' as http; import 'package:solian/providers/auth.dart'; import 'package:solian/router.dart'; +import 'package:solian/screens/posts/comment_editor.dart'; import 'package:solian/utils/service_url.dart'; import 'package:solian/widgets/posts/item.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; @@ -117,14 +118,16 @@ class CommentListHeader extends StatelessWidget { future: auth.isAuthorized(), builder: (context, snapshot) { if (snapshot.hasData && snapshot.data == true) { - return TextButton.icon( - icon: const Icon(Icons.add_comment_outlined), - label: const Text("LEAVE COMMENT"), + return TextButton( onPressed: () async { - final did = - await router.push("posts.comments.new", extra: related); + final did = await router.pushNamed( + "posts.comments.editor", + extra: CommentPostArguments(related: related), + ); if (did == true) paging.refresh(); }, + style: TextButton.styleFrom(shape: const CircleBorder()), + child: const Icon(Icons.add_comment_outlined), ); } else { return Container(); diff --git a/lib/widgets/posts/content/attachment.dart b/lib/widgets/posts/content/attachment.dart index e7234f9..4e8c5b6 100644 --- a/lib/widgets/posts/content/attachment.dart +++ b/lib/widgets/posts/content/attachment.dart @@ -130,6 +130,7 @@ class AttachmentList extends StatelessWidget { options: CarouselOptions( aspectRatio: 16 / 9, viewportFraction: 1, + showIndicator: false, ), items: items.map((item) { renderProgress++; diff --git a/lib/widgets/posts/item.dart b/lib/widgets/posts/item.dart index cedb2cc..d77b111 100644 --- a/lib/widgets/posts/item.dart +++ b/lib/widgets/posts/item.dart @@ -145,10 +145,13 @@ class _PostItemState extends State { child: Divider(thickness: 0.3), ), Padding( - padding: const EdgeInsets.symmetric(horizontal: 16), + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), child: renderContent(), ), - renderAttachments() + Padding( + padding: const EdgeInsets.symmetric(horizontal: 8), + child: renderAttachments(), + ) ], ), onLongPress: () { diff --git a/macos/Podfile.lock b/macos/Podfile.lock new file mode 100644 index 0000000..de2d4bf --- /dev/null +++ b/macos/Podfile.lock @@ -0,0 +1,72 @@ +PODS: + - file_selector_macos (0.0.1): + - FlutterMacOS + - flutter_secure_storage_macos (6.1.1): + - FlutterMacOS + - FlutterMacOS (1.0.0) + - media_kit_video (0.0.1): + - FlutterMacOS + - package_info_plus (0.0.1): + - FlutterMacOS + - path_provider_foundation (0.0.1): + - Flutter + - FlutterMacOS + - screen_brightness_macos (0.1.0): + - FlutterMacOS + - url_launcher_macos (0.0.1): + - FlutterMacOS + - video_player_avfoundation (0.0.1): + - Flutter + - FlutterMacOS + - wakelock_plus (0.0.1): + - FlutterMacOS + +DEPENDENCIES: + - file_selector_macos (from `Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos`) + - flutter_secure_storage_macos (from `Flutter/ephemeral/.symlinks/plugins/flutter_secure_storage_macos/macos`) + - FlutterMacOS (from `Flutter/ephemeral`) + - media_kit_video (from `Flutter/ephemeral/.symlinks/plugins/media_kit_video/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`) + - screen_brightness_macos (from `Flutter/ephemeral/.symlinks/plugins/screen_brightness_macos/macos`) + - url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`) + - video_player_avfoundation (from `Flutter/ephemeral/.symlinks/plugins/video_player_avfoundation/darwin`) + - wakelock_plus (from `Flutter/ephemeral/.symlinks/plugins/wakelock_plus/macos`) + +EXTERNAL SOURCES: + file_selector_macos: + :path: Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos + flutter_secure_storage_macos: + :path: Flutter/ephemeral/.symlinks/plugins/flutter_secure_storage_macos/macos + FlutterMacOS: + :path: Flutter/ephemeral + media_kit_video: + :path: Flutter/ephemeral/.symlinks/plugins/media_kit_video/macos + package_info_plus: + :path: Flutter/ephemeral/.symlinks/plugins/package_info_plus/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 + url_launcher_macos: + :path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos + video_player_avfoundation: + :path: Flutter/ephemeral/.symlinks/plugins/video_player_avfoundation/darwin + wakelock_plus: + :path: Flutter/ephemeral/.symlinks/plugins/wakelock_plus/macos + +SPEC CHECKSUMS: + file_selector_macos: 468fb6b81fac7c0e88d71317f3eec34c3b008ff9 + flutter_secure_storage_macos: d56e2d218c1130b262bef8b4a7d64f88d7f9c9ea + FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 + media_kit_video: f5bdcbfaef003c02251e50d44bb741aa96fb8a1e + package_info_plus: fa739dd842b393193c5ca93c26798dff6e3d0e0c + path_provider_foundation: 3784922295ac71e43754bd15e0653ccfd36a147c + screen_brightness_macos: 2d6d3af2165592d9a55ffcd95b7550970e41ebda + url_launcher_macos: d2691c7dd33ed713bf3544850a623080ec693d95 + video_player_avfoundation: 2b4384f3b157206b5e150a0083cdc0c905d260d3 + wakelock_plus: 4783562c9a43d209c458cb9b30692134af456269 + +PODFILE CHECKSUM: 236401fc2c932af29a9fcf0e97baeeb2d750d367 + +COCOAPODS: 1.15.1 diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index f40e91c..cf2ca77 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -27,6 +27,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 */; }; + 65A7FB93BE85BFCCF5EFC1BD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0C61CBC9EDA1532B3C3CCC15 /* Pods_Runner.framework */; }; + E5390820D340813CBF54B537 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 51DA1C2E954BDFC0E783CC18 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -60,6 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0C61CBC9EDA1532B3C3CCC15 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1B09C6EB2D1B711F9DE8626F /* 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 = ""; }; + 258AA92A278E4B8720E88E95 /* 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 = ""; }; 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 = ""; }; @@ -76,8 +81,13 @@ 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 = ""; }; + 51DA1C2E954BDFC0E783CC18 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 702C55928A0300F307FFD43C /* 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 = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 8CBB406EC5E794824CF74930 /* 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 = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + D0107FE226C23341B494B0A7 /* 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 = ""; }; + D976B52D313D36593968C0CF /* 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 = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -85,6 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + E5390820D340813CBF54B537 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -92,6 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 65A7FB93BE85BFCCF5EFC1BD /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -125,6 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, + 3B672BC0F1B614DB9B4530F1 /* Pods */, ); sourceTree = ""; }; @@ -172,9 +185,25 @@ path = Runner; sourceTree = ""; }; + 3B672BC0F1B614DB9B4530F1 /* Pods */ = { + isa = PBXGroup; + children = ( + D976B52D313D36593968C0CF /* Pods-Runner.debug.xcconfig */, + D0107FE226C23341B494B0A7 /* Pods-Runner.release.xcconfig */, + 702C55928A0300F307FFD43C /* Pods-Runner.profile.xcconfig */, + 258AA92A278E4B8720E88E95 /* Pods-RunnerTests.debug.xcconfig */, + 1B09C6EB2D1B711F9DE8626F /* Pods-RunnerTests.release.xcconfig */, + 8CBB406EC5E794824CF74930 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( + 0C61CBC9EDA1532B3C3CCC15 /* Pods_Runner.framework */, + 51DA1C2E954BDFC0E783CC18 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -186,6 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + 47097AF724A8B3B3493A826A /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -204,11 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + A3039079C7A89C345AFAE166 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, + 2498E826A9AAE6F5E735D1B8 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -291,6 +323,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 2498E826A9AAE6F5E735D1B8 /* [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; + }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -329,6 +378,50 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; + 47097AF724A8B3B3493A826A /* [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; + }; + A3039079C7A89C345AFAE166 /* [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; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -380,6 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 258AA92A278E4B8720E88E95 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -394,6 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 1B09C6EB2D1B711F9DE8626F /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -408,6 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 8CBB406EC5E794824CF74930 /* 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/macos/Runner/Configs/AppInfo.xcconfig b/macos/Runner/Configs/AppInfo.xcconfig index 89ad048..71fd7b2 100644 --- a/macos/Runner/Configs/AppInfo.xcconfig +++ b/macos/Runner/Configs/AppInfo.xcconfig @@ -5,10 +5,10 @@ // 'flutter create' template. // The application's name. By default this is also the title of the Flutter window. -PRODUCT_NAME = solian +PRODUCT_NAME = Solian // The application's bundle identifier -PRODUCT_BUNDLE_IDENTIFIER = com.example.solian +PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2024 Solsynth. All rights reserved. diff --git a/macos/Runner/DebugProfile.entitlements b/macos/Runner/DebugProfile.entitlements index dddb8a3..c946719 100644 --- a/macos/Runner/DebugProfile.entitlements +++ b/macos/Runner/DebugProfile.entitlements @@ -8,5 +8,7 @@ com.apple.security.network.server + com.apple.security.network.client + diff --git a/macos/Runner/Release.entitlements b/macos/Runner/Release.entitlements index 852fa1a..48271ac 100644 --- a/macos/Runner/Release.entitlements +++ b/macos/Runner/Release.entitlements @@ -4,5 +4,7 @@ com.apple.security.app-sandbox + com.apple.security.network.client +