diff --git a/.vscode/launch.json b/.vscode/launch.json index 70febd0..5f383eb 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,7 +1,4 @@ { - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { @@ -10,8 +7,27 @@ "request": "launch", "type": "dart", "toolArgs": [ - "--dart-define=APPVER=$(cat pubspec.yaml | grep version: | cut -d' ' -f2 | cut -d+ -f1) --release" + "--dart-define=APPVER=$(cat pubspec.yaml | grep version: | cut -d' ' -f2 | cut -d+ -f1)" ] + }, + { + "name": "filcnaplo release", + "cwd": "filcnaplo release", + "request": "launch", + "type": "dart", + "flutterMode": "release", + "program": "lib/main.dart", + "toolArgs": [ + "--dart-define=APPVER=$(cat pubspec.yaml | grep version: | cut -d' ' -f2 | cut -d+ -f1)" + ] + }, + { + "name": "Flutter", + "program": "lib/main.dart", + "cwd": "filcnaplo", + "request": "launch", + "type": "dart", + "flutterMode": "release" } ] } \ No newline at end of file diff --git a/filcnaplo/ios/Flutter/Generated 2.xcconfig b/filcnaplo/ios/Flutter/Generated 2.xcconfig new file mode 100644 index 0000000..f54bc25 --- /dev/null +++ b/filcnaplo/ios/Flutter/Generated 2.xcconfig @@ -0,0 +1,15 @@ +// This is a generated file; do not edit or check into version control. +FLUTTER_ROOT=/Users/kima/development/flutter +FLUTTER_APPLICATION_PATH=/Users/kima/Documents/refilc/app/naplo/filcnaplo +COCOAPODS_PARALLEL_CODE_SIGN=true +FLUTTER_TARGET=/Users/kima/Documents/refilc/app/naplo/filcnaplo/lib/main.dart +FLUTTER_BUILD_DIR=build +FLUTTER_BUILD_NAME=3.5.1 +FLUTTER_BUILD_NUMBER=197 +EXCLUDED_ARCHS[sdk=iphonesimulator*]=i386 +EXCLUDED_ARCHS[sdk=iphoneos*]=armv7 +DART_DEFINES=RkxVVFRFUl9XRUJfQVVUT19ERVRFQ1Q9dHJ1ZQ==,RkxVVFRFUl9XRUJfQ0FOVkFTS0lUX1VSTD1odHRwczovL3d3dy5nc3RhdGljLmNvbS9mbHV0dGVyLWNhbnZhc2tpdC9iNGZiMTEyMTRkZDJkZGE2Y2UwMTJkZDk4ZWE0OThlOWU4YjkxMjYyLw== +DART_OBFUSCATION=false +TRACK_WIDGET_CREATION=true +TREE_SHAKE_ICONS=false +PACKAGE_CONFIG=/Users/kima/Documents/refilc/app/naplo/filcnaplo/.dart_tool/package_config.json diff --git a/filcnaplo/ios/Podfile.lock b/filcnaplo/ios/Podfile.lock index 28ab956..296d39d 100644 --- a/filcnaplo/ios/Podfile.lock +++ b/filcnaplo/ios/Podfile.lock @@ -77,6 +77,8 @@ PODS: - Mantle/extobjc (2.2.0) - open_file (0.0.1): - Flutter + - package_info_plus (0.4.5): + - Flutter - path_provider_foundation (0.0.1): - Flutter - FlutterMacOS @@ -120,6 +122,7 @@ DEPENDENCIES: - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) - live_activities (from `.symlinks/plugins/live_activities/ios`) - open_file (from `.symlinks/plugins/open_file/ios`) + - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) - permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`) - quick_actions_ios (from `.symlinks/plugins/quick_actions_ios/ios`) @@ -171,6 +174,8 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/live_activities/ios" open_file: :path: ".symlinks/plugins/open_file/ios" + package_info_plus: + :path: ".symlinks/plugins/package_info_plus/ios" path_provider_foundation: :path: ".symlinks/plugins/path_provider_foundation/darwin" permission_handler_apple: @@ -213,6 +218,7 @@ SPEC CHECKSUMS: live_activities: 9ff56a06a2d43ecd68f56deeed13b18a8304789c Mantle: c5aa8794a29a022dfbbfc9799af95f477a69b62d open_file: 02eb5cb6b21264bd3a696876f5afbfb7ca4f4b7d + package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e path_provider_foundation: eaf5b3e458fc0e5fbb9940fb09980e853fe058b8 permission_handler_apple: 44366e37eaf29454a1e7b1b7d736c2cceaeb17ce quick_actions_ios: 9e80dcfadfbc5d47d9cf8f47bcf428b11cf383d4 diff --git a/filcnaplo/ios/Runner.xcodeproj/project.pbxproj b/filcnaplo/ios/Runner.xcodeproj/project.pbxproj index b4bcb5a..08dfd60 100644 --- a/filcnaplo/ios/Runner.xcodeproj/project.pbxproj +++ b/filcnaplo/ios/Runner.xcodeproj/project.pbxproj @@ -478,7 +478,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CURRENT_PROJECT_VERSION = 195; - DEVELOPMENT_TEAM = JWGEQSC9U7; + DEVELOPMENT_TEAM = 48XS7JAZB7; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = reFilc; @@ -488,7 +488,7 @@ "@executable_path/Frameworks", ); MARKETING_VERSION = 3.6.0; - PRODUCT_BUNDLE_IDENTIFIER = hu.refilc.naplo; + PRODUCT_BUNDLE_IDENTIFIER = com.refilc.naplo; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -510,7 +510,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = JWGEQSC9U7; + DEVELOPMENT_TEAM = 48XS7JAZB7; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = livecard/Info.plist; @@ -526,7 +526,7 @@ MARKETING_VERSION = 1.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = hu.refilc.naplo.livecardpro; + PRODUCT_BUNDLE_IDENTIFIER = com.refilc.naplo.livecardpro; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SKIP_INSTALL = YES; @@ -552,7 +552,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = JWGEQSC9U7; + DEVELOPMENT_TEAM = 48XS7JAZB7; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = livecard/Info.plist; @@ -567,7 +567,7 @@ ); MARKETING_VERSION = 1.0; MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = hu.refilc.naplo.livecardpro; + PRODUCT_BUNDLE_IDENTIFIER = com.refilc.naplo.livecardpro; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SKIP_INSTALL = YES; @@ -592,7 +592,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = JWGEQSC9U7; + DEVELOPMENT_TEAM = 48XS7JAZB7; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = livecard/Info.plist; @@ -607,7 +607,7 @@ ); MARKETING_VERSION = 1.0; MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = hu.refilc.naplo.livecardpro; + PRODUCT_BUNDLE_IDENTIFIER = com.refilc.naplo.livecardpro; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SKIP_INSTALL = YES; @@ -736,7 +736,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CURRENT_PROJECT_VERSION = 195; - DEVELOPMENT_TEAM = JWGEQSC9U7; + DEVELOPMENT_TEAM = 48XS7JAZB7; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = reFilc; @@ -746,7 +746,7 @@ "@executable_path/Frameworks", ); MARKETING_VERSION = 3.6.0; - PRODUCT_BUNDLE_IDENTIFIER = hu.refilc.naplo; + PRODUCT_BUNDLE_IDENTIFIER = com.refilc.naplo; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -764,7 +764,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CURRENT_PROJECT_VERSION = 195; - DEVELOPMENT_TEAM = JWGEQSC9U7; + DEVELOPMENT_TEAM = 48XS7JAZB7; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = reFilc; @@ -774,7 +774,7 @@ "@executable_path/Frameworks", ); MARKETING_VERSION = 3.6.0; - PRODUCT_BUNDLE_IDENTIFIER = hu.refilc.naplo; + PRODUCT_BUNDLE_IDENTIFIER = com.refilc.naplo; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; diff --git a/filcnaplo/lib/api/providers/update_provider.dart b/filcnaplo/lib/api/providers/update_provider.dart index 3013d06..a942df6 100644 --- a/filcnaplo/lib/api/providers/update_provider.dart +++ b/filcnaplo/lib/api/providers/update_provider.dart @@ -3,6 +3,7 @@ import 'dart:io'; import 'package:filcnaplo/api/client.dart'; import 'package:filcnaplo/models/release.dart'; import 'package:flutter/material.dart'; +import 'package:package_info_plus/package_info_plus.dart'; class UpdateProvider extends ChangeNotifier { // Private @@ -20,9 +21,11 @@ class UpdateProvider extends ChangeNotifier { _releases = List.castFrom(initialReleases); } - static const currentVersion = String.fromEnvironment("APPVER", defaultValue: "1.0"); - Future fetch() async { + late String currentVersion; + PackageInfo packageInfo = await PackageInfo.fromPlatform(); + currentVersion = packageInfo.version; + if (!Platform.isAndroid) return; _releases = await FilcAPI.getReleases() ?? []; @@ -30,10 +33,30 @@ class UpdateProvider extends ChangeNotifier { // Check for new releases if (_releases.isNotEmpty) { - _available = _releases.first.version.compareTo(Version.fromString(currentVersion)) == 1; + _available = _releases.first.version + .compareTo(Version.fromString(currentVersion)) == + 1; // ignore: avoid_print if (_available) print("INFO: New update: ${releases.first.version}"); notifyListeners(); } } + + Future installedVersion() async { + PackageInfo packageInfo = await PackageInfo.fromPlatform(); + + String appName = packageInfo.appName; + String packageName = packageInfo.packageName; + String version = packageInfo.version; + String buildNumber = packageInfo.buildNumber; + + Map release = { + "app_name": appName, + "package_name": packageName, + "version": version, + "build_number": buildNumber, + }; + + return release; + } } diff --git a/filcnaplo/macos/Flutter/GeneratedPluginRegistrant.swift b/filcnaplo/macos/Flutter/GeneratedPluginRegistrant.swift index d61de2b..0a7b9c7 100644 --- a/filcnaplo/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/filcnaplo/macos/Flutter/GeneratedPluginRegistrant.swift @@ -9,6 +9,7 @@ import connectivity_plus import dynamic_color import flutter_acrylic import flutter_local_notifications +import package_info_plus import path_provider_foundation import share_plus_macos import sqflite @@ -19,6 +20,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { DynamicColorPlugin.register(with: registry.registrar(forPlugin: "DynamicColorPlugin")) FlutterAcrylicPlugin.register(with: registry.registrar(forPlugin: "FlutterAcrylicPlugin")) FlutterLocalNotificationsPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalNotificationsPlugin")) + FLTPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlusPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin")) SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin")) diff --git a/filcnaplo/macos/Podfile b/filcnaplo/macos/Podfile index 077cc7c..049abe2 100644 --- a/filcnaplo/macos/Podfile +++ b/filcnaplo/macos/Podfile @@ -1,40 +1,40 @@ -platform :osx, '10.11' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_macos_podfile_setup - -target 'Runner' do - use_frameworks! - use_modular_headers! - - flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_macos_build_settings(target) - end -end +platform :osx, '10.14' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_macos_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_macos_build_settings(target) + end +end diff --git a/filcnaplo/macos/Podfile.lock b/filcnaplo/macos/Podfile.lock index 7cfc6b5..17504a6 100644 --- a/filcnaplo/macos/Podfile.lock +++ b/filcnaplo/macos/Podfile.lock @@ -1,71 +1,78 @@ -PODS: - - connectivity_plus (0.0.1): - - FlutterMacOS - - ReachabilitySwift - - dynamic_color (0.0.2): - - FlutterMacOS - - flutter_acrylic (0.1.0): - - FlutterMacOS - - FlutterMacOS (1.0.0) - - FMDB (2.7.5): - - FMDB/standard (= 2.7.5) - - FMDB/standard (2.7.5) - - path_provider_macos (0.0.1): - - FlutterMacOS - - ReachabilitySwift (5.0.0) - - share_plus_macos (0.0.1): - - FlutterMacOS - - sqflite (0.0.2): - - FlutterMacOS - - FMDB (>= 2.7.5) - - url_launcher_macos (0.0.1): - - FlutterMacOS - -DEPENDENCIES: - - connectivity_plus (from `Flutter/ephemeral/.symlinks/plugins/connectivity_plus/macos`) - - dynamic_color (from `Flutter/ephemeral/.symlinks/plugins/dynamic_color/macos`) - - flutter_acrylic (from `Flutter/ephemeral/.symlinks/plugins/flutter_acrylic/macos`) - - FlutterMacOS (from `Flutter/ephemeral`) - - path_provider_macos (from `Flutter/ephemeral/.symlinks/plugins/path_provider_macos/macos`) - - share_plus_macos (from `Flutter/ephemeral/.symlinks/plugins/share_plus_macos/macos`) - - sqflite (from `Flutter/ephemeral/.symlinks/plugins/sqflite/macos`) - - url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`) - -SPEC REPOS: - trunk: - - FMDB - - ReachabilitySwift - -EXTERNAL SOURCES: - connectivity_plus: - :path: Flutter/ephemeral/.symlinks/plugins/connectivity_plus/macos - dynamic_color: - :path: Flutter/ephemeral/.symlinks/plugins/dynamic_color/macos - flutter_acrylic: - :path: Flutter/ephemeral/.symlinks/plugins/flutter_acrylic/macos - FlutterMacOS: - :path: Flutter/ephemeral - path_provider_macos: - :path: Flutter/ephemeral/.symlinks/plugins/path_provider_macos/macos - share_plus_macos: - :path: Flutter/ephemeral/.symlinks/plugins/share_plus_macos/macos - sqflite: - :path: Flutter/ephemeral/.symlinks/plugins/sqflite/macos - url_launcher_macos: - :path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos - -SPEC CHECKSUMS: - connectivity_plus: 18d3c32514c886e046de60e9c13895109866c747 - dynamic_color: 394d6a888650f8534e029b27d2f8bc5c64e44008 - flutter_acrylic: c3df24ae52ab6597197837ce59ef2a8542640c17 - FlutterMacOS: ae6af50a8ea7d6103d888583d46bd8328a7e9811 - FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a - path_provider_macos: 3c0c3b4b0d4a76d2bf989a913c2de869c5641a19 - ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825 - share_plus_macos: 853ee48e7dce06b633998ca0735d482dd671ade4 - sqflite: a5789cceda41d54d23f31d6de539d65bb14100ea - url_launcher_macos: 597e05b8e514239626bcf4a850fcf9ef5c856ec3 - -PODFILE CHECKSUM: 6eac6b3292e5142cfc23bdeb71848a40ec51c14c - -COCOAPODS: 1.11.3 +PODS: + - connectivity_plus (0.0.1): + - FlutterMacOS + - ReachabilitySwift + - dynamic_color (0.0.2): + - FlutterMacOS + - flutter_acrylic (0.1.0): + - FlutterMacOS + - flutter_local_notifications (0.0.1): + - FlutterMacOS + - FlutterMacOS (1.0.0) + - FMDB (2.7.5): + - FMDB/standard (= 2.7.5) + - FMDB/standard (2.7.5) + - path_provider_foundation (0.0.1): + - Flutter + - FlutterMacOS + - ReachabilitySwift (5.0.0) + - share_plus_macos (0.0.1): + - FlutterMacOS + - sqflite (0.0.2): + - FlutterMacOS + - FMDB (>= 2.7.5) + - url_launcher_macos (0.0.1): + - FlutterMacOS + +DEPENDENCIES: + - connectivity_plus (from `Flutter/ephemeral/.symlinks/plugins/connectivity_plus/macos`) + - dynamic_color (from `Flutter/ephemeral/.symlinks/plugins/dynamic_color/macos`) + - flutter_acrylic (from `Flutter/ephemeral/.symlinks/plugins/flutter_acrylic/macos`) + - flutter_local_notifications (from `Flutter/ephemeral/.symlinks/plugins/flutter_local_notifications/macos`) + - FlutterMacOS (from `Flutter/ephemeral`) + - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`) + - share_plus_macos (from `Flutter/ephemeral/.symlinks/plugins/share_plus_macos/macos`) + - sqflite (from `Flutter/ephemeral/.symlinks/plugins/sqflite/macos`) + - url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`) + +SPEC REPOS: + trunk: + - FMDB + - ReachabilitySwift + +EXTERNAL SOURCES: + connectivity_plus: + :path: Flutter/ephemeral/.symlinks/plugins/connectivity_plus/macos + dynamic_color: + :path: Flutter/ephemeral/.symlinks/plugins/dynamic_color/macos + flutter_acrylic: + :path: Flutter/ephemeral/.symlinks/plugins/flutter_acrylic/macos + flutter_local_notifications: + :path: Flutter/ephemeral/.symlinks/plugins/flutter_local_notifications/macos + FlutterMacOS: + :path: Flutter/ephemeral + path_provider_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin + share_plus_macos: + :path: Flutter/ephemeral/.symlinks/plugins/share_plus_macos/macos + sqflite: + :path: Flutter/ephemeral/.symlinks/plugins/sqflite/macos + url_launcher_macos: + :path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos + +SPEC CHECKSUMS: + connectivity_plus: 18d3c32514c886e046de60e9c13895109866c747 + dynamic_color: 2eaa27267de1ca20d879fbd6e01259773fb1670f + flutter_acrylic: c3df24ae52ab6597197837ce59ef2a8542640c17 + flutter_local_notifications: 3805ca215b2fb7f397d78b66db91f6a747af52e4 + FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 + FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a + path_provider_foundation: eaf5b3e458fc0e5fbb9940fb09980e853fe058b8 + ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825 + share_plus_macos: 853ee48e7dce06b633998ca0735d482dd671ade4 + sqflite: a5789cceda41d54d23f31d6de539d65bb14100ea + url_launcher_macos: 5335912b679c073563f29d89d33d10d459f95451 + +PODFILE CHECKSUM: 353c8bcc5d5b0994e508d035b5431cfe18c1dea7 + +COCOAPODS: 1.12.1 diff --git a/filcnaplo/macos/Runner.xcodeproj/project.pbxproj b/filcnaplo/macos/Runner.xcodeproj/project.pbxproj index 75f5b52..61c33df 100644 --- a/filcnaplo/macos/Runner.xcodeproj/project.pbxproj +++ b/filcnaplo/macos/Runner.xcodeproj/project.pbxproj @@ -1,669 +1,670 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 51; - objects = { - -/* Begin PBXAggregateTarget section */ - 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { - isa = PBXAggregateTarget; - buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; - buildPhases = ( - 33CC111E2044C6BF0003C045 /* ShellScript */, - ); - dependencies = ( - ); - name = "Flutter Assemble"; - productName = FLX; - }; -/* End PBXAggregateTarget section */ - -/* Begin PBXBuildFile section */ - 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; - 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; - 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 */; }; - 43DE217EE63035454211B258 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BB026B00EBE728C695C538A /* Pods_Runner.framework */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 33CC10E52044A3C60003C045 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 33CC111A2044C6BA0003C045; - remoteInfo = FLX; - }; -/* 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 */ - 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; - 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* Felt Diary.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Felt Diary.app"; sourceTree = BUILT_PRODUCTS_DIR; }; - 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; - 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; - 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; - 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; - 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; - 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; - 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; - 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 = ""; }; - 72E0977D2D8959666A33F54C /* 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 = ""; }; - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8BB026B00EBE728C695C538A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 9C848561CA407DAFCC1F5699 /* 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 = ""; }; - C200D9112D0A790C324733AA /* 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 = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 33CC10EA2044A3C60003C045 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 43DE217EE63035454211B258 /* Pods_Runner.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 33BA886A226E78AF003329D5 /* Configs */ = { - isa = PBXGroup; - children = ( - 33E5194F232828860026EE4D /* AppInfo.xcconfig */, - 9740EEB21CF90195004384FC /* Debug.xcconfig */, - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, - 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, - ); - path = Configs; - sourceTree = ""; - }; - 33CC10E42044A3C60003C045 = { - isa = PBXGroup; - children = ( - 33FAB671232836740065AC1E /* Runner */, - 33CEB47122A05771004F2AC0 /* Flutter */, - 33CC10EE2044A3C60003C045 /* Products */, - 51085A7CB06D107E9E0B55D2 /* Pods */, - D1EA9707C367C55447080BD3 /* Frameworks */, - ); - sourceTree = ""; - }; - 33CC10EE2044A3C60003C045 /* Products */ = { - isa = PBXGroup; - children = ( - 33CC10ED2044A3C60003C045 /* Felt Diary.app */, - ); - name = Products; - sourceTree = ""; - }; - 33CC11242044D66E0003C045 /* Resources */ = { - isa = PBXGroup; - children = ( - 33CC10F22044A3C60003C045 /* Assets.xcassets */, - 33CC10F42044A3C60003C045 /* MainMenu.xib */, - 33CC10F72044A3C60003C045 /* Info.plist */, - ); - name = Resources; - path = ..; - sourceTree = ""; - }; - 33CEB47122A05771004F2AC0 /* Flutter */ = { - isa = PBXGroup; - children = ( - 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, - 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, - 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, - 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, - ); - path = Flutter; - sourceTree = ""; - }; - 33FAB671232836740065AC1E /* Runner */ = { - isa = PBXGroup; - children = ( - 33CC10F02044A3C60003C045 /* AppDelegate.swift */, - 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, - 33E51913231747F40026EE4D /* DebugProfile.entitlements */, - 33E51914231749380026EE4D /* Release.entitlements */, - 33CC11242044D66E0003C045 /* Resources */, - 33BA886A226E78AF003329D5 /* Configs */, - ); - path = Runner; - sourceTree = ""; - }; - 51085A7CB06D107E9E0B55D2 /* Pods */ = { - isa = PBXGroup; - children = ( - 72E0977D2D8959666A33F54C /* Pods-Runner.debug.xcconfig */, - C200D9112D0A790C324733AA /* Pods-Runner.release.xcconfig */, - 9C848561CA407DAFCC1F5699 /* Pods-Runner.profile.xcconfig */, - ); - path = Pods; - sourceTree = ""; - }; - D1EA9707C367C55447080BD3 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 8BB026B00EBE728C695C538A /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 33CC10EC2044A3C60003C045 /* Runner */ = { - isa = PBXNativeTarget; - buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; - buildPhases = ( - FD4539A7C90013601C734851 /* [CP] Check Pods Manifest.lock */, - 33CC10E92044A3C60003C045 /* Sources */, - 33CC10EA2044A3C60003C045 /* Frameworks */, - 33CC10EB2044A3C60003C045 /* Resources */, - 33CC110E2044A8840003C045 /* Bundle Framework */, - 3399D490228B24CF009A79C7 /* ShellScript */, - 558B4163B66FBD35BF611538 /* [CP] Embed Pods Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 33CC11202044C79F0003C045 /* PBXTargetDependency */, - ); - name = Runner; - productName = Runner; - productReference = 33CC10ED2044A3C60003C045 /* Felt Diary.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 33CC10E52044A3C60003C045 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 0920; - LastUpgradeCheck = 1400; - ORGANIZATIONNAME = ""; - TargetAttributes = { - 33CC10EC2044A3C60003C045 = { - CreatedOnToolsVersion = 9.2; - LastSwiftMigration = 1100; - SystemCapabilities = { - com.apple.Sandbox = { - enabled = 1; - }; - }; - }; - 33CC111A2044C6BA0003C045 = { - CreatedOnToolsVersion = 9.2; - ProvisioningStyle = Manual; - }; - }; - }; - buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 33CC10E42044A3C60003C045; - productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 33CC10EC2044A3C60003C045 /* Runner */, - 33CC111A2044C6BA0003C045 /* Flutter Assemble */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 33CC10EB2044A3C60003C045 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, - 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - ); - outputFileListPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; - }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, - ); - inputPaths = ( - Flutter/ephemeral/tripwire, - ); - outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; - }; - 558B4163B66FBD35BF611538 /* [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; - }; - FD4539A7C90013601C734851 /* [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 */ - 33CC10E92044A3C60003C045 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, - 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, - 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; - targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { - isa = PBXVariantGroup; - children = ( - 33CC10F52044A3C60003C045 /* Base */, - ); - name = MainMenu.xib; - path = Runner; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 338D0CE9231458BD00FA5F75 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CODE_SIGN_IDENTITY = "-"; - COPY_PHASE_STRIP = NO; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.13; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = macosx; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - }; - name = Profile; - }; - 338D0CEA231458BD00FA5F75 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; - CODE_SIGN_IDENTITY = "Apple Development"; - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; - CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - DEAD_CODE_STRIPPING = YES; - DEVELOPMENT_TEAM = MYUTW2GF6J; - INFOPLIST_FILE = Runner/Info.plist; - INFOPLIST_KEY_CFBundleDisplayName = "reFilc"; - INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.education"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.13; - NEW_SETTING = ""; - PRODUCT_BUNDLE_IDENTIFIER = hu.filc.filcnaplo; - PRODUCT_NAME = "Felt Diary"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_VERSION = 5.0; - }; - name = Profile; - }; - 338D0CEB231458BD00FA5F75 /* Profile */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Manual; - DEAD_CODE_STRIPPING = YES; - MACOSX_DEPLOYMENT_TARGET = 10.13; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Profile; - }; - 33CC10F92044A3C60003C045 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CODE_SIGN_IDENTITY = "-"; - COPY_PHASE_STRIP = NO; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.13; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 33CC10FA2044A3C60003C045 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CODE_SIGN_IDENTITY = "-"; - COPY_PHASE_STRIP = NO; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.13; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = macosx; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - }; - name = Release; - }; - 33CC10FC2044A3C60003C045 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; - CODE_SIGN_IDENTITY = "Apple Development"; - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; - CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - DEAD_CODE_STRIPPING = YES; - DEVELOPMENT_TEAM = MYUTW2GF6J; - INFOPLIST_FILE = Runner/Info.plist; - INFOPLIST_KEY_CFBundleDisplayName = "reFilc"; - INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.education"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.13; - NEW_SETTING = ""; - PRODUCT_BUNDLE_IDENTIFIER = hu.filc.filcnaplo; - PRODUCT_NAME = "Felt Diary"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - 33CC10FD2044A3C60003C045 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; - CODE_SIGN_IDENTITY = "Apple Development"; - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; - CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - DEAD_CODE_STRIPPING = YES; - DEVELOPMENT_TEAM = MYUTW2GF6J; - INFOPLIST_FILE = Runner/Info.plist; - INFOPLIST_KEY_CFBundleDisplayName = "reFilc"; - INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.education"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.13; - NEW_SETTING = ""; - PRODUCT_BUNDLE_IDENTIFIER = hu.filc.filcnaplo; - PRODUCT_NAME = "Felt Diary"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; - 33CC111C2044C6BA0003C045 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Manual; - DEAD_CODE_STRIPPING = YES; - MACOSX_DEPLOYMENT_TARGET = 10.13; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Debug; - }; - 33CC111D2044C6BA0003C045 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - DEAD_CODE_STRIPPING = YES; - MACOSX_DEPLOYMENT_TARGET = 10.13; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 33CC10F92044A3C60003C045 /* Debug */, - 33CC10FA2044A3C60003C045 /* Release */, - 338D0CE9231458BD00FA5F75 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 33CC10FC2044A3C60003C045 /* Debug */, - 33CC10FD2044A3C60003C045 /* Release */, - 338D0CEA231458BD00FA5F75 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 33CC111C2044C6BA0003C045 /* Debug */, - 33CC111D2044C6BA0003C045 /* Release */, - 338D0CEB231458BD00FA5F75 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 33CC10E52044A3C60003C045 /* Project object */; -} +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 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 */; }; + 43DE217EE63035454211B258 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BB026B00EBE728C695C538A /* Pods_Runner.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* 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 */ + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* Felt Diary.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Felt Diary.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 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 = ""; }; + 72E0977D2D8959666A33F54C /* 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 = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 8BB026B00EBE728C695C538A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + 9C848561CA407DAFCC1F5699 /* 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 = ""; }; + C200D9112D0A790C324733AA /* 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 = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 43DE217EE63035454211B258 /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 33CC10EE2044A3C60003C045 /* Products */, + 51085A7CB06D107E9E0B55D2 /* Pods */, + D1EA9707C367C55447080BD3 /* Frameworks */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* Felt Diary.app */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + 51085A7CB06D107E9E0B55D2 /* Pods */ = { + isa = PBXGroup; + children = ( + 72E0977D2D8959666A33F54C /* Pods-Runner.debug.xcconfig */, + C200D9112D0A790C324733AA /* Pods-Runner.release.xcconfig */, + 9C848561CA407DAFCC1F5699 /* Pods-Runner.profile.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; + D1EA9707C367C55447080BD3 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 8BB026B00EBE728C695C538A /* Pods_Runner.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + FD4539A7C90013601C734851 /* [CP] Check Pods Manifest.lock */, + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + 558B4163B66FBD35BF611538 /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* Felt Diary.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1300; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; + 558B4163B66FBD35BF611538 /* [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; + }; + FD4539A7C90013601C734851 /* [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 */ + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + DEAD_CODE_STRIPPING = YES; + DEVELOPMENT_TEAM = MYUTW2GF6J; + INFOPLIST_FILE = Runner/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = "reFilc"; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.education"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 10.14; + NEW_SETTING = ""; + PRODUCT_BUNDLE_IDENTIFIER = hu.filc.filcnaplo; + PRODUCT_NAME = "Felt Diary"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + DEAD_CODE_STRIPPING = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + DEAD_CODE_STRIPPING = YES; + DEVELOPMENT_TEAM = MYUTW2GF6J; + INFOPLIST_FILE = Runner/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = "reFilc"; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.education"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 10.14; + NEW_SETTING = ""; + PRODUCT_BUNDLE_IDENTIFIER = hu.filc.filcnaplo; + PRODUCT_NAME = "Felt Diary"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + DEAD_CODE_STRIPPING = YES; + DEVELOPMENT_TEAM = MYUTW2GF6J; + INFOPLIST_FILE = Runner/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = "reFilc"; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.education"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 10.14; + NEW_SETTING = ""; + PRODUCT_BUNDLE_IDENTIFIER = hu.filc.filcnaplo; + PRODUCT_NAME = "Felt Diary"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + DEAD_CODE_STRIPPING = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + DEAD_CODE_STRIPPING = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/filcnaplo/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/filcnaplo/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 78fb329..f2f63a8 100644 --- a/filcnaplo/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/filcnaplo/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,87 +1,87 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/filcnaplo/pubspec.yaml b/filcnaplo/pubspec.yaml index 3b0171a..8dd291e 100644 --- a/filcnaplo/pubspec.yaml +++ b/filcnaplo/pubspec.yaml @@ -3,7 +3,7 @@ description: "Nem hivatalos e-napló alkalmazás az e-Kréta rendszerhez" homepage: https://refilc.hu publish_to: "none" -version: 4.0.0+198 +version: 4.0.1+205 environment: sdk: ">=2.17.0 <3.0.0" @@ -67,6 +67,7 @@ dependencies: animations: ^2.0.1 background_fetch: ^1.1.5 flutter_local_notifications: ^14.1.0 + package_info_plus: ^3.1.2 dev_dependencies: flutter_lints: ^2.0.1 diff --git a/filcnaplo_desktop_ui/lib/pages/grades/grade_subject_view.dart b/filcnaplo_desktop_ui/lib/pages/grades/grade_subject_view.dart index 1612457..95571f1 100644 --- a/filcnaplo_desktop_ui/lib/pages/grades/grade_subject_view.dart +++ b/filcnaplo_desktop_ui/lib/pages/grades/grade_subject_view.dart @@ -26,16 +26,18 @@ import 'package:flutter_expandable_fab/flutter_expandable_fab.dart'; import 'package:flutter_feather_icons/flutter_feather_icons.dart'; import 'package:provider/provider.dart'; import 'grades_page.i18n.dart'; -// import 'package:filcnaplo_premium/ui/mobile/goalplanner/new_goal.dart'; +//import 'package:filcnaplo_premium/ui/mobile/goal_planner/new_goal.dart'; class GradeSubjectView extends StatefulWidget { - const GradeSubjectView(this.subject, {Key? key, this.groupAverage = 0.0}) : super(key: key); + const GradeSubjectView(this.subject, {Key? key, this.groupAverage = 0.0}) + : super(key: key); final Subject subject; final double groupAverage; void push(BuildContext context, {bool root = false}) { - Navigator.of(context, rootNavigator: root).push(CupertinoPageRoute(builder: (context) => this)); + Navigator.of(context, rootNavigator: root) + .push(CupertinoPageRoute(builder: (context) => this)); } @override @@ -70,7 +72,9 @@ class _GradeSubjectViewState extends State { final gradeDates = subjectGrades.map((e) => e.date.millisecondsSinceEpoch); final maxGradeDate = gradeDates.fold(0, max); final minGradeDate = gradeDates.fold(0, min); - if (maxGradeDate - minGradeDate < const Duration(days: 5).inMilliseconds) return false; // naplo/#78 + if (maxGradeDate - minGradeDate < const Duration(days: 5).inMilliseconds) { + return false; // naplo/#78 + } return subjectGrades.where((e) => e.type == GradeType.midYear).length > 1; } @@ -129,7 +133,8 @@ class _GradeSubjectViewState extends State { ), ); - tiles.add(Padding(padding: EdgeInsets.only(bottom: !gradeCalcMode ? 24.0 : 250.0))); + tiles.add(Padding( + padding: EdgeInsets.only(bottom: !gradeCalcMode ? 24.0 : 250.0))); gradeTiles = List.castFrom(tiles); } @@ -142,7 +147,10 @@ class _GradeSubjectViewState extends State { average = AverageHelper.averageEvals(subjectGrades); final prevAvg = subjectGrades.isNotEmpty ? AverageHelper.averageEvals(subjectGrades - .where((e) => e.date.isBefore(subjectGrades.reduce((v, e) => e.date.isAfter(v.date) ? e : v).date.subtract(const Duration(days: 30)))) + .where((e) => e.date.isBefore(subjectGrades + .reduce((v, e) => e.date.isAfter(v.date) ? e : v) + .date + .subtract(const Duration(days: 30)))) .toList()) : 0.0; @@ -153,14 +161,17 @@ class _GradeSubjectViewState extends State { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text("annual_average".i18n), - if (average != prevAvg) TrendDisplay(current: average, previous: prevAvg), + if (average != prevAvg) + TrendDisplay(current: average, previous: prevAvg), ], ), child: Container( padding: const EdgeInsets.only(top: 12.0, right: 12.0), child: Row( children: [ - Expanded(child: GradeGraph(subjectGrades, dayThreshold: 5, classAvg: widget.groupAverage)), + Expanded( + child: GradeGraph(subjectGrades, + dayThreshold: 5, classAvg: widget.groupAverage)), Padding( padding: const EdgeInsets.only(bottom: 24.0), child: GradesCount(grades: subjectGrades), @@ -174,7 +185,9 @@ class _GradeSubjectViewState extends State { if (!gradeCalcMode) { buildTiles(subjectGrades); } else { - List ghostGrades = calculatorProvider.ghosts.where((e) => e.subject == widget.subject).toList(); + List ghostGrades = calculatorProvider.ghosts + .where((e) => e.subject == widget.subject) + .toList(); buildTiles(ghostGrades); } @@ -182,7 +195,10 @@ class _GradeSubjectViewState extends State { key: _scaffoldKey, floatingActionButtonLocation: ExpandableFab.location, floatingActionButton: Visibility( - visible: !gradeCalcMode && subjectGrades.where((e) => e.type == GradeType.midYear).isNotEmpty, + visible: !gradeCalcMode && + subjectGrades + .where((e) => e.type == GradeType.midYear) + .isNotEmpty, child: ExpandableFab( type: ExpandableFabType.up, distance: 50, @@ -215,12 +231,17 @@ class _GradeSubjectViewState extends State { }, navBarItems: [ const SizedBox(width: 6.0), - if (widget.groupAverage != 0) Center(child: AverageDisplay(average: widget.groupAverage, border: true)), + if (widget.groupAverage != 0) + Center( + child: AverageDisplay( + average: widget.groupAverage, border: true)), const SizedBox(width: 6.0), - if (average != 0) Center(child: AverageDisplay(average: average)), + if (average != 0) + Center(child: AverageDisplay(average: average)), const SizedBox(width: 12.0), ], - icon: SubjectIcon.resolveVariant(subject: widget.subject, context: context), + icon: SubjectIcon.resolveVariant( + subject: widget.subject, context: context), scrollController: _scrollController, title: widget.subject.renamedTo ?? widget.subject.name.capital(), italic: widget.subject.isRenamed, @@ -240,13 +261,15 @@ class _GradeSubjectViewState extends State { void gradeCalc(BuildContext context) { // Scroll to the top of the page - _scrollController.animateTo(75, duration: const Duration(milliseconds: 500), curve: Curves.ease); + _scrollController.animateTo(75, + duration: const Duration(milliseconds: 500), curve: Curves.ease); calculatorProvider.clear(); calculatorProvider.addAllGrades(gradeProvider.grades); _sheetController = _scaffoldKey.currentState?.showBottomSheet( - (context) => RoundedBottomSheet(child: GradeCalculator(widget.subject), borderRadius: 14.0), + (context) => RoundedBottomSheet( + child: GradeCalculator(widget.subject), borderRadius: 14.0), backgroundColor: const Color(0x00000000), elevation: 12.0, ); diff --git a/filcnaplo_desktop_ui/lib/pages/grades/grades_page.dart b/filcnaplo_desktop_ui/lib/pages/grades/grades_page.dart index c991d9b..619756a 100644 --- a/filcnaplo_desktop_ui/lib/pages/grades/grades_page.dart +++ b/filcnaplo_desktop_ui/lib/pages/grades/grades_page.dart @@ -41,13 +41,21 @@ class _GradesPageState extends State { int avgDropValue = 0; - List getSubjectGrades(Subject subject, {int days = 0}) => gradeProvider.grades - .where( - (e) => e.subject == subject && e.type == GradeType.midYear && (days == 0 || e.date.isBefore(DateTime.now().subtract(Duration(days: days))))) + List getSubjectGrades(Subject subject, {int days = 0}) => gradeProvider + .grades + .where((e) => + e.subject == subject && + e.type == GradeType.midYear && + (days == 0 || + e.date.isBefore(DateTime.now().subtract(Duration(days: days))))) .toList(); void generateTiles() { - List subjects = gradeProvider.grades.map((e) => e.subject).toSet().toList()..sort((a, b) => a.name.compareTo(b.name)); + List subjects = gradeProvider.grades + .map((e) => e.subject) + .toSet() + .toList() + ..sort((a, b) => a.name.compareTo(b.name)); List tiles = []; Map subjectAvgs = {}; @@ -59,11 +67,15 @@ class _GradesPageState extends State { double averageBefore = 0.0; if (avgDropValue != 0) { - List gradesBefore = getSubjectGrades(subject, days: avgDropValue); - averageBefore = avgDropValue == 0 ? 0.0 : AverageHelper.averageEvals(gradesBefore); + List gradesBefore = + getSubjectGrades(subject, days: avgDropValue); + averageBefore = + avgDropValue == 0 ? 0.0 : AverageHelper.averageEvals(gradesBefore); } var nullavg = GroupAverage(average: 0.0, subject: subject, uid: "0"); - double groupAverage = gradeProvider.groupAverages.firstWhere((e) => e.subject == subject, orElse: () => nullavg).average; + double groupAverage = gradeProvider.groupAverages + .firstWhere((e) => e.subject == subject, orElse: () => nullavg) + .average; if (avg != 0) subjectAvgs[subject] = avg; @@ -73,7 +85,8 @@ class _GradesPageState extends State { average: avg, groupAverage: avgDropValue == 0 ? groupAverage : 0.0, onTap: () { - GradeSubjectView(subject, groupAverage: groupAverage).push(context, root: true); + GradeSubjectView(subject, groupAverage: groupAverage) + .push(context, root: true); }, ); })); @@ -81,7 +94,12 @@ class _GradesPageState extends State { if (tiles.isNotEmpty) { tiles.insert(0, yearlyGraph); tiles.insert(1, FailWarning(subjectAvgs: subjectAvgs)); - tiles.insert(2, PanelTitle(title: Text(avgDropValue == 0 ? "Subjects".i18n : "Subjects_changes".i18n))); + tiles.insert( + 2, + PanelTitle( + title: Text(avgDropValue == 0 + ? "Subjects".i18n + : "Subjects_changes".i18n))); tiles.insert(3, const PanelHeader(padding: EdgeInsets.only(top: 12.0))); tiles.add(const PanelFooter(padding: EdgeInsets.only(bottom: 12.0))); tiles.add(const Padding(padding: EdgeInsets.only(bottom: 24.0))); @@ -95,9 +113,15 @@ class _GradesPageState extends State { ); } - double subjectAvg = subjectAvgs.isNotEmpty ? subjectAvgs.values.fold(0.0, (double a, double b) => a + b) / subjectAvgs.length : 0.0; + double subjectAvg = subjectAvgs.isNotEmpty + ? subjectAvgs.values.fold(0.0, (double a, double b) => a + b) / + subjectAvgs.length + : 0.0; final double classAvg = gradeProvider.groupAverages.isNotEmpty - ? gradeProvider.groupAverages.map((e) => e.average).fold(0.0, (double a, double b) => a + b) / gradeProvider.groupAverages.length + ? gradeProvider.groupAverages + .map((e) => e.average) + .fold(0.0, (double a, double b) => a + b) / + gradeProvider.groupAverages.length : 0.0; if (subjectAvg > 0) { @@ -151,18 +175,31 @@ class _GradesPageState extends State { final double totalClassAvg = gradeProvider.groupAverages.isEmpty ? 0.0 - : gradeProvider.groupAverages.map((e) => e.average).fold(0.0, (double a, double b) => a + b) / gradeProvider.groupAverages.length; + : gradeProvider.groupAverages + .map((e) => e.average) + .fold(0.0, (double a, double b) => a + b) / + gradeProvider.groupAverages.length; - final now = gradeProvider.grades.isNotEmpty ? gradeProvider.grades.reduce((v, e) => e.date.isAfter(v.date) ? e : v).date : DateTime.now(); + final now = gradeProvider.grades.isNotEmpty + ? gradeProvider.grades + .reduce((v, e) => e.date.isAfter(v.date) ? e : v) + .date + : DateTime.now(); - final currentStudentAvg = AverageHelper.averageEvals(gradeProvider.grades.where((e) => e.type == GradeType.midYear).toList()); + final currentStudentAvg = AverageHelper.averageEvals(gradeProvider.grades + .where((e) => e.type == GradeType.midYear) + .toList()); final prevStudentAvg = AverageHelper.averageEvals(gradeProvider.grades .where((e) => e.type == GradeType.midYear) .where((e) => e.date.isBefore(now.subtract(const Duration(days: 30)))) .toList()); List graphGrades = gradeProvider.grades - .where((e) => e.type == GradeType.midYear && (avgDropValue == 0 || e.date.isAfter(DateTime.now().subtract(Duration(days: avgDropValue))))) + .where((e) => + e.type == GradeType.midYear && + (avgDropValue == 0 || + e.date.isAfter( + DateTime.now().subtract(Duration(days: avgDropValue))))) .toList(); yearlyGraph = Padding( @@ -183,8 +220,12 @@ class _GradesPageState extends State { children: [ // if (totalClassAvg >= 1.0) AverageDisplay(average: totalClassAvg, border: true), // const SizedBox(width: 4.0), - TrendDisplay(previous: prevStudentAvg, current: currentStudentAvg), - if (gradeProvider.grades.where((e) => e.type == GradeType.midYear).isNotEmpty) AverageDisplay(average: currentStudentAvg), + TrendDisplay( + previous: prevStudentAvg, current: currentStudentAvg), + if (gradeProvider.grades + .where((e) => e.type == GradeType.midYear) + .isNotEmpty) + AverageDisplay(average: currentStudentAvg), ], ) ], @@ -193,7 +234,9 @@ class _GradesPageState extends State { padding: const EdgeInsets.only(top: 12.0, right: 12.0), child: Row( children: [ - Expanded(child: GradeGraph(graphGrades, dayThreshold: 2, classAvg: totalClassAvg)), + Expanded( + child: GradeGraph(graphGrades, + dayThreshold: 2, classAvg: totalClassAvg)), Padding( padding: const EdgeInsets.only(bottom: 24.0), child: GradesCount(grades: graphGrades), @@ -210,7 +253,8 @@ class _GradesPageState extends State { body: Padding( padding: const EdgeInsets.only(top: 9.0), child: NestedScrollView( - physics: const BouncingScrollPhysics(parent: AlwaysScrollableScrollPhysics()), + physics: const BouncingScrollPhysics( + parent: AlwaysScrollableScrollPhysics()), headerSliverBuilder: (context, _) => [ SliverAppBar( centerTitle: false, @@ -223,7 +267,10 @@ class _GradesPageState extends State { padding: const EdgeInsets.only(left: 8.0), child: Text( "Grades".i18n, - style: TextStyle(color: AppColors.of(context).text, fontSize: 32.0, fontWeight: FontWeight.bold), + style: TextStyle( + color: AppColors.of(context).text, + fontSize: 32.0, + fontWeight: FontWeight.bold), ), ), shadowColor: Theme.of(context).shadowColor, @@ -238,7 +285,8 @@ class _GradesPageState extends State { itemCount: max(subjectTiles.length, 1), itemBuilder: (context, index) { if (subjectTiles.isNotEmpty) { - EdgeInsetsGeometry panelPadding = const EdgeInsets.symmetric(horizontal: 24.0); + EdgeInsetsGeometry panelPadding = + const EdgeInsets.symmetric(horizontal: 24.0); if (subjectTiles[index].runtimeType == GradeSubjectTile) { return Padding( @@ -248,7 +296,8 @@ class _GradesPageState extends State { padding: const EdgeInsets.symmetric(horizontal: 8.0), )); } else { - return Padding(padding: panelPadding, child: subjectTiles[index]); + return Padding( + padding: panelPadding, child: subjectTiles[index]); } } else { return Container(); diff --git a/filcnaplo_mobile_ui/lib/common/hero_scrollview.dart b/filcnaplo_mobile_ui/lib/common/hero_scrollview.dart index ae09b9d..91872a2 100755 --- a/filcnaplo_mobile_ui/lib/common/hero_scrollview.dart +++ b/filcnaplo_mobile_ui/lib/common/hero_scrollview.dart @@ -57,7 +57,8 @@ class _HeroScrollViewState extends State { Widget build(BuildContext context) { return NestedScrollView( controller: _scrollController, - physics: const BouncingScrollPhysics(parent: AlwaysScrollableScrollPhysics()), + physics: + const BouncingScrollPhysics(parent: AlwaysScrollableScrollPhysics()), headerSliverBuilder: (context, _) => [ SliverAppBar( pinned: true, @@ -70,7 +71,8 @@ class _HeroScrollViewState extends State { opacity: showBarTitle ? 1.0 : 0.0, child: Row( children: [ - Icon(widget.icon, color: AppColors.of(context).text.withOpacity(.8)), + Icon(widget.icon, + color: AppColors.of(context).text.withOpacity(.8)), const SizedBox(width: 8.0), Expanded( child: Text( @@ -78,7 +80,9 @@ class _HeroScrollViewState extends State { overflow: TextOverflow.ellipsis, maxLines: 2, style: TextStyle( - color: AppColors.of(context).text, fontWeight: FontWeight.w500, fontStyle: widget.italic ? FontStyle.italic : null), + color: AppColors.of(context).text, + fontWeight: FontWeight.w500, + fontStyle: widget.italic ? FontStyle.italic : null), ), ), ], @@ -94,7 +98,7 @@ class _HeroScrollViewState extends State { } }), actions: widget.navBarItems, - expandedHeight: 124.0, + expandedHeight: 145.69, stretch: true, flexibleSpace: FlexibleSpaceBar( background: Stack( diff --git a/filcnaplo_mobile_ui/lib/pages/grades/grade_subject_view.dart b/filcnaplo_mobile_ui/lib/pages/grades/grade_subject_view.dart index 4258872..1ef632c 100755 --- a/filcnaplo_mobile_ui/lib/pages/grades/grade_subject_view.dart +++ b/filcnaplo_mobile_ui/lib/pages/grades/grade_subject_view.dart @@ -29,16 +29,18 @@ import 'package:flutter_expandable_fab/flutter_expandable_fab.dart'; import 'package:flutter_feather_icons/flutter_feather_icons.dart'; import 'package:provider/provider.dart'; import 'grades_page.i18n.dart'; -// import 'package:filcnaplo_premium/ui/mobile/goalplanner/new_goal.dart'; +// import 'package:filcnaplo_premium/ui/mobile/goal_planner/new_goal.dart'; class GradeSubjectView extends StatefulWidget { - const GradeSubjectView(this.subject, {Key? key, this.groupAverage = 0.0}) : super(key: key); + const GradeSubjectView(this.subject, {Key? key, this.groupAverage = 0.0}) + : super(key: key); final Subject subject; final double groupAverage; void push(BuildContext context, {bool root = false}) { - Navigator.of(context, rootNavigator: root).push(CupertinoPageRoute(builder: (context) => this)); + Navigator.of(context, rootNavigator: root) + .push(CupertinoPageRoute(builder: (context) => this)); } @override @@ -73,7 +75,8 @@ class _GradeSubjectViewState extends State { final gradeDates = subjectGrades.map((e) => e.date.millisecondsSinceEpoch); final maxGradeDate = gradeDates.fold(0, max); final minGradeDate = gradeDates.fold(0, min); - if (maxGradeDate - minGradeDate < const Duration(days: 5).inMilliseconds) return false; // naplo/#78 + if (maxGradeDate - minGradeDate < const Duration(days: 5).inMilliseconds) + return false; // naplo/#78 return subjectGrades.where((e) => e.type == GradeType.midYear).length > 1; } @@ -139,7 +142,8 @@ class _GradeSubjectViewState extends State { ), ); - tiles.add(Padding(padding: EdgeInsets.only(bottom: !gradeCalcMode ? 24.0 : 250.0))); + tiles.add(Padding( + padding: EdgeInsets.only(bottom: !gradeCalcMode ? 24.0 : 250.0))); gradeTiles = List.castFrom(tiles); } @@ -152,7 +156,10 @@ class _GradeSubjectViewState extends State { average = AverageHelper.averageEvals(subjectGrades); final prevAvg = subjectGrades.isNotEmpty ? AverageHelper.averageEvals(subjectGrades - .where((e) => e.date.isBefore(subjectGrades.reduce((v, e) => e.date.isAfter(v.date) ? e : v).date.subtract(const Duration(days: 30)))) + .where((e) => e.date.isBefore(subjectGrades + .reduce((v, e) => e.date.isAfter(v.date) ? e : v) + .date + .subtract(const Duration(days: 30)))) .toList()) : 0.0; @@ -163,12 +170,14 @@ class _GradeSubjectViewState extends State { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text("annual_average".i18n), - if (average != prevAvg) TrendDisplay(current: average, previous: prevAvg), + if (average != prevAvg) + TrendDisplay(current: average, previous: prevAvg), ], ), child: Container( padding: const EdgeInsets.only(top: 16.0, right: 12.0), - child: GradeGraph(subjectGrades, dayThreshold: 5, classAvg: widget.groupAverage), + child: GradeGraph(subjectGrades, + dayThreshold: 5, classAvg: widget.groupAverage), ), ), ); @@ -176,7 +185,9 @@ class _GradeSubjectViewState extends State { if (!gradeCalcMode) { buildTiles(subjectGrades); } else { - List ghostGrades = calculatorProvider.ghosts.where((e) => e.subject == widget.subject).toList(); + List ghostGrades = calculatorProvider.ghosts + .where((e) => e.subject == widget.subject) + .toList(); buildTiles(ghostGrades); } @@ -184,7 +195,10 @@ class _GradeSubjectViewState extends State { key: _scaffoldKey, floatingActionButtonLocation: ExpandableFab.location, floatingActionButton: Visibility( - visible: !gradeCalcMode && subjectGrades.where((e) => e.type == GradeType.midYear).isNotEmpty, + visible: !gradeCalcMode && + subjectGrades + .where((e) => e.type == GradeType.midYear) + .isNotEmpty, child: ExpandableFab( backgroundColor: Theme.of(context).colorScheme.secondary, type: ExpandableFabType.up, @@ -204,14 +218,19 @@ class _GradeSubjectViewState extends State { child: const Icon(FeatherIcons.flag, size: 20.0), backgroundColor: Theme.of(context).colorScheme.secondary, onPressed: () { - if (!Provider.of(context, listen: false).hasScope(PremiumScopes.goalPlanner)) { - PremiumLockedFeatureUpsell.show(context: context, feature: PremiumFeature.goalplanner); + if (!Provider.of(context, listen: false) + .hasScope(PremiumScopes.goalPlanner)) { + PremiumLockedFeatureUpsell.show( + context: context, feature: PremiumFeature.goalplanner); return; } - ScaffoldMessenger.of(context).showSnackBar(const SnackBar(content: Text("Hamarosan..."))); + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar(content: Text("Hamarosan..."))); - // Navigator.of(context).push(CupertinoPageRoute(builder: (context) => PremiumGoalplannerNewGoalScreen(subject: widget.subject))); + //Navigator.of(context).push(CupertinoPageRoute( + //builder: (context) => PremiumGoalplannerNewGoalScreen( + // subject: widget.subject))); }, ), ], @@ -230,12 +249,17 @@ class _GradeSubjectViewState extends State { }, navBarItems: [ const SizedBox(width: 6.0), - if (widget.groupAverage != 0) Center(child: AverageDisplay(average: widget.groupAverage, border: true)), + if (widget.groupAverage != 0) + Center( + child: AverageDisplay( + average: widget.groupAverage, border: true)), const SizedBox(width: 6.0), - if (average != 0) Center(child: AverageDisplay(average: average)), + if (average != 0) + Center(child: AverageDisplay(average: average)), const SizedBox(width: 12.0), ], - icon: SubjectIcon.resolveVariant(subject: widget.subject, context: context), + icon: SubjectIcon.resolveVariant( + subject: widget.subject, context: context), scrollController: _scrollController, title: widget.subject.renamedTo ?? widget.subject.name.capital(), italic: widget.subject.isRenamed, @@ -255,13 +279,15 @@ class _GradeSubjectViewState extends State { void gradeCalc(BuildContext context) { // Scroll to the top of the page - _scrollController.animateTo(75, duration: const Duration(milliseconds: 500), curve: Curves.ease); + _scrollController.animateTo(75, + duration: const Duration(milliseconds: 500), curve: Curves.ease); calculatorProvider.clear(); calculatorProvider.addAllGrades(gradeProvider.grades); _sheetController = _scaffoldKey.currentState?.showBottomSheet( - (context) => RoundedBottomSheet(child: GradeCalculator(widget.subject), borderRadius: 14.0), + (context) => RoundedBottomSheet( + child: GradeCalculator(widget.subject), borderRadius: 14.0), backgroundColor: const Color(0x00000000), elevation: 12.0, ); diff --git a/filcnaplo_mobile_ui/lib/screens/navigation/navbar_item.dart b/filcnaplo_mobile_ui/lib/screens/navigation/navbar_item.dart index 8d9f7b7..c28796b 100755 --- a/filcnaplo_mobile_ui/lib/screens/navigation/navbar_item.dart +++ b/filcnaplo_mobile_ui/lib/screens/navigation/navbar_item.dart @@ -5,7 +5,8 @@ class NavItem { final Widget icon; final Widget activeIcon; - const NavItem({required this.title, required this.icon, required this.activeIcon}); + const NavItem( + {required this.title, required this.icon, required this.activeIcon}); } class NavbarItem extends StatelessWidget { @@ -25,14 +26,16 @@ class NavbarItem extends StatelessWidget { final Widget icon = active ? item.activeIcon : item.icon; return SafeArea( - child: InkWell( + child: GestureDetector( onTap: onTap, child: Padding( padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 6.0), child: Container( padding: const EdgeInsets.all(12.0), decoration: BoxDecoration( - color: active ? Theme.of(context).colorScheme.secondary.withOpacity(.4) : null, + color: active + ? Theme.of(context).colorScheme.secondary.withOpacity(.4) + : null, borderRadius: BorderRadius.circular(14.0), ), child: Stack( @@ -45,7 +48,9 @@ class NavbarItem extends StatelessWidget { ), IconTheme( data: IconThemeData( - color: Theme.of(context).brightness == Brightness.light ? Colors.black.withOpacity(.5) : Colors.white.withOpacity(.3), + color: Theme.of(context).brightness == Brightness.light + ? Colors.black.withOpacity(.5) + : Colors.white.withOpacity(.3), ), child: icon, ), diff --git a/filcnaplo_mobile_ui/lib/screens/settings/privacy_view.dart b/filcnaplo_mobile_ui/lib/screens/settings/privacy_view.dart index 965df38..f6e34d8 100755 --- a/filcnaplo_mobile_ui/lib/screens/settings/privacy_view.dart +++ b/filcnaplo_mobile_ui/lib/screens/settings/privacy_view.dart @@ -6,7 +6,10 @@ import 'settings_screen.i18n.dart'; class PrivacyView extends StatelessWidget { const PrivacyView({Key? key}) : super(key: key); - static void show(BuildContext context) => showDialog(context: context, builder: (context) => const PrivacyView(), barrierDismissible: true); + static void show(BuildContext context) => showDialog( + context: context, + builder: (context) => const PrivacyView(), + barrierDismissible: true); @override Widget build(BuildContext context) { diff --git a/filcnaplo_mobile_ui/lib/screens/settings/settings_screen.dart b/filcnaplo_mobile_ui/lib/screens/settings/settings_screen.dart index 640385a..fc5225f 100755 --- a/filcnaplo_mobile_ui/lib/screens/settings/settings_screen.dart +++ b/filcnaplo_mobile_ui/lib/screens/settings/settings_screen.dart @@ -54,6 +54,9 @@ class _SettingsScreenState extends State int devmodeCountdown = 3; bool __ss = false; // secret settings + late Future futureRelease = + Provider.of(context).installedVersion(); + late UserProvider user; late UpdateProvider updateProvider; late SettingsProvider settings; @@ -150,6 +153,7 @@ class _SettingsScreenState extends State @override void initState() { super.initState(); + futureRelease = Provider.of(context).installedVersion(); _hideContainersController = AnimationController( vsync: this, duration: const Duration(milliseconds: 200)); } @@ -877,9 +881,36 @@ class _SettingsScreenState extends State top: false, child: Center( child: GestureDetector( - child: const Panel( - title: Text("v" + - String.fromEnvironment("APPVER", defaultValue: "?"))), + child: FutureBuilder( + future: futureRelease, + builder: (context, release) { + if (release.hasData) { + return DefaultTextStyle( + style: Theme.of(context) + .textTheme + .titleMedium! + .copyWith( + fontWeight: FontWeight.w600, + color: AppColors.of(context) + .text + .withOpacity(0.65)), + child: Text("v${release.data!['version']}"), + ); + } else { + return DefaultTextStyle( + style: Theme.of(context) + .textTheme + .titleMedium! + .copyWith( + fontWeight: FontWeight.w600, + color: AppColors.of(context) + .text + .withOpacity(0.65)), + child: const Text("v?"), + ); + } + }, + ), onTap: () { if (devmodeCountdown > 0) { ScaffoldMessenger.of(context).showSnackBar(SnackBar( diff --git a/filcnaplo_mobile_ui/lib/screens/settings/settings_screen.i18n.dart b/filcnaplo_mobile_ui/lib/screens/settings/settings_screen.i18n.dart index cfe0e74..b2b9ff6 100755 --- a/filcnaplo_mobile_ui/lib/screens/settings/settings_screen.i18n.dart +++ b/filcnaplo_mobile_ui/lib/screens/settings/settings_screen.i18n.dart @@ -41,7 +41,8 @@ extension SettingsLocalization on String { "done": "Done", "reset": "Reset", "open": "Open", - "data_collected": "Data collected: Platform (eg. Android), App version (eg. 3.0.0), Unique Install Identifier", + "data_collected": + "Data collected: Platform (eg. Android), App version (eg. 3.0.0), Unique Install Identifier", "Analytics": "Analytics", "Anonymous Usage Analytics": "Anonymous Usage Analytics", "graph_class_avg": "Class average on graph", @@ -92,7 +93,7 @@ extension SettingsLocalization on String { "about": "Névjegy", "supporters": "Támogatók", "privacy": "Adatvédelmi irányelvek", - "licenses": "Licenszek", + "licenses": "Licencek", "vibrate": "Rezgés", "voff": "Kikapcsolás", "vlight": "Alacsony", @@ -102,7 +103,8 @@ extension SettingsLocalization on String { "done": "Kész", "reset": "Visszaállítás", "open": "Megnyitás", - "data_collected": "Gyűjtött adat: Platform (pl. Android), App verzió (pl. 3.0.0), Egyedi telepítési azonosító", + "data_collected": + "Gyűjtött adat: Platform (pl. Android), App verzió (pl. 3.0.0), Egyedi telepítési azonosító", "Analytics": "Analitika", "Anonymous Usage Analytics": "Névtelen használati analitika", "graph_class_avg": "Osztályátlag a grafikonon", @@ -163,7 +165,8 @@ extension SettingsLocalization on String { "done": "Fertig", "reset": "Zurücksetzen", "open": "Öffnen", - "data_collected": "Erhobene Daten: Plattform (z.B. Android), App version (z.B. 3.0.0), Eindeutige Installationskennung", + "data_collected": + "Erhobene Daten: Plattform (z.B. Android), App version (z.B. 3.0.0), Eindeutige Installationskennung", "Analytics": "Analytik", "Anonymous Usage Analytics": "Anonyme Nutzungsanalyse", "graph_class_avg": "Klassendurchschnitt in der Grafik", diff --git a/filcnaplo_mobile_ui/pubspec.yaml b/filcnaplo_mobile_ui/pubspec.yaml index 0f76c28..f27fbd7 100755 --- a/filcnaplo_mobile_ui/pubspec.yaml +++ b/filcnaplo_mobile_ui/pubspec.yaml @@ -39,6 +39,7 @@ dependencies: flutter_svg: ^1.1.6 background_fetch: ^1.1.5 wtf_sliding_sheet: ^1.0.0 + package_info_plus: ^3.1.2 dev_dependencies: flutter_lints: ^1.0.0 diff --git a/filcnaplo_premium/lib/ui/mobile/flutter_colorpicker/colorpicker.dart b/filcnaplo_premium/lib/ui/mobile/flutter_colorpicker/colorpicker.dart index efafd0f..ba3838e 100644 --- a/filcnaplo_premium/lib/ui/mobile/flutter_colorpicker/colorpicker.dart +++ b/filcnaplo_premium/lib/ui/mobile/flutter_colorpicker/colorpicker.dart @@ -13,10 +13,10 @@ import 'package:filcnaplo_premium/ui/mobile/flutter_colorpicker/block_picker.dar import 'package:filcnaplo_premium/ui/mobile/flutter_colorpicker/palette.dart'; import 'package:filcnaplo_premium/ui/mobile/flutter_colorpicker/utils.dart'; import 'package:filcnaplo_premium/ui/mobile/settings/theme.dart'; +import 'package:filcnaplo_premium/ui/mobile/settings/theme.i18n.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:filcnaplo/theme/colors/colors.dart'; -import 'package:filcnaplo_mobile_ui/common/widgets/custom_switch.dart'; class FilcColorPicker extends StatefulWidget { const FilcColorPicker({ @@ -29,9 +29,16 @@ class FilcColorPicker extends StatefulWidget { this.onHsvColorChanged, this.paletteType = PaletteType.hsvWithHue, this.enableAlpha = true, - @Deprecated('Use empty list in [labelTypes] to disable label.') this.showLabel = true, - this.labelTypes = const [ColorLabelType.rgb, ColorLabelType.hsv, ColorLabelType.hsl], - @Deprecated('Use Theme.of(context).textTheme.bodyText1 & 2 to alter text style.') this.labelTextStyle, + @Deprecated('Use empty list in [labelTypes] to disable label.') + this.showLabel = true, + this.labelTypes = const [ + ColorLabelType.rgb, + ColorLabelType.hsv, + ColorLabelType.hsl + ], + @Deprecated( + 'Use Theme.of(context).textTheme.bodyText1 & 2 to alter text style.') + this.labelTextStyle, this.displayThumbColor = false, this.portraitOnly = false, this.colorPickerWidth = 300.0, @@ -75,7 +82,9 @@ class _FilcColorPickerState extends State { @override void initState() { - currentHsvColor = (widget.pickerHsvColor != null) ? widget.pickerHsvColor as HSVColor : HSVColor.fromColor(widget.pickerColor); + currentHsvColor = (widget.pickerHsvColor != null) + ? widget.pickerHsvColor as HSVColor + : HSVColor.fromColor(widget.pickerColor); // If there's no initial text in `hexInputController`, if (widget.hexInputController?.text.isEmpty == true) { // set it to the current's color HEX value. @@ -95,7 +104,9 @@ class _FilcColorPickerState extends State { @override void didUpdateWidget(FilcColorPicker oldWidget) { super.didUpdateWidget(oldWidget); - currentHsvColor = (widget.pickerHsvColor != null) ? widget.pickerHsvColor as HSVColor : HSVColor.fromColor(widget.pickerColor); + currentHsvColor = (widget.pickerHsvColor != null) + ? widget.pickerHsvColor as HSVColor + : HSVColor.fromColor(widget.pickerColor); } void colorPickerTextInputListener() { @@ -104,14 +115,17 @@ class _FilcColorPickerState extends State { if (widget.hexInputController == null) return; // If a user is inserting/typing any text — try to get the color value from it, // and interpret its transparency, dependent on the widget's settings. - final Color? color = colorFromHex(widget.hexInputController!.text, enableAlpha: widget.enableAlpha); + final Color? color = colorFromHex(widget.hexInputController!.text, + enableAlpha: widget.enableAlpha); // If it's the valid color: if (color != null) { // set it as the current color and setState(() => currentHsvColor = HSVColor.fromColor(color)); // notify with a callback. widget.onColorChanged(color); - if (widget.onHsvColorChanged != null) widget.onHsvColorChanged!(currentHsvColor); + if (widget.onHsvColorChanged != null) { + widget.onHsvColorChanged!(currentHsvColor); + } } } @@ -127,17 +141,24 @@ class _FilcColorPickerState extends State { currentHsvColor, (HSVColor color) { // Update text in `hexInputController` if provided. - widget.hexInputController?.text = colorToHex(color.toColor(), enableAlpha: widget.enableAlpha); + widget.hexInputController?.text = + colorToHex(color.toColor(), enableAlpha: widget.enableAlpha); setState(() => currentHsvColor = color); widget.onColorChanged(currentHsvColor.toColor()); - if (widget.onHsvColorChanged != null) widget.onHsvColorChanged!(currentHsvColor); + if (widget.onHsvColorChanged != null) { + widget.onHsvColorChanged!(currentHsvColor); + } }, () => widget.onColorChangeEnd(currentHsvColor.toColor()), (p) { ScaffoldMessenger.of(context).clearSnackBars(); ScaffoldMessenger.of(context).showSnackBar(SnackBar( - content: Text("Move the ${p == 0 ? 'Saturation (second)' : 'Value (third)'} slider first.", - textAlign: TextAlign.center, style: TextStyle(color: AppColors.of(context).text, fontWeight: FontWeight.w600)), + content: Text( + "Move the ${p == 0 ? 'Saturation (second)' : 'Value (third)'} slider first.", + textAlign: TextAlign.center, + style: TextStyle( + color: AppColors.of(context).text, + fontWeight: FontWeight.w600)), backgroundColor: AppColors.of(context).background)); }, displayThumbColor: widget.displayThumbColor, @@ -146,15 +167,19 @@ class _FilcColorPickerState extends State { void onColorChanging(HSVColor color) { // Update text in `hexInputController` if provided. - widget.hexInputController?.text = colorToHex(color.toColor(), enableAlpha: widget.enableAlpha); + widget.hexInputController?.text = + colorToHex(color.toColor(), enableAlpha: widget.enableAlpha); setState(() => currentHsvColor = color); widget.onColorChanged(currentHsvColor.toColor()); - if (widget.onHsvColorChanged != null) widget.onHsvColorChanged!(currentHsvColor); + if (widget.onHsvColorChanged != null) { + widget.onHsvColorChanged!(currentHsvColor); + } } @override Widget build(BuildContext context) { - if (MediaQuery.of(context).orientation == Orientation.portrait || widget.portraitOnly) { + if (MediaQuery.of(context).orientation == Orientation.portrait || + widget.portraitOnly) { return Column( children: [ if (widget.colorMode != CustomColorMode.theme) @@ -198,7 +223,9 @@ class _FilcColorPickerState extends State { (Color color) { setState(() => currentHsvColor = HSVColor.fromColor(color)); widget.onColorChanged(currentHsvColor.toColor()); - if (widget.onHsvColorChanged != null) widget.onHsvColorChanged!(currentHsvColor); + if (widget.onHsvColorChanged != null) { + widget.onHsvColorChanged!(currentHsvColor); + } }, enableAlpha: false, embeddedText: false, @@ -211,26 +238,42 @@ class _FilcColorPickerState extends State { layoutBuilder: (context, colors, child) { return GridView.count( shrinkWrap: true, - crossAxisCount: widget.colorMode == CustomColorMode.theme ? 2 : 1, + crossAxisCount: + widget.colorMode == CustomColorMode.theme ? 2 : 1, scrollDirection: Axis.horizontal, crossAxisSpacing: 15, physics: const BouncingScrollPhysics(), mainAxisSpacing: 15, - padding: const EdgeInsets.symmetric(horizontal: 12.0, vertical: 8.0), - children: List.generate(colors.toSet().length + (widget.colorMode == CustomColorMode.theme ? 1 : 0), (index) { + padding: const EdgeInsets.symmetric( + horizontal: 12.0, vertical: 8.0), + children: List.generate( + colors.toSet().length + + (widget.colorMode == CustomColorMode.theme ? 1 : 0), + (index) { if (widget.colorMode == CustomColorMode.theme) { if (index == 0) { return GestureDetector( - onTap: () => widget.onColorChangeEnd(Colors.transparent, adaptive: true), - child: ColorIndicator(HSVColor.fromColor(const Color.fromARGB(255, 255, 238, 177)), - icon: CupertinoIcons.wand_stars, currentHsvColor: currentHsvColor, width: 30, height: 30, adaptive: true), + onTap: () => widget.onColorChangeEnd( + Colors.transparent, + adaptive: true), + child: ColorIndicator( + HSVColor.fromColor( + const Color.fromARGB(255, 255, 238, 177)), + icon: CupertinoIcons.wand_stars, + currentHsvColor: currentHsvColor, + width: 30, + height: 30, + adaptive: true), ); } index--; } return GestureDetector( onTap: () => widget.onColorChangeEnd(colors[index]), - child: ColorIndicator(HSVColor.fromColor(colors[index]), currentHsvColor: currentHsvColor, width: 30, height: 30), + child: ColorIndicator(HSVColor.fromColor(colors[index]), + currentHsvColor: currentHsvColor, + width: 30, + height: 30), ); }), ); @@ -249,22 +292,25 @@ class _FilcColorPickerState extends State { isAdvancedView = !isAdvancedView; }), child: Padding( - padding: const EdgeInsets.only(left: 8.0, right: 8.0, top: 8.0), + padding: + const EdgeInsets.only(left: 8.0, right: 8.0, top: 8.0), child: Row( mainAxisAlignment: MainAxisAlignment.center, mainAxisSize: MainAxisSize.min, children: [ - CustomSwitch( + Switch( onChanged: (v) => setState(() => isAdvancedView = v), value: isAdvancedView, ), const SizedBox(width: 12.0), Text( - "Advanced", + "advanced".i18n, style: TextStyle( fontWeight: FontWeight.w600, fontSize: 16.0, - color: AppColors.of(context).text.withOpacity(isAdvancedView ? 1.0 : .5), + color: AppColors.of(context) + .text + .withOpacity(isAdvancedView ? 1.0 : .5), ), ), ], @@ -285,7 +331,8 @@ class _FilcColorPickerState extends State { const SizedBox(width: 20.0), GestureDetector( onTap: () => setState(() { - if (widget.onHistoryChanged != null && !colorHistory.contains(currentHsvColor.toColor())) { + if (widget.onHistoryChanged != null && + !colorHistory.contains(currentHsvColor.toColor())) { colorHistory.add(currentHsvColor.toColor()); widget.onHistoryChanged!(colorHistory); } @@ -295,7 +342,11 @@ class _FilcColorPickerState extends State { Column( children: [ //SizedBox(height: 40.0, width: 260.0, child: sliderByPaletteType()), - if (widget.enableAlpha) SizedBox(height: 40.0, width: 260.0, child: colorPickerSlider(TrackType.alpha)), + if (widget.enableAlpha) + SizedBox( + height: 40.0, + width: 260.0, + child: colorPickerSlider(TrackType.alpha)), ], ), const SizedBox(width: 10.0), @@ -305,26 +356,30 @@ class _FilcColorPickerState extends State { SizedBox( width: widget.colorPickerWidth, height: 50, - child: ListView(scrollDirection: Axis.horizontal, children: [ - for (Color color in colorHistory) - Padding( - key: Key(color.hashCode.toString()), - padding: const EdgeInsets.fromLTRB(15, 18, 0, 0), - child: Center( - child: GestureDetector( - onTap: () => onColorChanging(HSVColor.fromColor(color)), - onLongPress: () { - if (colorHistory.remove(color)) { - widget.onHistoryChanged!(colorHistory); - setState(() {}); - } - }, - child: ColorIndicator(HSVColor.fromColor(color), width: 30, height: 30), + child: ListView( + scrollDirection: Axis.horizontal, + children: [ + for (Color color in colorHistory) + Padding( + key: Key(color.hashCode.toString()), + padding: const EdgeInsets.fromLTRB(15, 18, 0, 0), + child: Center( + child: GestureDetector( + onTap: () => + onColorChanging(HSVColor.fromColor(color)), + onLongPress: () { + if (colorHistory.remove(color)) { + widget.onHistoryChanged!(colorHistory); + setState(() {}); + } + }, + child: ColorIndicator(HSVColor.fromColor(color), + width: 30, height: 30), + ), + ), ), - ), - ), - const SizedBox(width: 15), - ]), + const SizedBox(width: 15), + ]), ), const SizedBox(height: 20.0), if (widget.hexInputBar) @@ -333,7 +388,9 @@ class _FilcColorPickerState extends State { (Color color) { setState(() => currentHsvColor = HSVColor.fromColor(color)); widget.onColorChanged(currentHsvColor.toColor()); - if (widget.onHsvColorChanged != null) widget.onHsvColorChanged!(currentHsvColor); + if (widget.onHsvColorChanged != null) { + widget.onHsvColorChanged!(currentHsvColor); + } }, enableAlpha: widget.enableAlpha, embeddedText: false, diff --git a/filcnaplo_premium/lib/ui/mobile/settings/theme.dart b/filcnaplo_premium/lib/ui/mobile/settings/theme.dart index c0658f4..d64efe0 100644 --- a/filcnaplo_premium/lib/ui/mobile/settings/theme.dart +++ b/filcnaplo_premium/lib/ui/mobile/settings/theme.dart @@ -24,12 +24,15 @@ class PremiumCustomAccentColorSetting extends StatefulWidget { const PremiumCustomAccentColorSetting({Key? key}) : super(key: key); @override - State createState() => _PremiumCustomAccentColorSettingState(); + State createState() => + _PremiumCustomAccentColorSettingState(); } -enum CustomColorMode { theme, accent, background, highlight } +enum CustomColorMode { theme, saved, accent, background, highlight } -class _PremiumCustomAccentColorSettingState extends State with TickerProviderStateMixin { +class _PremiumCustomAccentColorSettingState + extends State + with TickerProviderStateMixin { late final SettingsProvider settings; bool colorSelection = false; bool customColorMenu = false; @@ -41,42 +44,48 @@ class _PremiumCustomAccentColorSettingState extends State backgroundAnimation = Tween(begin: 0, end: 1).animate( + late final Animation backgroundAnimation = + Tween(begin: 0, end: 1).animate( CurvedAnimation( parent: _openAnimController, curve: const Interval(0.2, 1.0, curve: Curves.easeInOut), ), ); - late final Animation fullPageAnimation = Tween(begin: 0, end: 1).animate( + late final Animation fullPageAnimation = + Tween(begin: 0, end: 1).animate( CurvedAnimation( parent: _openAnimController, curve: const Interval(0.0, 0.6, curve: Curves.easeInOut), ), ); - late final Animation backContainerAnimation = Tween(begin: 100, end: 0).animate( + late final Animation backContainerAnimation = + Tween(begin: 100, end: 0).animate( CurvedAnimation( parent: _openAnimController, curve: const Interval(0.0, 0.9, curve: Curves.easeInOut), ), ); - late final Animation backContentAnimation = Tween(begin: 100, end: 0).animate( + late final Animation backContentAnimation = + Tween(begin: 100, end: 0).animate( CurvedAnimation( parent: _openAnimController, curve: const Interval(0.2, 1.0, curve: Curves.easeInOut), ), ); - late final Animation backContentScaleAnimation = Tween(begin: 0.8, end: 0.9).animate( + late final Animation backContentScaleAnimation = + Tween(begin: 0.8, end: 0.9).animate( CurvedAnimation( parent: _openAnimController, curve: const Interval(0.45, 1.0, curve: Curves.easeInOut), ), ); - late final Animation pickerContainerAnimation = Tween(begin: 0, end: 1).animate( + late final Animation pickerContainerAnimation = + Tween(begin: 0, end: 1).animate( CurvedAnimation( parent: _openAnimController, curve: const Interval(0.25, 0.8, curve: Curves.easeInOut), @@ -90,7 +99,8 @@ class _PremiumCustomAccentColorSettingState extends State(context, listen: false); - _openAnimController = AnimationController(vsync: this, duration: const Duration(milliseconds: 750)); + _openAnimController = AnimationController( + vsync: this, duration: const Duration(milliseconds: 750)); _openAnimController.forward(); } @@ -102,13 +112,20 @@ class _PremiumCustomAccentColorSettingState extends State(context, listen: false).changeTheme(mode, updateNavbarColor: false); + Provider.of(context, listen: false) + .changeTheme(mode, updateNavbarColor: false); } - Color? getCustomColor() { + dynamic getCustomColor() { switch (colorMode) { case CustomColorMode.theme: return accentColorMap[settings.accentColor]; + case CustomColorMode.saved: + return [ + settings.customBackgroundColor, + settings.customHighlightColor, + settings.customAccentColor + ]; case CustomColorMode.background: return settings.customBackgroundColor; case CustomColorMode.highlight: @@ -118,16 +135,30 @@ class _PremiumCustomAccentColorSettingState extends State accentColorMap[element] == v, orElse: () => AccentColor.filc), store: store); - settings.update(customBackgroundColor: AppColors.of(context).background, store: store); - settings.update(customHighlightColor: AppColors.of(context).highlight, store: store); + accentColor: accentColorMap.keys.firstWhere( + (element) => accentColorMap[element] == v, + orElse: () => AccentColor.filc), + store: store); + settings.update( + customBackgroundColor: AppColors.of(context).background, + store: store); + settings.update( + customHighlightColor: AppColors.of(context).highlight, + store: store); settings.update(customAccentColor: v, store: store); break; + case CustomColorMode.saved: + settings.update(customBackgroundColor: v[0], store: store); + settings.update(customHighlightColor: v[1], store: store); + settings.update(customAccentColor: v[3], store: store); + break; case CustomColorMode.background: settings.update(customBackgroundColor: v, store: store); break; @@ -142,14 +173,19 @@ class _PremiumCustomAccentColorSettingState extends State(context).hasScope(PremiumScopes.customColors); - bool isBackgroundDifferent = Theme.of(context).colorScheme.background != AppColors.of(context).background; + bool hasAccess = Provider.of(context) + .hasScope(PremiumScopes.customColors); + bool isBackgroundDifferent = Theme.of(context).colorScheme.background != + AppColors.of(context).background; - ThemeMode currentTheme = Theme.of(context).brightness == Brightness.light ? ThemeMode.light : ThemeMode.dark; + ThemeMode currentTheme = Theme.of(context).brightness == Brightness.light + ? ThemeMode.light + : ThemeMode.dark; return WillPopScope( onWillPop: () async { - Provider.of(context, listen: false).changeTheme(settings.theme, updateNavbarColor: true); + Provider.of(context, listen: false) + .changeTheme(settings.theme, updateNavbarColor: true); return true; }, child: AnimatedBuilder( @@ -158,7 +194,9 @@ class _PremiumCustomAccentColorSettingState extends StateKedves Felhasználó!


A prémium vásárlásakor kapott filctollal 90%-al több esély van jó jegyek szerzésére.

", - "targy": "Filctoll használati útmutató", + "targy": + "Filctoll használati útmutató", "statusz": { "azonosito": 2, "kod": "KIKULDVE", @@ -430,7 +521,10 @@ class _PremiumCustomAccentColorSettingState extends State