From f547bf8cc0cfc90413c3179f18a9e5e18aa44b50 Mon Sep 17 00:00:00 2001 From: RainVisitor Date: Sun, 28 Jul 2019 13:03:56 +0800 Subject: [PATCH 01/24] Add flutter macOS project --- macos/.gitignore | 6 + macos/AppDelegate.swift | 25 + .../AppIcon.appiconset/Contents.json | 58 ++ macos/Base.lproj/MainMenu.xib | 338 +++++++++++ macos/Configs/Debug.xcconfig | 2 + macos/Configs/Release.xcconfig | 2 + macos/Configs/Warnings.xcconfig | 13 + macos/ExampleWindow.swift | 30 + macos/Flutter/Flutter-Debug.xcconfig | 2 + macos/Flutter/Flutter-Release.xcconfig | 2 + macos/Flutter/Generated.xcconfig | 6 + macos/Flutter/GeneratedPluginRegistrant.swift | 9 + macos/Info.plist | 32 ++ macos/Podfile | 84 +++ macos/Runner.xcodeproj/project.pbxproj | 543 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 101 ++++ .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + 20 files changed, 1286 insertions(+) create mode 100644 macos/.gitignore create mode 100644 macos/AppDelegate.swift create mode 100644 macos/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 macos/Base.lproj/MainMenu.xib create mode 100644 macos/Configs/Debug.xcconfig create mode 100644 macos/Configs/Release.xcconfig create mode 100644 macos/Configs/Warnings.xcconfig create mode 100644 macos/ExampleWindow.swift create mode 100644 macos/Flutter/Flutter-Debug.xcconfig create mode 100644 macos/Flutter/Flutter-Release.xcconfig create mode 100644 macos/Flutter/Generated.xcconfig create mode 100644 macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 macos/Info.plist create mode 100644 macos/Podfile create mode 100644 macos/Runner.xcodeproj/project.pbxproj create mode 100644 macos/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/macos/.gitignore b/macos/.gitignore new file mode 100644 index 00000000..7c8c39de --- /dev/null +++ b/macos/.gitignore @@ -0,0 +1,6 @@ +xcuserdata + +# Generated by flutter tooling as needed. +Flutter/ephemeral/ +# Created by CocoaPods for plugins. +Pods/ diff --git a/macos/AppDelegate.swift b/macos/AppDelegate.swift new file mode 100644 index 00000000..bdcc151b --- /dev/null +++ b/macos/AppDelegate.swift @@ -0,0 +1,25 @@ +// Copyright 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Cocoa + +@NSApplicationMain +class AppDelegate: NSObject, NSApplicationDelegate { + @IBOutlet weak var window: NSWindow! + + func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } +} + diff --git a/macos/Assets.xcassets/AppIcon.appiconset/Contents.json b/macos/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..2db2b1c7 --- /dev/null +++ b/macos/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,58 @@ +{ + "images" : [ + { + "idiom" : "mac", + "size" : "16x16", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "16x16", + "scale" : "2x" + }, + { + "idiom" : "mac", + "size" : "32x32", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "32x32", + "scale" : "2x" + }, + { + "idiom" : "mac", + "size" : "128x128", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "128x128", + "scale" : "2x" + }, + { + "idiom" : "mac", + "size" : "256x256", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "256x256", + "scale" : "2x" + }, + { + "idiom" : "mac", + "size" : "512x512", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "512x512", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/macos/Base.lproj/MainMenu.xib b/macos/Base.lproj/MainMenu.xib new file mode 100644 index 00000000..0240e48d --- /dev/null +++ b/macos/Base.lproj/MainMenu.xib @@ -0,0 +1,338 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/macos/Configs/Debug.xcconfig b/macos/Configs/Debug.xcconfig new file mode 100644 index 00000000..41b74956 --- /dev/null +++ b/macos/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/macos/Configs/Release.xcconfig b/macos/Configs/Release.xcconfig new file mode 100644 index 00000000..2a7dc01d --- /dev/null +++ b/macos/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/macos/Configs/Warnings.xcconfig b/macos/Configs/Warnings.xcconfig new file mode 100644 index 00000000..42bcbf47 --- /dev/null +++ b/macos/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/macos/ExampleWindow.swift b/macos/ExampleWindow.swift new file mode 100644 index 00000000..633dfc1d --- /dev/null +++ b/macos/ExampleWindow.swift @@ -0,0 +1,30 @@ +// Copyright 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Cocoa +import FlutterMacOS + +class ExampleWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FLEViewController.init() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} + diff --git a/macos/Flutter/Flutter-Debug.xcconfig b/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 00000000..785633d3 --- /dev/null +++ b/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1,2 @@ +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/macos/Flutter/Flutter-Release.xcconfig b/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 00000000..5fba960c --- /dev/null +++ b/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1,2 @@ +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/macos/Flutter/Generated.xcconfig b/macos/Flutter/Generated.xcconfig new file mode 100644 index 00000000..b59a4a68 --- /dev/null +++ b/macos/Flutter/Generated.xcconfig @@ -0,0 +1,6 @@ +// This is a generated file; do not edit or check into version control. +FLUTTER_ROOT=/Users/rainvisitor/development/flutter +FLUTTER_APPLICATION_PATH=/Users/rainvisitor/development/flutter-desktop-embedding/example +FLUTTER_BUILD_DIR=build +SYMROOT=/Users/rainvisitor/development/flutter-desktop-embedding/example/build/macos/Build/Products +FLUTTER_FRAMEWORK_DIR=/Users/rainvisitor/development/flutter/bin/cache/artifacts/engine/darwin-x64 diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 00000000..58425bba --- /dev/null +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,9 @@ +// +// Generated file. Do not edit. +// +import Foundation +import FlutterMacOS + + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { +} diff --git a/macos/Info.plist b/macos/Info.plist new file mode 100644 index 00000000..515b4ac7 --- /dev/null +++ b/macos/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + Copyright © 2018 Google LLC. All rights reserved. + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/macos/Podfile b/macos/Podfile new file mode 100644 index 00000000..45f32620 --- /dev/null +++ b/macos/Podfile @@ -0,0 +1,84 @@ +platform :osx, '10.13' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + # TODO: Add Profile support to projects. + #'Profile' => :release, + 'Release' => :release, +} + +def parse_KV_file(file, separator='=') + file_abs_path = File.expand_path(file) + if !File.exists? file_abs_path + return []; + end + pods_ary = [] + skip_line_start_symbols = ["#", "/"] + File.foreach(file_abs_path) { |line| + next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } + plugin = line.split(pattern=separator) + if plugin.length == 2 + podname = plugin[0].strip() + path = plugin[1].strip() + podpath = File.expand_path("#{path}", file_abs_path) + pods_ary.push({:name => podname, :path => podpath}); + else + puts "Invalid plugin specification: #{line}" + end + } + return pods_ary +end + +def pubspec_supports_macos(file) + file_abs_path = File.expand_path(file) + if !File.exists? file_abs_path + return false; + end + File.foreach(file_abs_path) { |line| + # TODO(stuartmorgan): Use formal platform declaration once it exists, + # see https://github.com/flutter/flutter/issues/33597. + return true if line =~ /^\s*macosPrefix:/ + } + return false +end + +target 'Runner' do + use_frameworks! + + # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock + # referring to absolute paths on developers' machines. + ephemeral_dir = File.join('Flutter', 'ephemeral') + symlink_dir = File.join(ephemeral_dir, '.symlinks') + symlink_plugins_dir = File.join(symlink_dir, 'plugins') + system("rm -rf #{symlink_dir}") + system("mkdir -p #{symlink_plugins_dir}") + + # Flutter Pods + generated_xcconfig = parse_KV_file(File.join(ephemeral_dir, 'Flutter-Generated.xcconfig')) + if generated_xcconfig.empty? + puts "Flutter-Generated.xcconfig must exist. If you're running pod install manually, make sure flutter packages get is executed first." + end + generated_xcconfig.map { |p| + if p[:name] == 'FLUTTER_FRAMEWORK_DIR' + symlink = File.join(symlink_dir, 'flutter') + File.symlink(File.dirname(p[:path]), symlink) + pod 'FlutterMacOS', :path => File.join(symlink, File.basename(p[:path])) + end + } + + # Plugin Pods + plugin_pods = parse_KV_file('../.flutter-plugins') + plugin_pods.map { |p| + symlink = File.join(symlink_plugins_dir, p[:name]) + File.symlink(p[:path], symlink) + if pubspec_supports_macos(File.join(symlink, 'pubspec.yaml')) + pod p[:name], :path => File.join(symlink, 'macos') + end + } +end + +# Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system. +install! 'cocoapods', :disable_input_output_paths => true diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 00000000..f8438fad --- /dev/null +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,543 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 48; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Build Flutter Bundle */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Build Flutter Bundle" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Build Flutter Bundle"; + 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 /* ExampleWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* ExampleWindow.swift */; }; + 33CC112F204626C80003C045 /* flutter_assets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC112C20461AD40003C045 /* flutter_assets */; }; + 33D1A10422148B71006C7A3E /* FlutterMacOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 33D1A10322148B71006C7A3E /* FlutterMacOS.framework */; }; + 33D1A10522148B93006C7A3E /* FlutterMacOS.framework in Bundle Framework */ = {isa = PBXBuildFile; fileRef = 33D1A10322148B71006C7A3E /* FlutterMacOS.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 3B2398DFB6ED470D0AE9ACC5 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E976979D3EC1F83E826671AA /* 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 = ( + 33D1A10522148B93006C7A3E /* FlutterMacOS.framework in Bundle Framework */, + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Warnings.xcconfig; path = Configs/Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* Flutter Desktop Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Flutter Desktop Example.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; path = 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; path = Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* ExampleWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExampleWindow.swift; sourceTree = ""; }; + 33CC112C20461AD40003C045 /* flutter_assets */ = {isa = PBXFileReference; lastKnownFileType = folder; name = flutter_assets; path = ../build/flutter_assets; 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 = ""; }; + 33D1A10322148B71006C7A3E /* FlutterMacOS.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FlutterMacOS.framework; path = Flutter/ephemeral/FlutterMacOS.framework; sourceTree = SOURCE_ROOT; }; + 3791C254B5D15F61597672EC /* 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; name = Release.xcconfig; path = Configs/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Configs/Debug.xcconfig; sourceTree = ""; }; + E976979D3EC1F83E826671AA /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F6D1C7225F9B1694A8A75E31 /* 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 = ( + 33D1A10422148B71006C7A3E /* FlutterMacOS.framework in Frameworks */, + 3B2398DFB6ED470D0AE9ACC5 /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 121BD0F826E3339928FD5815 /* Frameworks */ = { + isa = PBXGroup; + children = ( + E976979D3EC1F83E826671AA /* Pods_Runner.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + name = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* ExampleWindow.swift */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 33CC10EE2044A3C60003C045 /* Products */, + 3C590732CA5578AFB3561924 /* Pods */, + 121BD0F826E3339928FD5815 /* Frameworks */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* Flutter Desktop Example.app */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + 33CC112C20461AD40003C045 /* flutter_assets */, + ); + name = Resources; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + 33D1A10322148B71006C7A3E /* FlutterMacOS.framework */, + ); + path = Flutter; + sourceTree = ""; + }; + 3C590732CA5578AFB3561924 /* Pods */ = { + isa = PBXGroup; + children = ( + 3791C254B5D15F61597672EC /* Pods-Runner.debug.xcconfig */, + F6D1C7225F9B1694A8A75E31 /* Pods-Runner.release.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + F8478360E5B25ECFF8849625 /* [CP] Check Pods Manifest.lock */, + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + 45584FC44CA4E8AE5653DDB4 /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = "Flutter Desktop Example"; + productReference = 33CC10ED2044A3C60003C045 /* Flutter Desktop Example.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 0930; + ORGANIZATIONNAME = "Google LLC"; + TargetAttributes = { + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 0920; + ProvisioningStyle = Manual; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Automatic; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 8.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 33CC111A2044C6BA0003C045 /* Build Flutter Bundle */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + 33CC112F204626C80003C045 /* flutter_assets 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\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_build_flutter_assets.sh\n"; + }; + 45584FC44CA4E8AE5653DDB4 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + F8478360E5B25ECFF8849625 /* [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 /* ExampleWindow.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 /* Build Flutter Bundle */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 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; + 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; + 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_OPTIMIZATION_LEVEL = "-Owholemodule"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3791C254B5D15F61597672EC /* Pods-Runner.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_STYLE = Manual; + COMBINE_HIDPI_IMAGES = YES; + DEVELOPMENT_TEAM = ""; + FRAMEWORK_SEARCH_PATHS = ( + "$PROJECT_DIR/Flutter/ephemeral", + "$(inherited)", + ); + INFOPLIST_FILE = Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.google.FlutterEmbedderMacExample.FlutterDesktopExample; + PRODUCT_NAME = "Flutter Desktop Example"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F6D1C7225F9B1694A8A75E31 /* Pods-Runner.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_STYLE = Manual; + COMBINE_HIDPI_IMAGES = YES; + DEVELOPMENT_TEAM = ""; + FRAMEWORK_SEARCH_PATHS = ( + "$PROJECT_DIR/Flutter/ephemeral", + "$(inherited)", + ); + INFOPLIST_FILE = Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.google.FlutterEmbedderMacExample.FlutterDesktopExample; + PRODUCT_NAME = "Flutter Desktop Example"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 4.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + 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 */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Build Flutter Bundle" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/macos/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/macos/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..764c74b8 --- /dev/null +++ b/macos/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 00000000..57774f08 --- /dev/null +++ b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/macos/Runner.xcworkspace/contents.xcworkspacedata b/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..21a3cc14 --- /dev/null +++ b/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + From bffd76e00f942b8f5ce2b80eb85be0b45d3fc437 Mon Sep 17 00:00:00 2001 From: RainVisitor Date: Sun, 28 Jul 2019 13:04:22 +0800 Subject: [PATCH 02/24] Add flutter web project --- web/index.html | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 web/index.html diff --git a/web/index.html b/web/index.html new file mode 100644 index 00000000..8056593c --- /dev/null +++ b/web/index.html @@ -0,0 +1,10 @@ + + + + + NKUST AP + + + + + From d50125d201d76fa5131b1ad3155dd6152a1f7ec2 Mon Sep 17 00:00:00 2001 From: RainVisitor Date: Sun, 28 Jul 2019 22:55:26 +0800 Subject: [PATCH 03/24] Update flutter macOS project app name and icon --- .../AppIcon.appiconset/Contents.json | 143 +++++++++++++++++- .../Icon-App-1024x1024@1x.png | Bin 0 -> 45964 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 732 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 1349 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 1999 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 1038 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 1974 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 2659 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 1349 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 2577 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 3730 bytes .../AppIcon.appiconset/Icon-App-57x57@1x.png | Bin 0 -> 1913 bytes .../AppIcon.appiconset/Icon-App-57x57@2x.png | Bin 0 -> 3492 bytes .../AppIcon.appiconset/Icon-App-60x60@1x.png | Bin 0 -> 1999 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 3730 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 5630 bytes .../AppIcon.appiconset/Icon-App-72x72@1x.png | Bin 0 -> 2309 bytes .../AppIcon.appiconset/Icon-App-72x72@2x.png | Bin 0 -> 4546 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 2460 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 4748 bytes .../AppIcon.appiconset/Icon-App-76x76@3x.png | Bin 0 -> 7311 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 5191 bytes .../Icon-Small-50x50@1x.png | Bin 0 -> 1699 bytes .../Icon-Small-50x50@2x.png | Bin 0 -> 3084 bytes .../AppIcon.appiconset/ItunesArtwork@2x.png | Bin 0 -> 45964 bytes macos/Base.lproj/MainMenu.xib | 12 +- macos/Flutter/GeneratedPluginRegistrant.swift | 2 + macos/Runner.xcodeproj/project.pbxproj | 29 ++-- .../xcshareddata/xcschemes/Runner.xcscheme | 8 +- 29 files changed, 169 insertions(+), 25 deletions(-) create mode 100644 macos/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 macos/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 macos/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 macos/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 macos/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 macos/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 macos/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 macos/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 macos/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 macos/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 macos/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png create mode 100644 macos/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png create mode 100644 macos/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png create mode 100644 macos/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 macos/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 macos/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png create mode 100644 macos/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png create mode 100644 macos/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 macos/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 macos/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png create mode 100644 macos/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 macos/Assets.xcassets/AppIcon.appiconset/Icon-Small-50x50@1x.png create mode 100644 macos/Assets.xcassets/AppIcon.appiconset/Icon-Small-50x50@2x.png create mode 100644 macos/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png diff --git a/macos/Assets.xcassets/AppIcon.appiconset/Contents.json b/macos/Assets.xcassets/AppIcon.appiconset/Contents.json index 2db2b1c7..9d0ecc78 100644 --- a/macos/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/macos/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,5 +1,76 @@ { "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "57x57", + "idiom" : "iphone", + "filename" : "Icon-App-57x57@1x.png", + "scale" : "1x" + }, + { + "size" : "57x57", + "idiom" : "iphone", + "filename" : "Icon-App-57x57@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" + }, { "idiom" : "mac", "size" : "16x16", @@ -46,8 +117,78 @@ "scale" : "1x" }, { - "idiom" : "mac", "size" : "512x512", + "idiom" : "mac", + "filename" : "ItunesArtwork@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "Icon-App-72x72@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "Icon-App-76x76@3x.png", + "scale" : "3x" + }, + { + "idiom" : "universal", + "filename" : "Icon-App-20x20@1x.png", + "unassigned" : true, + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "Icon-App-40x40@1x.png", + "unassigned" : true, + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "Icon-App-60x60@1x.png", + "unassigned" : true, + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "Icon-App-72x72@1x.png", + "unassigned" : true, + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "Icon-App-76x76@1x.png", + "unassigned" : true, + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "Icon-Small-50x50@1x.png", + "unassigned" : true, + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "Icon-App-76x76@2x.png", + "unassigned" : true, + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "Icon-App-83.5x83.5@2x.png", + "unassigned" : true, + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "Icon-Small-50x50@2x.png", + "unassigned" : true, "scale" : "2x" } ], diff --git a/macos/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/macos/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..e9a1b63e9d62405f7ee79f34d8ceb26178bd9ea9 GIT binary patch literal 45964 zcmcG$c~nzL_bwb86&qXWZl!5ZK}7^Xp%np@Aqt8D3Nnj;QJG{`5s>lFI5j9T35W_r-?q8L9)2fMrTppp^R5Xp{=YF1s+FRS`0oi-X56#0L(aI2Zdo?q9b$G_F2Y!gd zlPVh`^frYKmwmxsLOB1d^vf2)`$z=-eNDFQ9I4{}r04(FVg3K~NA24ywkoc?bsX!& z=k)5!C4Bhdnz=ZTsHmk!jJuaWZRhQ%b)&h zn=N>Y4C6lqd@I8Lb?>~$nG>~(a?*Wi=Kt{;eIBo9a|_N{o8^$0olr`)PW z&rf9OlY}kGD;w2BuKl_?yjSe1$=e@S=yehI5~H0Dw);k-5xt2#Zv2VF@~x-$rsjF)Ohu z-f4TT6(O~u;Y`I*T`T+6GLeZb=JxK_;=f(NQp{utkAD(5oV`Zuh=#T0Uv7Kyn{y}` zCAq(5ZnZ@}xx4;C2)uZ&y6OJaq@|KkDc%sn?fOYwE6VowU;8yea$CcnMtFy?Xnff{ zv|ZOFE(W3(#LoM!l*)UNQSyAh8Ro5p-d|sx*?&Pw*>OnVh#HA61g}ajtTQ>kW7mNS z%MZFAbk08RNHl#{TKN8ZzMhhl<2sw4x}`)8pF4JJ9rFt+S;7f_Z0Wb}w-jT$HSwnH zo0Q}4efhwV_$lts@Ka7s`61hF5;LEO9J+kc(P#2a)5Mne9aSqvuPvTt?l`hdkrMBe z)o#`PhkmSSLTpFo`HIR8_Me2SyRTPRn#{%>S4bFY} zHrUOn7OT0co|RbljU3&xa;eKla$xUX^B1mIoRgJZ`}e0W(`Ff175Tt7N!J?j_=q9{ zlYJUdi!U$P{X#hClJB`=lW}~s)1tV0@QYD*jigfkb3)hA$ztqnC_9odHdECddh|oT zXTalVit(Em0gsG)EiE2lXD?MCc9u`_6MI}{jgcSvnxS>7v_O{A+W3vt0lGK0%6V`t z@=xt03_Xss#YmS#`S%H3p3!N<&rD=qVoR6}FWsidR3+}-P*&2*hluX*9kZrpa=d3| z;=#|4*~z-I2?~ODezFlyBRuV?C4WSS_osYS{9Wg8@I}~FTSq78NPbCf$##Wy%&+-8x^JWpftp8g91NGT<~wQcUWDv6+L3(kf6ITnWOSV6rVQ49a}*! zqGXd0x0>TIZ-tNN-031y-A0Xh&3eL+$>|vnIyUR|Ib>2bbWFkIHCKvdPCug&?_>MT z{oY2sHE*-$2~&{}RKt7S(|Luv3fz0bf?rq6W!u!n3P#f#{a0&H5Vaq-sPl2D2gZw; z#H5nxNh%k4v2|5YIQw51z+v4|C+uwwQqHF4{}}AXBE)pAM*c)cn%j%96J|fsnG71q z#|is!qZXC_B2uD$&K>4`N1Bez7+G7%>~r)<%|^|t(yfciho7sGJt~|xM%XKD$T@B8 z{PtwXZ_R=ar$SPiNgOwIUhrUjEt-mLH?I-B?DoB8a8;zn5eT}6`}cDMHXEy#0>}0lw;RryA7ztm_Ry)3CB0o-m;+CqjwlC(mkCGxa%IX1vmG`T=CCc**hzH^ z^t{&FQ3_Ulz%~m=2#O*?Cvqw5lRZ%I2a^A&+YfOHvjQIK{ z)Rrwx(gfHd^*7FnZUX*_zRylJ!KpknbrfyV7dzJ+Cm8L~8AV6^=7RAqhkZ3Qza`{) z=D*08dANS6MWkc}eqvRgF=mr3_rLP+8Z`|(p%L#JzqmvzTF^q2=3JIM5Uyjuuo^V< zNZids>`B;X#3Cqs&j)CDxZJ%Ft+8ONp9((WSnoIBoG2<${Wv**!sIs=@F>_OSHW0anEd{@&WlgCGm$hd>&?_UznlI^S|uMW$}Neg#0{Y?K>J{ zWpD0f*hb>bA$~Txraq*F(x{U=bl6NpAilLo@{%!b;+D{98cOb5)H*an2@1G6ElaGN zbG^|l!2X26;hE#%WLspK>T^db)M~K)Gb-6$ZlRHsS2U-}b z<@p>Fe>ILLykpWFSFCV+=1MUpzrZrLJbkul=gL~t_oL!+lN@0u?a3|k^bTXGA`>d1-(6IfGQ*}B zp7c&+?oOs?*GA#gDm$1&E0+IMsL3Gf($K@DfTlky9&M&0=>;@2!MU$;02&vDOn5uY zmbNpGw)}wzjGu~j?GUytS)d~omu|=xCV4CKSdzvbk`{9b96EKQDM6E zxHtQ0VL{1pHX};r{QJH5QdK;nBTomuYUbC_-1x8IEP3NCmD(rzYT+)m;YqMRx_gqn z3K`yja4iBRpBAbpE0q`vTi+12esY$AmE_h=xeTdCQ@z%2ZhMoyFp9>R7SNF+r4qh# z`BZ*n)nZ&#d%7@utP_S01@O$!+*yq&-P|AL>a)2^lXPTza>Lox;nkH2JRc_CZ4Te@ zZ*E_J0cH&DFUF3#Sq&fY9gvT%@nTb7{H;T`qi$SW0T#w+wC5hZq%kD_e)){Rq|G90lS*eLh@Xx^RZQp{%3Kc4-^S4B2cFw zj4p2RXv%IL%>=zXO&o zz$8vZ37tSrIAxszB8S9mYgX_Z+Y?>;+)Iw`L2|+>%ECrXJ=n-#e&KFKCB^ADQ`~=! ziO;MN4pJZTmy2Y&;9gz-KDqk++DdkoXNP-{+P>ns?09F4Se@*QT`70LqrA-T`1YN8 zo+8Me&55e%=H9I9Z++VdYrmoF;3KrA55X2@~KH1%QY!pR) z(RrgU9AyDyWVO%r$aLSMclzOUc3X`7PO(2FMlnl9y1r$v3{=>p997K3CS0fQP|KV! z>z7qR^H8OQy$_}{sU)rSlPz|K7H{9Kw^VGBH}aswo!sF!=4*0&^)(mj`kQOfHUqZLFC;9`ipaN!jZEzL z#D7569#;t&cy2nnPiQM;yxMA6-{FegIyV)fcc;JQt>*p^s0!>)xg|1*_261?Chh+M z4HtV!9|MGrDCr1|&No5!qGDFm$qX}a^m$lRzF+(KYY05x!?oa|n;PX^!akaYOhX<5 z>0IKm4_TXqM{3w_Wuj0om)<+MgZ04Lj)G}+HVb% zb})d%MiQA=_7@TUFL*gyW~9U8?4e^9wgg$+>Hj+OT1;nl7mTwnL6BXkHCz}rty<=S z)i`0|hs9?Sgm2wm*I;lp$NuTX82Z8k+@6fq`|p|jzcZ6?*TuRknM9?=SOK;&C|vd! zEa00FwS5NtP3=P-QO43TZErjMUZo3?i_?hxaMW9=@l>7Y82@>gh85JKN*mP+Ax&LPCCpNm@z{A1%cBd^ZXC9H+8=`$NWnYRDM*Usq&9b@n z!|sZIZ2$DN)9w0eW9xhu9j1beZplB!N!vOb+ax~Lvl;rRbcjcNJq~ZGqWRStG_AKo*$(R9uaTB3-0jG z7o4{5av%#ZgQ|4%C;25xf%J#qQ+jed&8s=KwZqva6~);2a}(~z>hJL=sf^}BLKTIMGa+U(ff?dXwsO&@@idE)Vg!!GjwU38to_rZB#8osR;`YWT8xOft z;>xzPjCt6yNfXJYjp*FV6v6RZ%wBBB5cwt&F!g}+I5Ed$m+b(5R;Vcb0j z{SY>l^sLa0=>_WzCcO#Kx3iaP5j#Q0euhpp8!NC=$xSlh_{!Di$@5~OTrL-`uf3Sg z7o7^UKIV@ejvuOddM4ifVv-NfBU^eDWkL7N0-xu-3qsRqs}Pd})Mq-hT-VeHIUcQM zE1Y3onZrF{P#)s5Ql?(BfIQoG8fhEO7p}s<6*!?8gSLc>8~GH@Wo8tDl0ui`wq>- z2TsVAumU9-(QSre=ivNOT}o-QWmB&nzmmeFPWgE)uYI8nk;6(0Ib|T-^(@X&+K0(g z;2jU0Q1cg5V4Pwm{XILm0{Ma&t{lazFJ<#&Py(sN?gQJfGZuV9c`~lW6DP7(3F%El`bv3q_X{t z**;c~V`Pt4E}N4yeT0s+QQK=Jtz;Vdm*jc0ieD*TRIexGFQtz5rXaqM$~XB&mxnc? zT4pxO{>9%1`M5}x`fOAk0~)q#?q)ThzJ)1*Tlh~?t>t-lB9e>DPp<(aA|{$iJ<4YI z9jaX(fx@4LvnINUajX5^h91_%Xi_lCQh5q;VrLVoyfzGqIJ9v3qbu6{01E%)iJ4{V z$hsETE4fYeB04%o#DE3rUs*?{0_(IF zVx$jtP*{*3GdlcHNM#@)lXQjjPGJjO1Wyt!i_6{G&C|55dEd=@ydE;bEk??@1&UG5 z+iTG|6(z;%R)6rLSpqJncbLZSGyLG3xHSCxs`^euWqDb)A9Ns*?A)tEz;m!lRxie8;#N0R%H5+J<$O^%HKq96rZBcB z@+3}hT)tVLKk<-9z^kqkbxI{J810d3*l~7@x-FZvLyEjaUpqZ7+m~g^f4A;~d?Zu$ z)Rq>Z`L4dKZTv!169>!tp2|N#bSysx02uYF8We8$FJseqr1@e={w+>#R!pZW7M6$T zmSky6ufS8`Kxa?(xJ$m6PIu_P+H_W}>3Nz#X4Z`9Vk}Lq|P~_hDHl_ML{Ug_P6U@9_-d8RJ3IBpY@o*vqF!aegihmj{1VdkBg6@ zhBlI}Gw^Yo^K3*#kUIl=ds>C7)lzfM46wJoQAXX|2Rcil(X}sYFMyLmmF+0iNONdx z7BJGREn{Jq7R8k<+wz)va>J^`C0MCw+0kBNhsR@{sWQrzK)!_r{E#CCoBc*7YJB)( zd6B#yIAd`qPwniue+Aa{+Sn<7bZde$W>T~_o*Mcgl!x?w5Et}$Oa`Dc0c$k6|5&z; z%JANQ9|9_%dmo*+G2;8v@A0iLp^7*GX)CY(kFNRUc{p@53q(^Q z{IxH{phxcXTVg8mR<{nb$-zgCh~=C#G=Et2-30sM0GReF3gQ`eYD(za4hmWvM)np{ z0I4AdE|ax9YvpHab`o+T!0nYDz5dgF&nJfkN!=a1<91#DF88!Y2J-ge^)*k>KBLJ| z)RBUPtQ9)~j7EIqe$DY_eq$Q;hLQHYm)QM&=duk{uKKVs0{{v>ngnd6LMHL{->iZ7 z%cD=L7N1aOVC}a$!ik}xktKB1Yqew=x;B;jac8$FoO_OawajLIUe!!3RV_tl!`n_` zcf)Ot(A!=PY&aMv7(DW56g7S;|BWpl@IyZUGNnOLsl1EikazHC)9U3%P4GRm94CUN zi5kD20Xp$4U`H(btB^25PNdn~ zcvd2Kcnb-;MB3CLbh$$o0@EWN#nk?=78!0@9b+f&xV{cAAS(J~rj}%13bA6XY^Bx) ziglevEho{8v;EH9MX zNyxpMy2DQ2iSc0WS%)8wlZ~eM^2YQatD=Mwlum@ro(YU z*m}!1IA$CtixD{WrqwxuWQh-zYT!_G2mYJB+8wJ_JsZe;Q%^j^a2#9i?R;Ma=E7zK zO_K{TZI91r+vU;Rs>LF3l`6DG?{v}e`=Qv__L$}H&<%x`Pl+H_XNe{qJX!0DL9DcH zvZIbxvKGzeY5FIS%=ZM6LULup6ZF<{$guV2_D z_XS`=Jd0!wZLTtHmc5ew1=>W3NlSNj^#J=(m2P<%5*pszy+W+loz9UBc^%sBfd1=n zo$)y&d!P}G3!uJUo=s#2li_yhlkQyAZl3tLZ8HnxV1u_!@=?Z7MgW7=VgUi)3a2~d zS1H(1kO9f%5&FMEd$E>>b^Twuw7L!1F_lXdm;oCZjjH13RL!KP9+XSYZAl0fh%BxW z?qtAMn0(tNG$ujdcxuhn$nTWzPe)$9W?}Es5L%yh;r_VH!))=Ap!4GAQ}y>j`f}c* zFJKzsdr^>*OFA6ccWHUkv)R-9VDFI<`=@$_{XPq(Yf8wX^91+h0qwD*p^g=~5uIgw zgXcNYS}(msVQF&!2?}B(?V%hN-j-e6de&b#oGE+#Rd7)F`Qkn9_`$uW4Pd)EY26Hc zA2;TfsUY)yNXEeD3m9BA%{XVQExR}l+AO+F1`&2?XhiLJ4?fWKJK&%@lie@sLKq}H`yz6kbx%#~Z%AZbHJ%0VSYMP0b;hEW zwC)ZMi5(jZZ^r;<k7iq zaXD}bw^KKQr{WOGaV+E86)9!)Vq|sr<~&!dF8569>>kd0q>6=p{(SEABgLBrY|}+? z?fs6w*oA{sAyb~G8Rvfw#{om^t71-AH|Bblv=g_L0smrp@XuRSZBQ>v^LgG&CGN^h zo~Vp$8DRxMLthTga3hPU1LtG-CJ-+dPnSJ;*UvN8x%%9B)bvTFR%fp`HVmNdOQf)y zq9?bY08K?9aeHH+w$Hlud5O{nkNSV=r0LYXxp9JLSEh+dw=yn|K7z7A3$xK&h>n*y zw(3^P8RsmL3gi!py=m8M;6SFD6{HC4A`6j$ zD;L-PN;v=i&u1@c=dyEa``F`135{>^-jTA9Mg+g%x&Y<5-B!Zr>?1!SzZ@^>2J_tu z=tKnsfOeSNtKX!x5PK^FY3X*rbJ6?$vT@N}9Eb~ruXm(e4#<_~kpQ1kgOXhe3itCO z&{M`hqGfw|6Zj}Qh2e4CUL&cCBi`1_@ez~XLjxxrHo@o)*tya~Pdc>${X1F@w%+yX zv&BeT1IlRce-PPA6v z?@mUKgFe8)R8i^Uewx5%K|FGgyXs{e|>lGmLR@R>h>Nm7Oi`J1m+8j`t2+ zadW{+lbG0Rwr<{wSb=z)2fiIPCOUhbdHt<0{RC94*(Nz<`7gG%7bC}^TSZ~Fzd7YU zjcCnneRSJkstqZGN^#Qg*eWT*+fepNLq5Fkmid|2)2bn{=~y0_tMWCeV>`kYh-`|1 z?F0~tkiR?*$O_rYatE&-tg-LHw@T{Lu^?23xL|e0!P9zvbj4@ z=#__!(%!8@P{BMuIBe@dK&OqvCYps|6hIrS`@+W3;?3RkB9^<>5(U zIpB?h02#LClb80@%m574xPFOwy7m+;T$}5YNnZ!gKr~oAF!X{GrHK`xOk!wr*++hDN7w%ppu~(vE7i zZd%QhZ*Yg9UKR7A%a|RLR33Ks`RVm{i_unv@mn~6rS;*1r{2J%?4?ck=_Cu{Dtjdx zi#5_+d2x<_$HV{_#iSO^x&C-g)=o@E7^aWcD3?3m`+hM=AX@@Z*N3!_#rVr z*R^4D7>ElB=zdOuW?5Z9u% z>cM}_uE}W42vIV8+jJC)Ju3!B7Lr?67jNpE{|lYiQj2>)0TAn?)^CG{W}bfR z8LAlq+_*rVSAOM8`dnviBe1mq1&sYNq)7;W9>kV)r6Yk2_iDWE^P8EW{SWRqIqq_z zu0Ci*L)&&k*qgCIlhS!HyLnInwrs;+?}x*;nX?+JR7Z!?AfNXZoM01w96M9pSb=2R zi2V*}+;lH;)>ex{RpBM?M%;(20m+YxY&r`sBbw6CDzdiJAKne^K;w&C3c#lt#3loL z<~K0nI|ZAj zX5eoP2R{RjA`g75Kdl1mLAy1_p-}x-5&~9)jise!Eaw-(VNr-Spx<%A`g5!q+_|KK zv!*VxbmD}tm!&*%wk!4?oMmmN9R;axmdz-}JHcf;{W(5&*gAzjU@a&?w|4*tAIy2o zBhR%lT(l6_m@t$3I4yMWD<}q@rXTU0QJ))Pq}I?<`nMg6gJPt)kIKUSUViW>JQ(O} z$|gQ`#^mb1mRoFd!h8XGnnan{wV-eM#2+PSHKxH^l^zv)jn@PQa2UcI547>ZBE$XPT)ntAD z4YF|bA$6yX9E@l+KBBjwqbNrg=v0wl*m(ct@`*g`Wt_mYQ47{4bw)ghFc!qAUeJP( ztC?crYO@rnuD%9Te#4bng+kB~=-HOa!x6Idp2Sb2y-WK!%L;Pmj6B@l0RR?8>Pl)f8dSvj#Fz}-~-fb;Fl%jY0UxS%$hTgTWddd?hE zIaXv30o4am^sK0;ohrB5tI%!;IWa&HwQrOFTswUFE%<*QBtAS)HUhIve1>ZiK=9K9 z$;#sdb%^+RP{EvOLREnRyUCOtv*zo|5-QE-dZ~bN6)~7d<7PCP&WV@mdiJ8_0Ebpb z!)0ORJ5_Qj0i2`qZ6Bt_=6$St3`Uaxqg^9INP(_S1IotqimuN6yCxbZ!~;7X364(! zX0r_*l*PtG!&Tbi1=&^-yic`~pAryPSa^N8sJpW{dIP=4eJJmhAr-=g3u6T$f%szg z4M7bW4GKG}bBQI#d^ipr2I2Wo7i{fF zBUZmTq|cN1;T{MGxIlfDez%cZb>%<2bRZNU~{)@3ERgjUj?E6 zoCjO>&c~-zu71!DIb_)9g0~)^DVCNGd~vUG#22QemqS)8$ko0CLGs74;^FBF#pM0X z0y**{9=dj?(rtJ_*v^{yA}asNYrkV|$IQ(3!7+ST1rCD4*>b#kQygf!qSA!=I9Quo zfx6*AfY|-P3x{R!2ad1ZXI+*e@KNKX1GjM(Bu*)9<5@BMEYo*WO-9O5cjFTS#QrWs zwkkjpn&Asl2TNTmx5HKBR;c|#qnWbt)1i}^J>0oC>TLPts&s**L^AB3YTT>VL&%h? zIQsH=YdD>kU)Qf8N@`=9QIPy5bnxPf-P}pn*1NKx{kmDvWCU&apic}pDFI0v+kJEc zpi=7rns^yFO|119r8&!6eSk@YL5Xp={^xzxJIzlFZIB51Je}<~=H)xHZe7eSrCkL^ zaDH?^;P^GyIBeuv(D(*qeDHEAQx-?5uRSzi%SzL+`wG{__G}4p=n+>^`uJa!!dbGQ zGfD7yZv2BOKhg96M?B*`tnr}}#%$K_62YHe%E54?g6*{GHYN|do5v0pFnafio$H5_ z&lwr?#8;0yczN=o|12zWgASwyV;g~8H`n1Iz?-)KZ|+=i)a{f;eB|}!UCF?K*zlRR z=35oekJ5yGGVd#!eXF5x!!d1@TNqf?%|3iAl8mp^2PO z4g0Pd_NNO?IY&_m(pTBT8^AUt#X)Qq4ym3tX3I+Gd(mmkIV0lGz2JlRJ7!=z;2QFBWPGT&q;4t)M1YpHpmCVG zb8TkbmY@W18ktvf*@4ptI|7anLfA%p2u}>ystU=9DydMehV*R?vd|&}%z1-?`2z8D zmnr*(b{;0~54*bR=oQ2FAcnoil;yZ!jZsv;y*0f!v@Jd`iu-ic-hFWoLIwDXg5E=P z@z=@HgKTi4p5v(L=6DHY@Xq|K0{ZR_y#jmq-}kaFIPG8!+b0QJM^Q%W%WU9~^Wt$# zJvKiv+Uf2#z`hGJaaj`7McXL|frw}J-A4tz)Wmp5Z}bn%-eSnc1u1M_R~Pnt&SS!kU89986R(P#zuV z)z16))HDA-YLONE-yur9DxJ_mau*7b;?R?K&iUXq7#!6uSaPc}nLCH9)1>8=J$DbLgZ!6l?PstIA7%JwlLgpkGUo9*(4t(c79smp^H91G;@d;hrV2iUNAaXfN}62La7CBxoG~IzI{(ka>ld1zJ`RtDSIXUVh=`gwPJ2rEX$mi5J;`^aW6G=?*x_ z@K?L<;gM>TH|0SUAwKW}bR*%>PWjaqGf`qL=VJ`+rzl|OK+7EG3neF$`ki$$YXh0* zi*0#HHuD22@6BpFTZ{&L%jD%wLje%cVxwr$h(fa4*VhkphbJ^-~8q%{JS4`5N3B0M?sx;+4eRO0VG>A+)y^`)GH3!VzRJ9@Ej=vIC9 z#j;C3Hp>z=-G@b!DTJWbNx?)^AIV`r#ykeLIU>2Vt_#+yFK2#267(*&CS74egA04^ zh6TGG0uw$O{~yZPgRypElQpiYfE2ChsoqR8jbvPyK9dYP5g+(v;c$8r1gsV``BNOj z9mw)^xj<^uYFyYpdS~b6)W-i!M(;<(AN5IOHu`&8V#8I6|dZ&v>3SZdbAfqB|*#G3zCzqJX%r40L*j}e{nDA z-6uDzKQ<;iL!lFXN*^34rr|_1rl&5ZSft6|JSDwfX;z-BG`rF z9VL~{nut;2c8P;nVmh-!#~KiAoKuN2 zZLe|w(R74YBy!#Zw{Rh>R(z4tf*Z}ucPKzQ z5HzsuxwD|(uIK>vIP8h@C~ZO;@8KZyuxJI#|A>yE$=4Pgwj6klriq!f%X4osiNID- zqc=+EtqJ>Ka44{qv~=LpV{hOF@yYxHlL?FVqa#$du15_29Mm3F4u*-Lz=$`X&iZHP zjEl!h3kBlXmglt{6A|BkA4OM`h~VAbnr;I9L*{#y`~1Vz0m=vZmp)hd(W#uZnyrzl zf)6q8=F87Q2HRqQFMje~>nAA!+*s@sA}E`KZsUYJAWpC{Hgk82$G_U(PEcA{3c3}u z?*$~n6fPeNvu>(ISdi)X?4ONV?e9#df|2fnWUrINtAzOAZ*;eK-|bM0&@BdWg#Q?z zc#8Fh6;q)dGJ+c*DFD2pFL)aH;c_VOBbi6LJmpc)Z)N{rZ}r03i~>Av(teH(#dP$c znqH5&cmdD?MOlJCwf}?ybskQ-&f1RF{Cj3afG82V*Wq0paFhsPOMZ}vJ$nT0OscQ zh#c0!W0xp!yc}YoLVr8Xo@f7R=@4%WXK-FvX1xIg01rq^Ae0df;hLm;*OTm9;8CVM z&#?S2onOmu_+qh{1I}`C8|=R)duLlP7GZyM*0z4^gE$LSN=pYm30=Uc$ekOgUqGT< zX1eV~*$$|sH|NQY12N&+mScf_um9G)Yft}!M|2|Y9O~d4mwn-vzQl7@ERW?C}J3)m>(44m4EYb#-;FNs}^ya%SLN^kwfxHPZs)svl>I}!i% z%+8TXVzyrFUPvyJmp-J9&zGa$k6)O0@Q07$eXFs!0D9{g!X+QbELyHklMJpHR;A;3 z`xnixRX5Uz4HRU9)UyHe@{sydWVS2z`}5k?S+8S7PQzOu&X~M~oGyL``GiIjTF?00 zEKm@N93ZzqeRER;Js?;iJz4lc1m^91<5Hgooe|e#4m$&QoFCxSNqI7$%_R zp*PDmHYkJzHaqY%dbq_Q#u`aQv%8Q0!q{%l6+guWtC*Ra6`2N;+rI^Y3h&~mI3z-1 zd$bT;F$$sLAe8QjTfp5^7VZ{@ zEp0-64F0u{_=k@YaNFU{bp*mzh#6EvC%GwY&lnUK@vJaF;z8x-xkIkvt17Kx+-H*( zGUBur@V@e;J1fKQd;p-V;z1gZ)t>(B5dY=+nw+U;`)>PU6`(Nlk&uY+WOsKCn}&pr z#(cd#nT$K%pX&(W+5j1m5~BBOdy~00pbhZupjhK>^`Ml8*+}+&3PA5rZ#Ql@o1PHu zybeOzHT?3+!8UCU)v-EGAp0N>*a!};u6(K|=qMy}`$v{$}u9|$OXg37slc70W56b6IAa_N^l)$qqAI8PyCq_hkVe8|3 z1QXWV3B+a)K@tNs1rBmN>aI;bF2^fmdG>}i$OwQ%D%^DdWCqB~RjQ8B_$EjT zPy@YlW|H?u2-k!@+|_I#&N+J#U;G%94mQ@R8~(jL$;mP0QXZn`xy#Xca3GD8KBtB! zBrh8Q2_;m@fUQ)39;wN60qO8+PGh#%Hm#oM-m^_;8p+{AA;QA5LhYQaO_LnK+=6(9 z2b9NSD$mt<#7rQI+5VusNQ!pO2O=Ks(jY;DaIwS4; zPX;_#UhG_17*48Jp9M;ETg?>+JFLHK!AH-sg&j2E9Y{lITk4CIg3hKBsg=r8T;I%1 zte9Uqh;ZBf@-v@H*k^D{CXm)i41WwITg$3@_nfv@Y+bc3y2~}JuqXgB?SV-m3sTX$ z;|so!AFWSND81|u@3goi8mkP3Jw$@C>h}-wxTON%DqF1JnL3Y}(ENDL257d-*ZFVY z)gc$))n8ouWW@WtYeZ8=jz=exe8TwLEa+`J~0>dj{HxS*J*Bu!| z*baSFEG!@UR%pvsRdpQFsShIzLGc`J0$l2bEGxJ$8|}uN@?;=0PFO5(B@;FyttrKD zv*f~T=5#+m%!Jv0zzOPsDK2Wwjc98L16`1ibKh9~FI=XB2)XTMEWo~a;4~MCJ4It1 zaeEj8P6S1q7TIzpx1hlQ_rT^4KMdGwtCPF9B3oIw??-hosTn{kB6g1TrE`X$ z9um(1hOcJQC!J%XE1sa>=c?DA^9B;e2B@#c)_^ZvmX)Zvub5q)reJILJc`eK&=TevXn9W;06 z@^JBAf#v}(KW0aXY0s}E6u_`bY9J8XSjUZcFU46H>ST!r1c(^0;$%Tw>LF04l8R+hbUBkkOb zr0y>X3i}Z+F9uNyfdmWo@Fm$jK7#Hu??v~sli=KQFl{;`FG2rD9}9HN_uN>$Hg7JB z{S^4gBmi5?;v9)Ub-~JC+5`bsrM=~!(4}%9*#UzgZs*ZTN9?Hm+>aOGstE2W=57V3 zGE`Ip$@u19f0iSthkG4QG>d(K!!J|XPeDh>WPo2k?Ho8ja$<+HkKiXl82*s~ zudO{?i#X$wsc@ZHyDeeI-#gOXe7prC_E5gYhD<0Mqa()FS|{4COVUBl5_&9Px@?0FJf2(RajwjYmF$4ySv!4g6;OqGdbNUE$5Y zK|Cm!;@i%YLphdd1g{r|2>&K&%|6JB+JGizT3{KF=JU>!jeo#_q$GiHKkzcDP(#7> z3SjC8*Dt{mYLK8-1CR@@p>6jlUsCwj8t%mwvUqT7$Ta`0Li3E20UE-1DE?YNXo;lA%`{l z3}$C%6Xl7)bP_i+PM`|J6P(&_9N&XhVen5WWpYD%X2x5AbZF_7X(~iJ!+i!CV&|Sv z##~i_8NjiVt~L1LoB;i)mAsW#j}LhffeI05Y*0r9u?v$zv19;S`CpSOLv2f)SE+7r zrv3thhpp8GYIb6Q(UBWGD8JT2p-)p%X|gKz-O^CJ8?I@>%C?%OeJwCHN^&mHQ^OMw z;oZhJj*?E>fpD=hJO%=oZvlRbn&8Q|&PmC!c3eRfsCoh?z;G}MxrPa#ooU)93UV+q zjYxR)H-tUya{zrv;QFJJcR=DlYBiByxbCG<^RN!gFNv-fF-wCCh>c%h<+cTNx@vM%Ez<2;)}%Y!#33b zlsCNoX$6a#Tax?V4j707Yn_JvjdyNOxzm{ zdcUPntC@WUVzX|8z1V2jgz@Keo8gxc345Gi&0g)or-SPzAW^Pa&2a~kY7#c80}vDy z%5+eA1Ai484V>|c^K+LsiNDduK}Ka;Gn#+!q9&eNa^e8F1{kNFa+=tnMRK^}y8#7o zX@apo_()!Wggu*c8$T9K0j)XkZ9i;({KEkrnDD~^=T7JNjhez;XA;N_Z-0y@r_NYp z^M{h@1tffd4&e)=Cn#W?0B-In>M+vMbI2Y%9gbSdiwxwxGjOJK@QJGLfJ-HiCOQJ4 zREG;FM8zArNOELMxJD^54tlLk)juAD#W!JJ36zrM>_4u;h z0z2@P;F8-pDD3(>z74w2d?%#hBZu>#6u4jD43+n8ZjX)N-$u_tS3xfkH?}$$o7xN5 zsLB*#JGj6^Qa285fJ>ih1|6$edVX|9%Dj-+wPqP@2NU=oHWD3>bnoL9=g!6+oCns} zu9$PsLMA?1A_Bkf4ZB{c$=kctG;CPGbPOi*sWBUHfpGkz3j@ioRe8i2^CSW1mtEHn zsH&F05wgXYXz=R)I=#f`V2DrJeyB34J z)omJ@l{#7yqSdqLCKreYK(7d}vFQtdQ-NJ~KVN=u{(0T~R1mJX3O_pV4SI{9d53-t zKtG*Y@_>bfk=7)6H)d0cPS$J(;RT_46*#vnkQ%|+wHNR!?66A1Ak3j)y-gHEQmH8n z%z=QS#6DSYyr`O{@{b6iTLjvOx_?HMC;BcJoNL3Esu(`K68+$iA>@XgupU!}#Dy&K zp{!Jf2Ui1DszeP|iUUeni-oVnSUG&yU}4H~jjh6)P9$AQ+2aNWtXNujZ4NKEE+J5Q zUykWWBT7h!erm`Y$wB@SJ*Oe4Dh?n30e`=sheI8kKDn4v$RCodykgx{JZlL0A=u*G zz|e+U!)2qMQr1DhIOA;gztRd83uhAXOBcraULP1~Y&8bgBm3IiV{5>-0Rbm;Z-&`C z2UgecSWVAoKxB~m&DU*3f;WD+8mTu>z~Gkul|st39dx;XD4k+G3+IP*=-M zD`n~2wojmKm49G15e2I)~@Fd);Nkl3Y^GD)~Mn?Q*%WDCrq zMdF0Tpmn!qMZ#Bd=LduhNXdjJd5 z2K45`Ls^qxYdp3dS}Q_`HN|gv!I=R!sOKftF}<7sQ)|@3-)9c*Tdz(NC>Y`2s0dXB zaj@D_RN0o;Jq?|3>BmF70j1r{DZEzWJQ@R7GT|DC-nRNcdRpiT_e=yOb^RS<9^L+j zHR4?vAkY?`3tEFdj~6;kQZ_-a=~-k#3mgmK_V{-L;HG*@mz~S}Ixpf@xSTHm7n{TI z@Ii8zpKC*x=m01>5VwrD4sD>rjaE^@HOM=*5`h#gho|)AD66=Z!fE0Wv717AJ&kAY zp{HQGIow`BXov)kI+W(Y-=hYfdy4_}pFAF)AgxYbYF|aY{GM?@@;UX(r}0;R?XmF! zPLMF>3DcL+zC20;##+4zZa3b5knZqfttLNOmS5`gDVkM!;91FYMQcl^QE|dG5O-!w z!mZez>yzc$U0qz*oW*krG#KEh&k|ks-F)XG^w92;%5aBEz6oD=X?TBthYp7YwQ98q zJLVI7enSEui8d>nx>vKdjbGAgb!^qKV?gvC)`YsX@{A5IX6W~dM;~vvFnpIkCouI4 zAP2HQwS$VjpWo%cJG9$AAx}wZKdj$j4rJ1J8`EJ6iQrPeTY`*5Nu6atrJpDmMJKh8 zX5P5PNL|1q>hlskuu~sY6l2x~buJ|ChjYbnTcyU?;9NWV21P#03O}fz^qvbtZ-egO zH9PvbDV!pB1Pq4c#i3DgWn+^8py%}$U;}^YEEQyU9;w}FW3dqutK_168jJfalOUDv z6zYaoWZ-~6Uwy+vPe;cmoxjL_9m^XT*aRN}c>1(8_ns4%7IqHs=QvQy7fS-R{RrLp z$rRLchh<{16@5w#C&c2-?5%13i9Dx!_DU@0droC|3JeJ3Xr6M|k0h#JqbZWN2~W7; z<5&-h#Qw%Tt>DCpzo$2Br0~*=Y~J@;Eljme%T4roKh;Y@HDbc$a92upfn4GnScH41 zHw7d>;e6bL=CL_cLah7neecKcDIEK!Im`Ynkb=51);@1Z4PCmk^*te0WLtxVKbrpuF2x}{qlX8d zXzNpX_eqN`&|iS*f>I?E z1}ZmIf`E2J=R{K`uFpZ8a7$40r-YQVkm_PL4fp^S{F~>eT4%L~Kj^jWW8v{nfG+7+ z^Y;l?Fug?MR_Ml|=VI8+Mh^+A2vzU(jA=}{TCe~)d3XI4=XxdYtiPkL>i^1T`1z4k zY^`^W64A3jiMekn61b?>ShVsf5PiyN=-J|#5zvUzvl#OZdGU_KLSR{Ft$%L6x_IQyq{rHq}Y zh&z6OVGeqT5O*KWVZsWpBnGD|hxx2aj&+EEN~`;xs=paSF60Pa7jM^wxK8*=|vFhtc>`R+=^s&d|wDR%MzUn?BaS`NEpT zI<0q}z)eQuHdJ=d^Qn-W;75Mp=#l>&(R|O7m>ga1B=0LB2aTQEz!&vJl7MGL!rO3~ zq~?U^>+zF=>6hi+CPXj-M?er7<9l|HHO4WM?y%%IEPrH7{A|UjSpUN}-m2oXYm8Di zHMvjyyAu=sR(@}O*YNWv|JQ#o2(uxmRgXuj2;3s9<)LwBvm9NS8Dya{bG3ESrDkZm z)BI6_Z0#|mVYxWF!gjm)3q5qO7UYfl_v>O zT34Lr_~o&k`%`Sm^%4i4y7WG0c_8TwB$aFMr+K(@){uGwu7}`$ z4#%f5n@}f>{lSPD{(9-WSM%q5abnIF)hOPr*Kp3;MP~Fo3P4!@4WxB?hH?M>b$=$I zVWwhvcgGMM7Sqg$$q$PEUKu*ovxYo(I-tl?(P3Pi8pW>&eN;B*KaD&U0Jq4otxD?c zqYRz$G%G_MzsV}-1g?Xd*1m9|(tne0)^=kR5u0t~$y3zPUfrk28d7;I$DV)#=oD&p z;?hR2FEVkdt*-F5Al_vE`5a+P}va<9pM z+2=K$RY@TosKZ^DzJa_=fG}C7IxEtKCfqCu`po+Vr!hy|pOs4|;_g^A&tosVd9DO) zuggiA^XcWRR%X9u;mvf=!1AHboJY&l*;Vsy7bRbDl+FfV>e1a%K5h7cK8h}yD1sDq zboB$VWmVqr1~czJiMiLU{HnNDn|}bmQKMp8vqq?$d7mAt8Gl=L;DB^&os(Ps1dx_V z#M!F15L-w zw(5n%gg>JXZU@ybTjuo|?y~Z>M@i?9o2?(gNI3)1MU(j&ysc;jK6nlB-OfqCO_M`x zW?*^Iq_vjOeR{1gqOf=-<({RZK@l65=D%>g3{Y%StMu>>hTJTR@5O8WcU>Dts=m80 z)plZ^Qd}}&<8rB&`B5V@cuHqxC0v41p@4l}<^Qj<`h!W&B1l1!{%Wq4ok~9Wvkgr7 zGZ-ha0pkO#j;;6I%Bh#N%>T)uWVyz-a1<*=hiDmg^;wpnh{Jl-v3I!chk%0DDoa)G&2TLMrG{ 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 IM6N<$g5JLFHvj+t literal 0 HcmV?d00001 diff --git a/macos/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/macos/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8ecfbc8fcef7e3453156f3820737c9adaedc5c57 GIT binary patch literal 1974 zcmV;n2TAyeP)%OA!ri6&a982|8r4=@@H zD5$73(FARYF_At%LwPkV8Y86y8mmHmw1I7Fsn`_gW83b`y)*Zo;~!`4?(ELo+1c*B zv-R;yCfRIm?m3@(&OPVcbAB@ao!1%u2SQDC1=$KhnTx$`>s_}PLTS)G?I?5zOovLbwRdT}h>%NeL_T~Egk{@(skyfRVF+#~=I9Z; zM?Qgh`vBy-D0^qfk{ zY!NV11XT`{P9T@OA6fogJJ{(;JhF5Wf5YvBNB)WwT0ll2g4O|LuQ&zJ2)SS>viy4% z7sep71t<+#0TU_fV6;&h`Ux(cCeLGz=L;9!iHr|eYdC}FV6+g7^UC;zsDdBJWG~w%i zNE8WaLX`vFNtp9))XE>(3BTgkBTWcd7b>1b9@>>S64HVy2fRU;{jMsq69RAaCmz_9 zkmEw&<8Qiy@Zd|SAR!HCguLJi)U6MKd!9u~X7qJN+d(NP<8S^9;lUS>j&zWaG;|nw zIqKH6;C4Y!ibsZ3c;dAql9#cH6+iJpW^h%;xJi$qcsT!wP2T7&3MQPB{`Pt-9^GcN^yEyGGu_+D+vu zQl`x$|FK^neM>OjV1t%VCz5-tMnh*WX5jbeC%keT&-W3ipR7CUQETd>K$C^~?S9?Zd==q+EcyX;O3cG@i5{)bUB zF9q*Zs@QZ!gs5fz@gm{lpT|`En3f$vy83YY*CXe@BUNmALthmuhj*j5e9?ZIHNyHs z$n@E`w>^yXE&%^@D%f<#cpX5Y8+m;fddr=518nR7HH^Iw_qO#&&%9Ky=}%@+H$L_bNoqfShJ&opBl>z@Ws%O5%PM=f7X5#NVfoR|IB*Grp zfqwEU_8e1<#X1=OG^%%j#dggGe<%@bd)Hw)fWizIcn;To( zmk74~8`#x(me+oVe(El}T8hKYTxh4B^Jdw3cM{mCIg-!;bj*NPe~W(R?&{fR40hIK zxc%#p&fZC3r|ys`!tQ$({mj>D4tmF82T>O+vDl6oXN{fOW5Wo$cN==^*X>B$2wNIN zW?zBZzYYrBP;T&1KTb^jL2!iq`&P`>Z`jq7WJYI~CNH) z!pMif-=4;7`=;G)5!Dc@=3Irl>SuO$aRS(L0}6J<)X{_a%M+OG-?E$9B6V0(I!WfD zt8rKT6mrv`;Y z#r^0*)pMKX*w&!NjHJXg`X!z47-3(24D*}s*mE1H{@;wG=9r;l7W`W)ORMKNiean>=n(1b!MSod z!LFY-WXZTW^<&dmYp)j4OJf~X2bb8mVXFN{Gs zIUILluS$FKjFJjt$YgC2a!{`C#*N}XuSKJ%Vx3%*v7;vb4Gt8XqcjpG;M1& literal 0 HcmV?d00001 diff --git a/macos/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/macos/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..2b1859f0402a053ee9c1649df9a1564295a3204b GIT binary patch literal 2659 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 Rd_DjG002ovPDHLkV1kbGAE*ET literal 0 HcmV?d00001 diff --git a/macos/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/macos/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..5b1baf516240c5b0cbcd56326f76d5540d08cd73 GIT binary patch literal 1349 zcmV-L1-kl)P)eMo9S z08;W(Ie-$f^=YPr`v+P7CUWn_02i#CuSg<|cVaj0v0fz6S;7_nKR=bD;JJv%3=wP; zM}S-R2GX@TgadpZNp;|z*o!;(aV0J^Pu|S}EsbD+%S|F{Uq_a0nT9JE+|U5-(H*sM zq51OeRI7kue7Q+v?Q6*Lr>f(I_v8Mu9Z7Uh%73$r7A$cH_t2}zeNR`%jU2>1@&S@a z&l0)IN0Sj0v+r^jk?w8C1JBgJ9l|~Gp20!gIA|(@#mG${55A17cs7(XL%7jT4K5zw zW=rnVMuQOyBA1;&*1UwQd=9b~L8jrxKF9s}T_oP#5UxR>fK|l3h^%}*z*(2$P94Vm z>7Ax<4FZA81!UD$Wc60aT`cE66lv?gJN-pVa4^?B7*smay$xBjHHcif(!q}6jU6`2 z8cQ{egGM80$3rI%9{yGY%}(Hr>^CXfvgVsvW*>NHZ@5b430Gzg_k&Q)AO-)Cl10CImKeQ)=v<>q5r6!WG6nMFYkxe}6ipWkF z8^9mgTZz1(3up6wh$b3FHu)?LAxHM%j~4f22zk?TbK^wg4Ix`lZk3mtk$!aaV1O(b zWM-Vm&G+MM+6T51d`qnVv@NO!17y4d9qvO9YUVm zg`WP*)}e|t!r>L?lF~5!J8F156vSrsWRS< z9`8ke`?3@uJA^Hq_xfvRS*>94sWB|skCj{f;gfHVynoji}dWIeIRd(BN# zYE+d+^>RZM>=+~?Ae~^9n@4kQy{Vd$#**mK_dzVAs|N|LRs90?vd55kJ5%4jVv@O7 z6t_twP<@ET(Z9~Z;J~!Rs^!+(Tnf=5(oUG=zH}Z=S)^eDfo`DeFx z=gnt+@96hlKRNV-@rr#>cNonsK&!_-z(K}7z(K}7z(K}7z(Iyp|DQ_C>zdig$1P+3 zNLJqZ0F?rQc-Kl3l3YYPC_nk%Dg}la`||n#t!#W4-vt#DdniH-2wV-3Z41BbYN61X z8eV7FP}v##?UDhCfLlSnbqjLvH^AAoXGoBfD}f63h>G$#4ccDsw39f3yZGK(QA*F)zb?mEsCMPP!Z(f*~pj) z(6b$kS|3e;0x5LjzBm_W)52an{eK15>A@1JW@2lP10y`8FecAJ#-5!3Pa*jZ+?VFz zZkUf0iUT5fl^z1m-D5JeE?|Tg1jyuBaMZcU@w(>YblnH}A_TfE94OpMiNJFPL~KpK zUOXR}d>3-`MBU~k!P~F^_ocZ=zS!H5RCz<(av6VsOl&J<=T{j!acM#s|)m0R)(t`kom1z+`5sl|n zkn?Xxj=Ly1-j*de>t=;`40?R(R(i-N)dE#mM1NSXf}D37a>B(>`YajV%YVXMdl!-$ z8oVf6r<`)Y2+!@&_uu2b9pc59EeY|wS02MzGZXA~{qrHdGfHn2-VN{f$cdLF#&chN z9B0i;#BL8KT!#L(GMyP1;W;H_(#^=%E>Dj4+MjV(-;QL5?KM0|BVaTc>XeX4(~+-# zH#y$xPvES+4eYkPiU(-}?8V!KOq_>&xW580i6wM)%H6Wa3T8 z$yX=uF#h%w&dOW#d|m_aAT^yxlzBUmbAE%Id`$v84{0mnzWFrH${9$u&@enmLk5cI zcB;~ioc(L$lCcUvQRB*UJYD z#)GB;hO^n_&ycfjKu-Muly)Smwr@R)yL>v5$u(~I;B(O=z=AZwk^YbZW>}mcnw^4{#-OT14F!? z&ydr9hMaaCly}5ie2VbiUXHWuw_s*o~|dw(s?(i@Q!;z1)burOQ?Q&hAYs!FH;vIYGA zY^Cz_^{LFfC>j8$z_L*<%tF2XI21bd%38GucYzrr$6%c>8CC9X&OXB!vG+@*00eUF zsIIxF*B;Y|Du{kLK#2Z*ra<=6IauQ^MeX`uymgQUM}xlB5GvP>+At6G>Z6eFsJ<>M zqWAjw4%y4*V2!&Zm57ZijnccJ$aSDL-mg1}@lmG&1GbCNLOPJWY_8sR_U=lgZ9l!W zBL&gmhDGm9A=iQ0G#~ZK!!a^3+REXR{m#8u$6c7JOl(5S93gh1HZMSJeh6|Mp4;4pT&eJOZ3Ob#5`vBM!|GfE(RV=%>?`ME9(hhv5z{d` z4SdKKQLip0*t8%4qKSRw0?e^zH4QNxfDrB+Ey62{2(~;JuXpxcFf8mV7h;Y%QzM#< zMNAK1Z<|qNw zLO|$$$HK<@38D#zYKUTjTZT*ld&(lrLrzBZ?EOqkDIoMAw!?;b1aYRqj1Vz9413DM z7zdw(in|rK&PXvJM2};UYlp6TQExmE6R`(!?buTmV}9jCRICSZ>Wh>ELf=%_FjUtZ z)SFMnLv(tOdd9(l^eM6b-Fw~3ppte308u00hdL|}f2`P-gp85#J0ms4+Beo78goqL%&O&YbYivZ?_QRg~2r}yE zAJh6#Nt7^IuAcM zM2vsnPVc{}zvL;32+^=mt8YR5b6w0#?8X>zh(;_Pqz~Lli1@_-gb-10eN(Gvpgve1 zD-%_@8`&dMRFYE_Y+>e}qQtI6$As6ce#dz;LD{ z&a2VUi)f%$O-KEEL(ELvfiZHdMjSROHe!8%h6R=hR;I=)+nB?5J|7VxpjP}2_2H&I zL=_DD5(8D*j*J|Oef7io5S|#j!s_U|1xla7j*r2uarl^JgXdD;Ievo-6@ZZe-$gB- z2AAB89615;eAFJwtWOs3F%CT*`-e|cdGcD+_Wy#p=aY-1u49nRY`9r6#Mc9 z=rg{u1%lBh;(HF#A80P{+Tsy(X9};}@Zq)Ki?JShzf<}yU)aRb!OAiQO n*@e0@aUUR{+r$ttVdwaN5H^z5+JN7K00000NkvXXu0mjfO3~he literal 0 HcmV?d00001 diff --git a/macos/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/macos/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..46e2ab4c43cb90ea77bc0b033fb5edf5b60a1e17 GIT binary patch literal 3730 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 L?9g?nzY_ir4I*tk literal 0 HcmV?d00001 diff --git a/macos/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/macos/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..59f42cc2812b73080ed9d57aed6a2978c2e39f6a GIT binary patch literal 2460 zcmV;N31jw&P)rRhhkrV}c2k9Vq2Z;i|ni)fVA>(-fk>b->BRJEzuQw?~GK4kkX zAm@Ra1VRCY9Qvh4pp-MekgiexIKb*W9ChACnA-zoT|LV@4{1}BAG!r+&nqO-S*(Oq zE$7s#WX^^Buqo_>(4Z1f7^xjn5Xv%DuwyRjg3T~vF^mkEKV;acwTonDP`>{Locpc@ zyOVM;kDyVBRA{-U*61s%a!f2u$p1}a1X%5}eXOIQI09DEFXtqm^IW8T2Iar}oZ|1k zjbyt0Vrxpp0!ajwNKT5@n%#;3t8FIg{7o>k2a5Zu|B*ZwY3ri=@Go%gy$Z2A%)jr4 zQ!3%2C`YMvjM#Bn1gi+w5rZvQ+a0xWM@ zi`QIj*f>@awdz_}cw#)PCw_x7@HwzjHNk>r%CG=SC6SMP4;H;ACf40J1D^#e;m?jt zKNd6#m?&^dpc2Tr-$fRm6dfzuP5H@ta0ae0?^lVMVL>y1i82#@qL6dGgB*QwJgk5I z7N`Gme}<&CSkP#&AhQtExz`{)r^KsWZ8#eV*SC# z!pyGL5ew=Kb^z8lk+*#$9@euD7%Z(Df(7-glA_EFQ?HDic{Os(Y4NbOJ&1GbdV|y; zET~t8i5M)`LC&}eS#f$itmppZW4R5*f_i|7fam#GS0ZmeGbYxbaki{CRoO~46bouy zB}Kq3gDxRwd;>Z5?1)&d!Fv87oLet39or_rf?9)V&&)b}^ef1Uvmh5?K1+K@x`Xly z594h4%=pYjGhjh2!9>h2X}2LqtQ_y8hKBYanZe!hB*mLQg=oOCP21HZQM)!wYfwoT zeI0Mhr(w^F=3ZbJoCvrMs(T)Zp7*2UuEeQB)V9&r9wf6cvJ0^75Wed}S@ws15NC>OzVNnLQALCZA{T7CLqo@;J% zjqUc)o`rN*2wG)ep1N=&*7DQPxxuDDtKZNlK+6ppw4F~^NAstC?29&GE&Fg&pw)LQ z8KC9&;`R5UcRU#lO%(P;o3WODu;FO+pRMp*NM@k053lbMyzP%drn@?tvam1y0oIaJ z8;aJL2}I9@WEv^u(F2#Ew?7sUEs1^c53zbqF=$r((Hb}7I*yjZ8`yw;^>N5ltDX)d zQrN41gmv`E=&_-?XIf+D^gS06X~Y@D>)(Lh@l^FTt?WR;#$NqntfStG&es>M@pp~1 zY170RF_{+S>RBp6GK0PPCs>P4tSegM!C?GCAcbMP{!7ujo(b>V2J6LAS?rJh6t&<4 zbd(z?(-6%81{JjY5MEy|de?Ii(b`C_xgItDopnKL9xxd1r%7%Q-QSCTJs5jVGFvge zGO+`D&GlIG-cfV3<^qEQhEck|7rpxh^DIzkrsa`L7xtPPu#Q}b&PSMcn_@H{7*xuibBzH&^F6t+MMOlmU+gA<^}_UW4FQZc68r*^ze>IXwoqU zd+klg?4{@^>-i%_^Miqp)((4LLHG5-zMUrX!qAFiNatMabvL1A^-LRDYk+}|)&WB= znfbKQ*UW{XD%ueSZRSzYo*bzXtpf(8Yhic5;EQ;Dy)e2v8d}#p>~%LGGZvXg1m6T& zYk`4})(N}+jo04`V|&bvmQb`2qQp%w$a>9p0uD_Mzr1$6k9Qw9Sl+79UJ&eS(rd0apDm77-IOFIn1)0OvX(hPrt1xkZpgHo*Y#dV5}R?+ASeL8N@Fi0J^gFHrs{w@>WU@Y@8;r;B0P_ZdNqm z^a{!ays|^7SU_tJ33mTDph*4?o@c6Xl?S_GjuHGSnM_A}d%fGS{X=_@uu;hjsZ=|q z!WbIO#4S^Te344~783CXRa!UIionqD%PLAp+8LZ;E(9c6MSE*>E2@Roh-Hzov-mrF zO!=!04lt;oWwHp0siGY`U|`UcMKbN9P2u7Bg9{ACGcB3UB9mgOr@(4 aG5!a$c6$E-o1lgO0000& literal 0 HcmV?d00001 diff --git a/macos/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/macos/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..58b2c2633b7191cff1038cf3b4bfdefe7b2d92a7 GIT binary patch literal 4748 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 N2B?vxAwl0A^MB$?61e~X literal 0 HcmV?d00001 diff --git a/macos/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png b/macos/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..fc6b1212a44453d755932269fd426a4fb9744118 GIT binary patch literal 7311 zcmb_h_dna;_or&rid79Yf+A|wYK@4ZNbI2Y7FCqmn^vh6t76xdidJp4wY3{swbNQP ziyF15^?7-J|Ap@l$+?f$>)dnCecpS{z32Ig)z{UayT*QvgoK0+p{a%ffJ4|es*xz6R4U9hy2LH`l30o`SgYTc6@k;TI%C>BJFkbyk<1^02L)Brfrg{G_6(b6y zs1nI?H3f|)9PQ?-pJA;7->Guzuct{T(TKQ3Wt!Gui++^@&*2l|jMDToVVvh~f;k_Tbb zX5Hp^EDx0KV=^KzGt8Q-;EK?p${*9cYLm`%1=X_t(7zRj*4&#$HMX?U4R%~s%8!3U z-C!9v_d0gMj(3XT@>NuX?f3KTP6|6uch@rCV)#BN>*X+5Y|wU#eZN0$^5MEe0gmn@ zBPTY)>X|VqGMZST(nQp%C?m&7cVv#A|W=NEdMyceo z#gJj8TEZk*T<-Z7;_%B*C-C;X_iM}h72zJsA?2kv<)IHW?MC!TvGLzWDpa*ZQtIGF|Fa-Y+i9CPvNqhy8o{nn@SvIq(>hqSj?&%xw< zEN@Abr_hG=R9}L!P8(DGzET+Ba=cCV`3K%rZ)&zB9~xZCDPe}Gem9Iu?)YTzvkk#2 zTUctHm|Z2#qHvm8-9&e?KHb&utwVs7s_3)X*Xm8RK^}N13nc3KPzEM&Zz$t)ac!mF?&O7Hny2(Z)JaUZN!lH_ z^q-s21(%l24Xg(7-uPlM^(WyVmY=ZnZEd%v%nBm718wzU>e8`N!?Zh8LmD;_Kj+@* zuRLWK3oR60=nwb%Vk&$O{8gegUOonfqk_6+wmZ^(*RY~h(A7oniGnAq#Ao$FcELnc z(&WC~JsVo?k~~x-ixL<&{k1~Ih47$i0g{(q_9WAUi?{tanAq6+q%);^=H83{(D+wI zpu$7pDjOl0rDzw9gE0-E=@1Ip&6k#jA1t1`+3NvIz+Ea_T))C6ZmFR@`wE!bm_{ty z>qJq%W=Cl-!4y|nx(Muo z>V=k=de}$jc5O3?Pq6^@yFCkCcS9*BN9dcD2M!Ib#K%f*ehLCWeJZrU#YnvBOFYI~ zB|f*Fb=0<$Y(Hkfk(b&9PeNP{inY)9$8$qBG%g2sO&!7-M4yq=Pf9bS-g*AUfY^}7 z+rDb#HW+-~PwZ`;eC~Gd%Y#034QK`i0rn*Z;;l-9g&fGU&8y$#`=MP9+5758V=&OM zydA?lU^x;n$h%~^1bpYW2OF}T?|=S%tSW5i`Q_-F@H{Yn%WM?ByOR3#c@fLFdm}I{ zjU{l1+Xg=4DWdvjAX1~Tur^B&MD7U->c1l*5-j< zJ8AfBDLEd6F;)tkHDRn7!V^rz3h1+5{M=P*7@k!CTU2i;X@o35GZXJZ;6=KQ+Q%y` zm5+~wRb*L=!SVPnvl<(|sB8?^G{u`M$0M;aTD#dY%ub2bU26bJnuUP}?A7I$@EZaxGCEw%t_QFXellVQl-I?17d=A{# zTob6wW=qg6WgNbLSO4^_45b9WnI{Z0So@;ave^uD_)gNpWZ1bx-I*yejG7yJzcg;a zk8>~^9?f^3&V*8Dvx|b^7>!~+S}ww|>6$vH54+1n>hv+j`j*3$Au6{Mi>|x5amSN1 zbmDw5$@|erG^WLX^7XuD!}n8z z0c9A+{HAaFGO2*4$COXI&g0LIGyTus6$bYt@v4l|5pcHE%m)f!-(O{*!;-{*w~9A{ zqUUu=?H^vS@`K@#RA%Br;+wBFB0XCe1!HZ&axTG`5ac?Y}wA3$1;H@;;GC=%0&&wlrCcAk7$MV8`(%hQicTF z(cy#a85j>(l#5Gh-ZnD`;+o})e(fWGrO{Q-59+a$`tUn+p8S#RYzUKD4;`;K#i;O@ zr0-hs+jsO>Q)Qgj82oW>R^KL~IF_ykx`Eu&P= zL1sg+gJ7{Z`mGL++e`Zlg{ZZ$XoIiC4|+&>RK~9fKmF3!J7Ew#;H%M<^;xdoU%!f? zL%^*%bzXF~yLAT?gCSFoEGK`9UUQeykN)P{8+XEAd>Bp5>bDJ&{04BL#bxLP7T?%0x#v^LDRCv+Dqw)_!UqDR!H$Q6BgUrU{ z(OQ_lVLAlOdI>D!;E2J-*Z|3zj^6L2Eb{s-+P;DYS#esN9oMDme;LJdDZ`sopmEyc5e*k#WO)Zkv#*Qo>)VD z4a-b|>9(%A@Ex4RqmrIF+df8sm|h5O{8Fw0k4#6IgB0 z>Y)vu&^S_vhq5)Xc`#i#)}>`0jhhjFZ>HyYQvG$T<9PiRqre>}zhGtRwM)cw;e}0ut0xp6>eW@ z=MC%FUEQ9@fFa9)+S?_MZrYbb55&1-HJ_R2YuKdE9NpS-tV2WvY|9ai`*DwMQYeDY zD2jy_K2R1VwvSqX?@;5qz3&W)XrZx=H(eB)$k?ekl?$0az(6wlUR1kWgc}ivn2gsN zI|E)uBhD$FnSU3>oI!QL2CttSJkV>KYNK4s!N_;9tF|sG4vc6`&D-CWq-V>UqNaPM zJ0ay>%MkQ4&E2@oLy|&HBt2mDII}cEGb@`kZ;H-WHyh*fN4)rr_3DS=$^e04`p@i0 zt>1PJ#jb;;I#Lyi63f!d77mfg~~_Tvtedw zU{915EvDZX&Gb224N`UWi*+g1gT@q*K|QqFi{J37Z($3KRzo8dUeN?2`v$US45noA zrneWE8%lC+KV_X92EGQLFL>DT{u{}nE6Ceoe1YrmX-s9`3TNKb9T^Ng&*n=}e-)jN z*UjN%OV(Sj7;&*%tygx5;YB;|R|9z>JYte_B9Q2*5QV)xSKCoj|Db9;Sn*pzz^&z! z@aWS%BX!1M4Yj_62bB72FTXZC;BHC8a6m}~FIkcX#NcYj^@^|y+k-j0KK9mDm1?qiC3njC?t9X{G}q=lZ% z1r5BoXnv@U=*d=zJe9_JSxC8mNC@V1kLPT|GIFAt4@)yC&mTCJ+o|=P+Y<0+7lN34 zs&2oJj-!yPjN75`-qYiJh|AlsJ0n`mvh<8K@Rgef=Qj2>!GvPby%Fly$md546D^Jd zGS7{NrN$+A7fbElPZrmm>8#Jo5yx&%+b@*k>Ke&=qUZ-wfqhe~$`5ws0L+*!9CWM( zGPF3$9=uO;$El^Ggvk-HwgbQW^8Y$GgEwXh_m}EncEupbNxTk^%gY&tDy`*D7J82P zSfqni+Y0qb3Vbf;;$WST0)v@SmWa)fUJd201~x^GbB6cS^tye^fd!lccRWn^xJxwb82Rw#ARpuzUN39uU^wm**d-Rm4@N>b<0Z_iI!}WhrnDHL_gjC7R&tkbWm5M7-SeBnd3L#Oa z818tiObll94Pa%Y7nX_p{i#3vTYITCj@BxkJ!P| zNt-5ea`JxF2t=*dYJ*<~IczviBB}D?xeQ26KeoF6TW9;8Aj7NSHffNyBF4FAtiU^r zGefML4V?SA2(S`k6-3_}kWYyKD|;x+b@9a{wlV1^8>u0aQc}R$Z&3ob25NTaqJm+` z!)cXsVumqqZ0h~?<1|-qNeaKv$;YAxYPfClTl&eMWP(c-8q7K^H>+&*9{JH{;^8Hv5zEqZ6h>Ls1Il}Ok`+OYq~zOE3G<$ zEhbqNk&mTzI#x9Gjb=mroT2Z4CGuql#cCl^HBmtkm=1lzG^QxCbJg{?lV>SjgUm6B zO#!(j*hz@14`_Be{f5B{_X%99Gbg=r&>i zJ4uu4OmtC7iC&lT`{ez`!&zod-<063`sT;!$<(}yPwnZP6Rvq>vS#Q9{=H}%iI++r zKJWvD9dE@Zwvt$g#bLp`D)e_(zj9%2B(!Y_V!2Q2E%dT{kIh$jrhezBX?*K^s75FU zL25slSAnFHI%b0D(kR0c2th>}1u;mQPR6vDnTysw}X(e`8f3%R##< z6n@H$PcO%f5>+nsQl{p9H|o^#L!((4CAG@CuiQ7heX#jX2!0x#i_O}{64ENW={v}D z1^kbi%CM^wkr0i@fovbcg@Q8H;6Y<7ciWwlJQTV93cup7@MHy_M1{=pP)Lib3rJ0q zyXrd2)ni6tO9fA$+jB}7&JV@qbFHZ|cO!AmQ1e*6D<-);`M|}loqYGCAFmju_0#ZS zO^X1o;5%Zoz>tbTj)p@EMK8l!qGuX!9LF;o(Y7looHV=U$3G|nWp$1c^?P+fSX~sz z2U?|2D2kq(x5T5Ql;@97Qq!*eE5YkdudxJb({o52Uqbg=76o!iyTuR$h;rl}P{P{Ld-pPwm0Mk`BLS!5pI-p`5@3JuZ?C*QGPOSc)mo@O>B--(1C{2JpsqR zq|T=@&QykdUXwW)ro7Y?Tr*9thC`*(EYic1rot{FH_ntlT={Wz@vez0aK363d=gX0 zUp&V6Ynl-Do0hD-qVu&Hw;HOV{NyD3_!uFsDLxA#Png%A{C?H?_u@3UhKX4xO9Lnj zY-zYlmflH#)cVYEdW35SAH45~qeIpn0)X82J zR^V!w^NunB8M}gy@7p+|6RL~Hk|{@)`?_7Ri_}FDZ+YLTR9d``5=h4OafUK}&XXF6 zyEHx(jlB{QD-Fnd)Xh#v}PWvsE*)SDh& zvKCx&O+s6?zd>bR8@iJL+LTibB7^~#VdimVVr0dh{q@1mt=j<~1m$jz`D@?z8Nfxh za8tHz@GemRB?(>5J*bvdW_K+t8PziU!@TIR320r`>XjE6;7AOD$4$N03h-6poykAQ zt(VR}mm+NxDQ+X0tkwF0y5*t9)nv6#uP?t(`#zfe9*ZE?SL^*Icsf6{qv;3(3}AG4 zCNN@k4%frEcfZx@63Rbh8nJ7G_0>iyd5=yRhYiE7GSR?;*;ty=il(GRuu77H2joB*x+#3+_(GeS7X zQo$9BcO6xCL3wNo9_;*5TBGI2yMKC;xR8d>y7@pjOHs>m|Q>JTdYHLvGIne7&7 zA#>(9U3D=!?<`Ro00hTPVJD^;*)6vgJ^vSr@N5qEI| z{GO-{hv8)*4S3F{&*@?B4jVyaai=`dGmC||K*BrruTF9kt587o9*5w8Um4q$ciMJa zr}S{Vjk`9E3_SI{%6#D3_Z!RW$mhV+m!uZ@m)&W|jCgRDhdpJ(n}B58;rlXp3JvNA zBicVw1?VSP`LU9a3)X>-AH;8Cx&)Eb8q3I2p`tAKt)r=#)pb_~Y$b0=@&T65VC!R~ znKZ}bv8@2E+ICvtrh zWRd@)bV-GY%5Fd>6qC$OLs!hmnwDvU2_yt^qkd;#G}WY8Q60j+v`bzGgW#Es3wp%r zG$*nWC~g7uCBa>B>AJ2aczy-ue%D_Kor}EWYhMPd@Mta-fiv=W?*l_u zlXVC*`0HKAOG7PsU%|K8@Pq4ErP6ZlOTRn!5XbyZUo10_c1jC7^^`JewTpVEw}Rf~ zR(YCCUjp=Z6)4P$e;G6bfwY~pXo-egGMqJ4F@O+go@>;J*%Ia6{zMqP zaR5+(5)#_;iO_(h`@q3pa8ot85G((zk)!^{)uODs1wC$7BbTHiSug*la(>39KkA`k zidXzbU;dufXy#zkt7ZxuKv5+W3opfocZn#>KH17_!dk6}`agxCCmXY|0C2K-O3ISD0+lqzJ$*XD%-MV{6u)e`luuGSd{(%Vq?TwJ(ykRA8j)QMn zuamQoVCBLWzr2GPL(fX_%d&WuRuLP(C1=fG(eI9th|o7*o~``oGY&++2>|@ z_mv6jmCDYvZxP2`SJq*>kPLsRDlW~ed{5EE?5UvuFpzGpb!z;3J$$~Tz78{KvZ7Q> zMs3}TJ>8yYBA@ub*YP_26TM;aZHML!Z6y%{!Gv6a6!<3l#Dc)mKnbt~=1PT^iZ7}k zB3aCkkAo+vmBR72ZC*%70V@OHD8Hl^HNsxBZOQv5QaM_*1NW-+Q<ME(rg-6TAU0D}x3ZAcmq3?!?GYnLIxkxM)Dhivha**(G zRU898A8ncNo01(rB)UbM-Er0HBqsN@9g-%?I(`zy$UNEVl9C1_3! z&{hT7G_FH-Mh%yVq+WwF14wZCIiqDjJnFZM7G8?U(X2~xGMaKJxJP3z1$^}RrLY-o zycFT1RhJ@v6n`l`juu>sS<`rW7Y!g9ok{-75ruc~DVH(B9?hN%Y#R3Xx>8y`_+^Ho o=wezt)xOl!9^M&iC^@~5a2CuA_$n3yd}t&=JkV9EP_d2pA47)HhX4Qo literal 0 HcmV?d00001 diff --git a/macos/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/macos/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..cba19f6dc17ccfca4d90db0bcd6f68478e6a5928 GIT binary patch literal 5191 zcmZ{Ic|6qL_rG@y*-~RGyGC}=5SdA87$p0WUEW67l4Xz*hCy}`!(e1=*{S4h$r6c7 zjKLtXWEpG5z6^u!^!fe$`{T7d?s=Yb&%O6N?>*NUl3Q(cYRk< z{+W8>S1zSJ)w5GoMs00d&k0GR(waP*Q2xZ0l9jg=T_VWzE<}$w(Kj#r+eb(xE~6Jg z`SgfizC^Ot268Ry8^NPT!OGac^#jsQIRP{D#`gaY=_w9_7xy+-iyoAK!Mm;AY+u)3 zG$B`5bO=f;n=JXP>4ktji4S%R&hxL3#?7b~mY!p)eo#|MK0S+2$hy^CIrIX=q+{)PZ2$?5izmON!(C*_yY7kl)lkMeJ)#eyZke zfcPRGB>J*DSf4NnzOv~Z6eNQ$;iW==Xi?wL+U`WT*GhP~EA10CW+%fgBr*$(ZFIZh zDCUc=VeF@B@1}vKb}8-1PK`r@(!w@Cv8tbE(ol1p%gV>^PHb!o4)BBVucfoBv2y8= zZ#rWg0-24RjDK9b*ZD`+=-?cA;8HC1DxyQzqeZaO#V`P_zK9^yD8l&kv_6F)?WyZ$ zjUGt2OZ16);$R5TT^;fVr|1)PM7Dy&^1WBic0A9F^XV%HndIjw*d7`tQnTQC={U^> z^5l%9%Z~X?Px^Emwzw|RyzvS*7z6r)(>h2vS3LeP6}#H6QdxkvBHG=BkVc~gPwPwP zl+r(DX*g4{k>7AH1!j~)f68Ed79Ledm10y@)fLm5O!dO3Er@ri1d&YNDa#IP>a;GH zhu0Y;hPlG-N$FK4L{ANuN@ylPXSkQv6_MlLvm}MB zT`6MFOM$bLiy7t@Eh3Sojm@z%dgw5pit{=1W{isbRp2(sq|msPo!|jCd=W}f1u8U* zf}d3kD}_+AcHXM(i^ba;Y+4a#t_rw_hGfLr>YEw1-P`zmlQr+y`99EJ zo0szMkJ{(*i@vFe;0uRE6X7D!pjbb!z}1D@vUpBd~zK@-$yxaKIGWr(_(-KE{4-HB115N(zvh@P?v5P9s7LTRm z-LkJDM17T4c6_=J8AHI@vgqG4t896PT)evB#AGZwJ&T3Wiy?=!G=jc>i5Z?+NsRT&-6zAZwL;BZKV~Woed&Qsdy>PX3p61j=^496x|!e~&}+kF-S_iS z9o=q^6)`^C#jKIs5U=?gDRc4IqcG0Eu7JD667N_TpoSf*j&9ci_B8=RN=}JzdL>R* z-<+n|olk6lMJ0Cdc9P!^#Ij%;KXXg9^oBFn-bG-Bc;m1y#pDrCF3Umg+N6zvUu>DD zD&=L94vQDQ+CYphCiFbi%O^I&4%vz&UGtNC$3y@>ylXtb?F8FUZt%Va`(kg-tS$f+ zkC@WgSbD0eBxM7sFaRwyNca((fXyN7h%;si3tL%$lnJ{_2sEZPxRd$W-T^Do_GaWL zfO5jynF#Ogrb^iabI48qKLk`A;=xgS6yql~#Tf?XAM*A8Afv_ii!~3c!<#STnkFeD?#0DSh5ck0`pYjekG)(art}}mI2oOyn@J1#+ord z@RANW6h-Td_Wa~uu`+y*^cK_aoS-n_{Jk@ug)=5fbGrs`!7*kl-j8SQkngXNEyS%E z|9x(SW)=!X$oQ{!qTLwRDv9o@ODgxwdKcFvYz_h~6_s?3S$G)QIZ{CXP8(pY%S{@C zqbKSAwhx!$lokiW8B6K!VyWQTZG-cth9^%_PCb&qP6z$F2)UbIXN`_W!&yp z>^%mx>zweY3Fst$z{)QICs53CV=Aq%ZmbZ3V%X_5X3PGkaL-5H;5G56C+v+!(U#UZO6H}D#5Q45t6n2g0}@(2VMNx@>J&Z>Yb^T; zZdMnUGmvwt3->*-WZA>lBfQ}*ge-V(2W#WiMgu#9mFYLG4r@_yteeEbh`Rk&i=ljiDR#$HJ)DsY&9PeCC$kLKi`oz=Pg!QFbT3V*=-LUGd8oZ2@LLBy~^Y}zh zavAs}+PX`JtU03_GxcfT;~V?PZ8$<|;Cz@FXn`72l0$H^*CM@;E$6lY*QXt3SU?6V zzW*>tz}`-NodNdH>2*?+#OA~<+y9kfRDdd(dbxoriMNy;!A_|3_uJ-{jnnask>nEG zeSNv0P;%DIf<3xB0ih^?^N&mPufpCk6d{xq?Z2=PT1i|rdubHj%IivjdOzQ&phV?b z6g_(UO_+OEx&$e{gb{guL4!Yd+NfBEGmK+K$mD(}XRvr?J%TIs@PBzop;PmP<3X+K zE%k-TU*t_`YX*Qj$MJAOdDjP}cOV0PG?}}1)X%qgUg7ufS+!y zKO7=W^VSPS%q;?tOEK^At*?cnWnmcJ(HyX;DX543~~W)AhGp6-Y=9ErwI?VmD>fOh4jJJHbB+oXinh=*eyRwN{o_gi{n&kFO}itm zGqv42Y0hex>#~Ohz3zI=Gs3a5FmS;sC2Xc-K}z3PgJm~iUb?T-Xm!vdcR(G9W?hll z$R-(7>)k=sz)g8RFGH(YvwbA*ct{aN#dI^9D)GNyEUzEoQ*C)U%I$Ph^E8Cq zGS61w?Y|J%IN?1Z90OaoWbP=R-RfHpt+rEFgf8jS{V_bD`^+V4eqnDCsKlLhZ_F<% zJOB1rl%nU8CNda6cTm*_xvwf7EcSN@v^YU4U{5&Z7hjU_61aubjX(Q3q<7CxkrJ}4 z=Z622r){?-3D%|X1)OEcnLH4R+ATFYsxI&@c6aQZ|3>K6+1t?j=sqd1 z6gYSFTgh;O=9~?rKDG#1Li)#~uVCw-@_*vG(%ijt)^V^}uA_!>BF4YsD*C^|Jgh#Y zXN*On)GM<}cTEC#V+>mXW3EGb^Q(usIhyT>@;^b!2CDQmz}p`rIcGNF-? z(3F!{QYQ5&S?k?Ea_6KWs8r>UiQZFdT2&~djJAW+C%{QoHeu&5Zq(FYYn*K529ph+ zo1H-JcE8-+SmhU=r8($(Mo?5rD-TlJk6`{wj9mLj^KRIdm*uuGGRPv5)sr%D1p(Wx z+E}_~X+{6}JGS%h==Py2~Qgz11q3OH(Lgz2V;UE6f zasVyJT*%J-wjVf?EMyWk*cNUb^}dY?sH&NEZ4kJ4BPHx02d*UKC7Qw7wD^2$af5Ou>eEiakKQa_YP2~7VODu>D)f^pf@09ifty zFJMoO{?r;ze6fNk9!6BeJ#_TaL{m>c*qGKYFjq~g)bM@sa;y^81B5=6<%RaL2Y>1A zL3zG1O!l-PjccshNdPTncRJ+b9-=zE;@8(YZg21$$h_4BsoN2E(4LdOZ;liI~feC2>@X2hVNVm`2K;;4L=$8*P&vUC<-M ztPzelJXCA?RCT8&@46;Sp9o!_Uh9(~9QRWf}R=G*5NBSQqnu^A6j6(J|cMk5kNq1g6`< zYF}6-b-hBLOmDNeZ7MdEb_8uuNfeu2JWB{O1YRM_)?Mt@9eI)}oU>Z7XUTM=L?-f_DiZr93da@MH zYG)Vu_9pZ3NV$!vwrp#C&O|CI8g)4OxCcDO;98bWfDYAbef16NVT^SW$4b)aljfo7 z)K>HV-GmpU?lv#P%~yasPagqX&bcj%jdfkyOafe!0F3rCuM1H z{2*?I;fE~;oX_^;^IpoE+36G2dHeIk+0ox3+dA~Lcky`kSK5r)qY5woTlH&pJt_B6 z`)8kQgU#efs(ob8MCPV(v!&XmAPcMtR~Jh~KiHn=8!6;}Y%fDl{CvP%LL{RG=4L&j?)jgMXNDQJ|4-``^ z$EO&@aaJj)b}wk^HE-LV38*xcHw8}OQTldk?@WMCrr%#@jV+Uzk9`UnFMVygW8g@R z!gm69ihgV))0CS=y#RH{k+Wtxf;}h8fpPfT>)$cOo*dbUss^hY#wUVP15U45Jxl$t znA(T21mxPWNn1M9ef_g6Yp~>0RGZ#@l^SCYt9={GJd6s#l=`#pJnQL`cn4T>iU}e- zcrJF_%xXv3o3=F(J9h1}Bh?`51Jwo}@cK-jdM z&W)h^3hrsK6@@FI|Gg_4_bL7C;C!{yXR`nKeI1*3BY#<3HoD&3V{jrwmxQL$k2Y(MfE=yBW3i4&{35-u{qfa$=|<{@lq2uh?Yq#X_cjKQ@CF(9!~c4D?d{ z?V)xpPuJRGu6jqiPc6w!;emA6G-hsARh4J28%+@Rj})7_KR+Q@4$b=@f>#x^D-=Gb zCc4t{&5#oWOc*Q8*pa@=gKWL0GieS(fW4snYRJ`NA;Dfimc*O|2 z9AbC&N)ceEKp_YF?#n_C=Hp~jI7FWAXETiAtzl0mSs@Y zWzYd69JDtKyFO`Hag8A&5R{Mww;(4h1UIP7LT?2(2Scx#-ut*69 zEE}(HHU7?zkgl1aH983J++pflWO9e!YQz;!Ag5jng{-NlO42GsS$KV`@OQkAbj}C| z9FxZ=W;9J6q=N7Y$mNeAr(HMN67>kn!s}m+|LuFVh^oA5TSg`cQjNImQRMXNLqtSN zSTfBnwbh^oA`3h;`B zc0($NJaWleD)<^Y{=|&(ON9Eh1)wEaj0U4jS-BIf0G2ayX`A?Mx-#d?G`lU~xn+w?I0wskEdAl4SCAackB_aO^!GYF|i2qZi3 zHa~*@#oMtUAkG%4AkOba&bu9ogN+gIJcj@ITd^S^E{IrA%pr^KK^EN+BC1!hAtKd* zx8-sC&)$p`0daIK5h!Mn#djf#@2oD-j*lux4wa7dSXRDt1Tjy8J*6%16h1` zG{UmM$>42y693cJLPU&PVEHe7<&?OBwMxA{^0t*^HY0j)r^ z20MlRbvx`EF#GA6LYmglr9A4#PY^pnwAmqMg1gHxQtQL7 z3c#5HfA2P!>>hBsMlqI+c88FjIR-QJa3~GOj)`X;QGqFZb`NUZJ?Q;E)nO85bel03 zXZb5g_o1<4;+xr3V7k@dZ>YXr^xr>6Uagh zWN6-HCe8ex(U`;M;VgR*(%n#=7^eNIs<1Bl@wBiIXlM|p* zKBT9>Uq7Jw?=unnR7V{qi#_{HoSR-W>$b9cK$yu3nX15aoj-P>`d6COaxwyQi^d#1A7|o@6(soPBmB83^ZV$wgl&v zH((?JQ@d@J#^0iZ$J4XVFiY;B?#}}H=TBQZo~}+-!i1HMT0n5zMWZ!eiI1rO$@CEH z{FvbT55fUr^qFHo!qS!t?fqb&=5ZGIF3QbQF1hIX%Fzl*b()c^?l`sJ_SJ(Me#NoO*|q38gCH| zd3i40@xWWTk;@ljRMZH_AsQ8A*=1+8XQsRIM|BSaQJLVpnf}!bXdc+q>ajLAO4OT<`AWm%# zMhPP{$XH;+(S}Zjy}Lr=Cigh&e;6?A6c{Gj&?&Ibk&vth-SF`ls5Yaf19HPktS3g}G=7VSwa;E~ zX)B2Vd84$>+g=YtkD?8k48Q26Ff^anr(;8`7P(;+R^3RP&0iu+uk>$C+DhVN(s|u1 zv_6n5hJiL@5_Iey9K)=IjjOThMj`9he=mlYd{J5#h|s`JgJz%&o&=qG1jNWFj7@84 zt{a6@zfS$`*gv{iJ}9jRB#WV;4W0{$?otY1fS-AJ5GYu%FZ;}~9cgwi@dJPaWa zr%i-?k14F0+WaL}-6))ms}W|~yfM7|7)s@X2u(dN34u864#a-P6@bwOHh-l`#)egh zSi2u=Gj^08LaA&JuRBD77<4=0fIbCb$cC@g-PE@$3&Qa7eJGU+lErWkgKk3{*bfr* z!7!pV(D)5j-AL?jR}=-q%l0Uh3F2Wm4&u~X5eM}z45MiS&2^)Y-+WqB3@^DTg+Hl> zEkaW#(yBK>8hib}cS^~~P5Fa(Uzyq#;^aRd4johgMhvV5tQn)R*Z&I< z@32!bpxi-(P+i)YX2gj%BDxF?-hdl%u(n{$7=!)AdnLhuat84*(n-XC8xV&Lbuj`o z;6@BmTdu}wgJDPyBcU+XE#1Ur% zEE$d(Y>`S}Jvjz@&C-%%K)Hcs!=JghB<{ag|YQlp7WdY)0 zG$Q&=KpgcuNCw2vO|V^zmGeV~0bvIbE=F@BqR-`sqt8(oc?~zpiF90yG}coWW3QNp zsM$4i7!Ya@cMx}TBcjiEM2~YJ(GU2cUA=7tsnLJJ~P>1f`J=sgb6^E^m4 zfaY^|rK1MEc^IF~4mAdZ5+n!XxN(SHqZEeUv9?(Z2kV(jvHvqG^cWCE5D(+nv4~z5 z6ow%ktY0`V|JItjz=Q~T%j=3Klu0%37Uqqny{X~3j4#E5W?;dKPerEbijxs*T0Wk z@;JoX`Jc5aCBlf~e7+d_y{Fy2DgQHH!;})YA!@XUoHY@-?C((1-XDrkr9(gDB%%Xv zKqfW?pEn& z7iGZ%IJ2gx$(DXla8XXY7UP)F$V7RdgcJm_DDe)+#gAgonhdeF`J;#&l#{Q+=sB`1 zN=k@90Hm4;)n->%HXVER6c;7WHYJO)1!Le17(LGmJxa(y+&H!x%(mn)>^XP450Cy( zu$nLi-iXoT+)$&G2MB<4Q5H|bo_nu<6e%HfG?&J0cU zRi+@Y4a&TGa27oVaUb8OWG9QJhz|KPk;6|%CQ6S|#vrg2MRiCzi>IrSlJ9a!In$}5 zLnjjX_0W=+lrjf_ttf4gbEe=dald)=g<^x9COY&^B3%ZTw4_u32zZUTFx$eMNjS?M z_ldG~eU#|wlZkX5RI-v%At0zmS^&{nm^BgS-5CK;GA_y#BArhu$=z4wfItpP8+iK; zGZEGw(q^px;hG zsaz1qK{1hU{1N%Vi%`?SKZ+K?9Ck1I{(aP7ycR^MY!Gl!G>DkU*KS6BIMYS(Q+=gC zGcbqUhrZvjEs9e4AmF0tphuCf-h}+lu@3L;U=VfUl&+Y6a&8I;xm0`43V9U=zu z)juGYzwWaMceaGXb!M4s`qh$wyLz` zEK(z1yb4w?3Q$rKP_rB6h^dI59vm2@3gX3E#>r0Oyl^F~SrQ0EwAmeV#3P8G9HbUN z@QG45h*aZm)eCv;{C~po4&2;iQBpWBTmfsB21BXcL!s=kKhkGODG(^OYzt<) z{C;9awlNJ|yw&G27S8h%kZa#nC{mKw^f(Wt-On&bOhenO0hi61{+(XmU<0?vp~J6Q>@@BY4c{a4W%GV$GT(y9NOvnaN|2)&7>-fLN- zHOQuo$W345b-V>WTDnzM#0;=$7+-L|U8JLq&rT7kUqjkTVrSBboHe}U_Q#O>t3ZwW z(hb!%<#D`)KkJvni7g~j0vZ@`3?mL!0w(4L8*cikd{EHf)p5q5-A!=6{HAJZAx)asvt#5u^Rd+ND)(v a>g#`IV+UiyXoRBx0000lFI5j9T35W_r-?q8L9)2fMrTppp^R5Xp{=YF1s+FRS`0oi-X56#0L(aI2Zdo?q9b$G_F2Y!gd zlPVh`^frYKmwmxsLOB1d^vf2)`$z=-eNDFQ9I4{}r04(FVg3K~NA24ywkoc?bsX!& z=k)5!C4Bhdnz=ZTsHmk!jJuaWZRhQ%b)&h zn=N>Y4C6lqd@I8Lb?>~$nG>~(a?*Wi=Kt{;eIBo9a|_N{o8^$0olr`)PW z&rf9OlY}kGD;w2BuKl_?yjSe1$=e@S=yehI5~H0Dw);k-5xt2#Zv2VF@~x-$rsjF)Ohu z-f4TT6(O~u;Y`I*T`T+6GLeZb=JxK_;=f(NQp{utkAD(5oV`Zuh=#T0Uv7Kyn{y}` zCAq(5ZnZ@}xx4;C2)uZ&y6OJaq@|KkDc%sn?fOYwE6VowU;8yea$CcnMtFy?Xnff{ zv|ZOFE(W3(#LoM!l*)UNQSyAh8Ro5p-d|sx*?&Pw*>OnVh#HA61g}ajtTQ>kW7mNS z%MZFAbk08RNHl#{TKN8ZzMhhl<2sw4x}`)8pF4JJ9rFt+S;7f_Z0Wb}w-jT$HSwnH zo0Q}4efhwV_$lts@Ka7s`61hF5;LEO9J+kc(P#2a)5Mne9aSqvuPvTt?l`hdkrMBe z)o#`PhkmSSLTpFo`HIR8_Me2SyRTPRn#{%>S4bFY} zHrUOn7OT0co|RbljU3&xa;eKla$xUX^B1mIoRgJZ`}e0W(`Ff175Tt7N!J?j_=q9{ zlYJUdi!U$P{X#hClJB`=lW}~s)1tV0@QYD*jigfkb3)hA$ztqnC_9odHdECddh|oT zXTalVit(Em0gsG)EiE2lXD?MCc9u`_6MI}{jgcSvnxS>7v_O{A+W3vt0lGK0%6V`t z@=xt03_Xss#YmS#`S%H3p3!N<&rD=qVoR6}FWsidR3+}-P*&2*hluX*9kZrpa=d3| z;=#|4*~z-I2?~ODezFlyBRuV?C4WSS_osYS{9Wg8@I}~FTSq78NPbCf$##Wy%&+-8x^JWpftp8g91NGT<~wQcUWDv6+L3(kf6ITnWOSV6rVQ49a}*! zqGXd0x0>TIZ-tNN-031y-A0Xh&3eL+$>|vnIyUR|Ib>2bbWFkIHCKvdPCug&?_>MT z{oY2sHE*-$2~&{}RKt7S(|Luv3fz0bf?rq6W!u!n3P#f#{a0&H5Vaq-sPl2D2gZw; z#H5nxNh%k4v2|5YIQw51z+v4|C+uwwQqHF4{}}AXBE)pAM*c)cn%j%96J|fsnG71q z#|is!qZXC_B2uD$&K>4`N1Bez7+G7%>~r)<%|^|t(yfciho7sGJt~|xM%XKD$T@B8 z{PtwXZ_R=ar$SPiNgOwIUhrUjEt-mLH?I-B?DoB8a8;zn5eT}6`}cDMHXEy#0>}0lw;RryA7ztm_Ry)3CB0o-m;+CqjwlC(mkCGxa%IX1vmG`T=CCc**hzH^ z^t{&FQ3_Ulz%~m=2#O*?Cvqw5lRZ%I2a^A&+YfOHvjQIK{ z)Rrwx(gfHd^*7FnZUX*_zRylJ!KpknbrfyV7dzJ+Cm8L~8AV6^=7RAqhkZ3Qza`{) z=D*08dANS6MWkc}eqvRgF=mr3_rLP+8Z`|(p%L#JzqmvzTF^q2=3JIM5Uyjuuo^V< zNZids>`B;X#3Cqs&j)CDxZJ%Ft+8ONp9((WSnoIBoG2<${Wv**!sIs=@F>_OSHW0anEd{@&WlgCGm$hd>&?_UznlI^S|uMW$}Neg#0{Y?K>J{ zWpD0f*hb>bA$~Txraq*F(x{U=bl6NpAilLo@{%!b;+D{98cOb5)H*an2@1G6ElaGN zbG^|l!2X26;hE#%WLspK>T^db)M~K)Gb-6$ZlRHsS2U-}b z<@p>Fe>ILLykpWFSFCV+=1MUpzrZrLJbkul=gL~t_oL!+lN@0u?a3|k^bTXGA`>d1-(6IfGQ*}B zp7c&+?oOs?*GA#gDm$1&E0+IMsL3Gf($K@DfTlky9&M&0=>;@2!MU$;02&vDOn5uY zmbNpGw)}wzjGu~j?GUytS)d~omu|=xCV4CKSdzvbk`{9b96EKQDM6E zxHtQ0VL{1pHX};r{QJH5QdK;nBTomuYUbC_-1x8IEP3NCmD(rzYT+)m;YqMRx_gqn z3K`yja4iBRpBAbpE0q`vTi+12esY$AmE_h=xeTdCQ@z%2ZhMoyFp9>R7SNF+r4qh# z`BZ*n)nZ&#d%7@utP_S01@O$!+*yq&-P|AL>a)2^lXPTza>Lox;nkH2JRc_CZ4Te@ zZ*E_J0cH&DFUF3#Sq&fY9gvT%@nTb7{H;T`qi$SW0T#w+wC5hZq%kD_e)){Rq|G90lS*eLh@Xx^RZQp{%3Kc4-^S4B2cFw zj4p2RXv%IL%>=zXO&o zz$8vZ37tSrIAxszB8S9mYgX_Z+Y?>;+)Iw`L2|+>%ECrXJ=n-#e&KFKCB^ADQ`~=! ziO;MN4pJZTmy2Y&;9gz-KDqk++DdkoXNP-{+P>ns?09F4Se@*QT`70LqrA-T`1YN8 zo+8Me&55e%=H9I9Z++VdYrmoF;3KrA55X2@~KH1%QY!pR) z(RrgU9AyDyWVO%r$aLSMclzOUc3X`7PO(2FMlnl9y1r$v3{=>p997K3CS0fQP|KV! z>z7qR^H8OQy$_}{sU)rSlPz|K7H{9Kw^VGBH}aswo!sF!=4*0&^)(mj`kQOfHUqZLFC;9`ipaN!jZEzL z#D7569#;t&cy2nnPiQM;yxMA6-{FegIyV)fcc;JQt>*p^s0!>)xg|1*_261?Chh+M z4HtV!9|MGrDCr1|&No5!qGDFm$qX}a^m$lRzF+(KYY05x!?oa|n;PX^!akaYOhX<5 z>0IKm4_TXqM{3w_Wuj0om)<+MgZ04Lj)G}+HVb% zb})d%MiQA=_7@TUFL*gyW~9U8?4e^9wgg$+>Hj+OT1;nl7mTwnL6BXkHCz}rty<=S z)i`0|hs9?Sgm2wm*I;lp$NuTX82Z8k+@6fq`|p|jzcZ6?*TuRknM9?=SOK;&C|vd! zEa00FwS5NtP3=P-QO43TZErjMUZo3?i_?hxaMW9=@l>7Y82@>gh85JKN*mP+Ax&LPCCpNm@z{A1%cBd^ZXC9H+8=`$NWnYRDM*Usq&9b@n z!|sZIZ2$DN)9w0eW9xhu9j1beZplB!N!vOb+ax~Lvl;rRbcjcNJq~ZGqWRStG_AKo*$(R9uaTB3-0jG z7o4{5av%#ZgQ|4%C;25xf%J#qQ+jed&8s=KwZqva6~);2a}(~z>hJL=sf^}BLKTIMGa+U(ff?dXwsO&@@idE)Vg!!GjwU38to_rZB#8osR;`YWT8xOft z;>xzPjCt6yNfXJYjp*FV6v6RZ%wBBB5cwt&F!g}+I5Ed$m+b(5R;Vcb0j z{SY>l^sLa0=>_WzCcO#Kx3iaP5j#Q0euhpp8!NC=$xSlh_{!Di$@5~OTrL-`uf3Sg z7o7^UKIV@ejvuOddM4ifVv-NfBU^eDWkL7N0-xu-3qsRqs}Pd})Mq-hT-VeHIUcQM zE1Y3onZrF{P#)s5Ql?(BfIQoG8fhEO7p}s<6*!?8gSLc>8~GH@Wo8tDl0ui`wq>- z2TsVAumU9-(QSre=ivNOT}o-QWmB&nzmmeFPWgE)uYI8nk;6(0Ib|T-^(@X&+K0(g z;2jU0Q1cg5V4Pwm{XILm0{Ma&t{lazFJ<#&Py(sN?gQJfGZuV9c`~lW6DP7(3F%El`bv3q_X{t z**;c~V`Pt4E}N4yeT0s+QQK=Jtz;Vdm*jc0ieD*TRIexGFQtz5rXaqM$~XB&mxnc? zT4pxO{>9%1`M5}x`fOAk0~)q#?q)ThzJ)1*Tlh~?t>t-lB9e>DPp<(aA|{$iJ<4YI z9jaX(fx@4LvnINUajX5^h91_%Xi_lCQh5q;VrLVoyfzGqIJ9v3qbu6{01E%)iJ4{V z$hsETE4fYeB04%o#DE3rUs*?{0_(IF zVx$jtP*{*3GdlcHNM#@)lXQjjPGJjO1Wyt!i_6{G&C|55dEd=@ydE;bEk??@1&UG5 z+iTG|6(z;%R)6rLSpqJncbLZSGyLG3xHSCxs`^euWqDb)A9Ns*?A)tEz;m!lRxie8;#N0R%H5+J<$O^%HKq96rZBcB z@+3}hT)tVLKk<-9z^kqkbxI{J810d3*l~7@x-FZvLyEjaUpqZ7+m~g^f4A;~d?Zu$ z)Rq>Z`L4dKZTv!169>!tp2|N#bSysx02uYF8We8$FJseqr1@e={w+>#R!pZW7M6$T zmSky6ufS8`Kxa?(xJ$m6PIu_P+H_W}>3Nz#X4Z`9Vk}Lq|P~_hDHl_ML{Ug_P6U@9_-d8RJ3IBpY@o*vqF!aegihmj{1VdkBg6@ zhBlI}Gw^Yo^K3*#kUIl=ds>C7)lzfM46wJoQAXX|2Rcil(X}sYFMyLmmF+0iNONdx z7BJGREn{Jq7R8k<+wz)va>J^`C0MCw+0kBNhsR@{sWQrzK)!_r{E#CCoBc*7YJB)( zd6B#yIAd`qPwniue+Aa{+Sn<7bZde$W>T~_o*Mcgl!x?w5Et}$Oa`Dc0c$k6|5&z; z%JANQ9|9_%dmo*+G2;8v@A0iLp^7*GX)CY(kFNRUc{p@53q(^Q z{IxH{phxcXTVg8mR<{nb$-zgCh~=C#G=Et2-30sM0GReF3gQ`eYD(za4hmWvM)np{ z0I4AdE|ax9YvpHab`o+T!0nYDz5dgF&nJfkN!=a1<91#DF88!Y2J-ge^)*k>KBLJ| z)RBUPtQ9)~j7EIqe$DY_eq$Q;hLQHYm)QM&=duk{uKKVs0{{v>ngnd6LMHL{->iZ7 z%cD=L7N1aOVC}a$!ik}xktKB1Yqew=x;B;jac8$FoO_OawajLIUe!!3RV_tl!`n_` zcf)Ot(A!=PY&aMv7(DW56g7S;|BWpl@IyZUGNnOLsl1EikazHC)9U3%P4GRm94CUN zi5kD20Xp$4U`H(btB^25PNdn~ zcvd2Kcnb-;MB3CLbh$$o0@EWN#nk?=78!0@9b+f&xV{cAAS(J~rj}%13bA6XY^Bx) ziglevEho{8v;EH9MX zNyxpMy2DQ2iSc0WS%)8wlZ~eM^2YQatD=Mwlum@ro(YU z*m}!1IA$CtixD{WrqwxuWQh-zYT!_G2mYJB+8wJ_JsZe;Q%^j^a2#9i?R;Ma=E7zK zO_K{TZI91r+vU;Rs>LF3l`6DG?{v}e`=Qv__L$}H&<%x`Pl+H_XNe{qJX!0DL9DcH zvZIbxvKGzeY5FIS%=ZM6LULup6ZF<{$guV2_D z_XS`=Jd0!wZLTtHmc5ew1=>W3NlSNj^#J=(m2P<%5*pszy+W+loz9UBc^%sBfd1=n zo$)y&d!P}G3!uJUo=s#2li_yhlkQyAZl3tLZ8HnxV1u_!@=?Z7MgW7=VgUi)3a2~d zS1H(1kO9f%5&FMEd$E>>b^Twuw7L!1F_lXdm;oCZjjH13RL!KP9+XSYZAl0fh%BxW z?qtAMn0(tNG$ujdcxuhn$nTWzPe)$9W?}Es5L%yh;r_VH!))=Ap!4GAQ}y>j`f}c* zFJKzsdr^>*OFA6ccWHUkv)R-9VDFI<`=@$_{XPq(Yf8wX^91+h0qwD*p^g=~5uIgw zgXcNYS}(msVQF&!2?}B(?V%hN-j-e6de&b#oGE+#Rd7)F`Qkn9_`$uW4Pd)EY26Hc zA2;TfsUY)yNXEeD3m9BA%{XVQExR}l+AO+F1`&2?XhiLJ4?fWKJK&%@lie@sLKq}H`yz6kbx%#~Z%AZbHJ%0VSYMP0b;hEW zwC)ZMi5(jZZ^r;<k7iq zaXD}bw^KKQr{WOGaV+E86)9!)Vq|sr<~&!dF8569>>kd0q>6=p{(SEABgLBrY|}+? z?fs6w*oA{sAyb~G8Rvfw#{om^t71-AH|Bblv=g_L0smrp@XuRSZBQ>v^LgG&CGN^h zo~Vp$8DRxMLthTga3hPU1LtG-CJ-+dPnSJ;*UvN8x%%9B)bvTFR%fp`HVmNdOQf)y zq9?bY08K?9aeHH+w$Hlud5O{nkNSV=r0LYXxp9JLSEh+dw=yn|K7z7A3$xK&h>n*y zw(3^P8RsmL3gi!py=m8M;6SFD6{HC4A`6j$ zD;L-PN;v=i&u1@c=dyEa``F`135{>^-jTA9Mg+g%x&Y<5-B!Zr>?1!SzZ@^>2J_tu z=tKnsfOeSNtKX!x5PK^FY3X*rbJ6?$vT@N}9Eb~ruXm(e4#<_~kpQ1kgOXhe3itCO z&{M`hqGfw|6Zj}Qh2e4CUL&cCBi`1_@ez~XLjxxrHo@o)*tya~Pdc>${X1F@w%+yX zv&BeT1IlRce-PPA6v z?@mUKgFe8)R8i^Uewx5%K|FGgyXs{e|>lGmLR@R>h>Nm7Oi`J1m+8j`t2+ zadW{+lbG0Rwr<{wSb=z)2fiIPCOUhbdHt<0{RC94*(Nz<`7gG%7bC}^TSZ~Fzd7YU zjcCnneRSJkstqZGN^#Qg*eWT*+fepNLq5Fkmid|2)2bn{=~y0_tMWCeV>`kYh-`|1 z?F0~tkiR?*$O_rYatE&-tg-LHw@T{Lu^?23xL|e0!P9zvbj4@ z=#__!(%!8@P{BMuIBe@dK&OqvCYps|6hIrS`@+W3;?3RkB9^<>5(U zIpB?h02#LClb80@%m574xPFOwy7m+;T$}5YNnZ!gKr~oAF!X{GrHK`xOk!wr*++hDN7w%ppu~(vE7i zZd%QhZ*Yg9UKR7A%a|RLR33Ks`RVm{i_unv@mn~6rS;*1r{2J%?4?ck=_Cu{Dtjdx zi#5_+d2x<_$HV{_#iSO^x&C-g)=o@E7^aWcD3?3m`+hM=AX@@Z*N3!_#rVr z*R^4D7>ElB=zdOuW?5Z9u% z>cM}_uE}W42vIV8+jJC)Ju3!B7Lr?67jNpE{|lYiQj2>)0TAn?)^CG{W}bfR z8LAlq+_*rVSAOM8`dnviBe1mq1&sYNq)7;W9>kV)r6Yk2_iDWE^P8EW{SWRqIqq_z zu0Ci*L)&&k*qgCIlhS!HyLnInwrs;+?}x*;nX?+JR7Z!?AfNXZoM01w96M9pSb=2R zi2V*}+;lH;)>ex{RpBM?M%;(20m+YxY&r`sBbw6CDzdiJAKne^K;w&C3c#lt#3loL z<~K0nI|ZAj zX5eoP2R{RjA`g75Kdl1mLAy1_p-}x-5&~9)jise!Eaw-(VNr-Spx<%A`g5!q+_|KK zv!*VxbmD}tm!&*%wk!4?oMmmN9R;axmdz-}JHcf;{W(5&*gAzjU@a&?w|4*tAIy2o zBhR%lT(l6_m@t$3I4yMWD<}q@rXTU0QJ))Pq}I?<`nMg6gJPt)kIKUSUViW>JQ(O} z$|gQ`#^mb1mRoFd!h8XGnnan{wV-eM#2+PSHKxH^l^zv)jn@PQa2UcI547>ZBE$XPT)ntAD z4YF|bA$6yX9E@l+KBBjwqbNrg=v0wl*m(ct@`*g`Wt_mYQ47{4bw)ghFc!qAUeJP( ztC?crYO@rnuD%9Te#4bng+kB~=-HOa!x6Idp2Sb2y-WK!%L;Pmj6B@l0RR?8>Pl)f8dSvj#Fz}-~-fb;Fl%jY0UxS%$hTgTWddd?hE zIaXv30o4am^sK0;ohrB5tI%!;IWa&HwQrOFTswUFE%<*QBtAS)HUhIve1>ZiK=9K9 z$;#sdb%^+RP{EvOLREnRyUCOtv*zo|5-QE-dZ~bN6)~7d<7PCP&WV@mdiJ8_0Ebpb z!)0ORJ5_Qj0i2`qZ6Bt_=6$St3`Uaxqg^9INP(_S1IotqimuN6yCxbZ!~;7X364(! zX0r_*l*PtG!&Tbi1=&^-yic`~pAryPSa^N8sJpW{dIP=4eJJmhAr-=g3u6T$f%szg z4M7bW4GKG}bBQI#d^ipr2I2Wo7i{fF zBUZmTq|cN1;T{MGxIlfDez%cZb>%<2bRZNU~{)@3ERgjUj?E6 zoCjO>&c~-zu71!DIb_)9g0~)^DVCNGd~vUG#22QemqS)8$ko0CLGs74;^FBF#pM0X z0y**{9=dj?(rtJ_*v^{yA}asNYrkV|$IQ(3!7+ST1rCD4*>b#kQygf!qSA!=I9Quo zfx6*AfY|-P3x{R!2ad1ZXI+*e@KNKX1GjM(Bu*)9<5@BMEYo*WO-9O5cjFTS#QrWs zwkkjpn&Asl2TNTmx5HKBR;c|#qnWbt)1i}^J>0oC>TLPts&s**L^AB3YTT>VL&%h? zIQsH=YdD>kU)Qf8N@`=9QIPy5bnxPf-P}pn*1NKx{kmDvWCU&apic}pDFI0v+kJEc zpi=7rns^yFO|119r8&!6eSk@YL5Xp={^xzxJIzlFZIB51Je}<~=H)xHZe7eSrCkL^ zaDH?^;P^GyIBeuv(D(*qeDHEAQx-?5uRSzi%SzL+`wG{__G}4p=n+>^`uJa!!dbGQ zGfD7yZv2BOKhg96M?B*`tnr}}#%$K_62YHe%E54?g6*{GHYN|do5v0pFnafio$H5_ z&lwr?#8;0yczN=o|12zWgASwyV;g~8H`n1Iz?-)KZ|+=i)a{f;eB|}!UCF?K*zlRR z=35oekJ5yGGVd#!eXF5x!!d1@TNqf?%|3iAl8mp^2PO z4g0Pd_NNO?IY&_m(pTBT8^AUt#X)Qq4ym3tX3I+Gd(mmkIV0lGz2JlRJ7!=z;2QFBWPGT&q;4t)M1YpHpmCVG zb8TkbmY@W18ktvf*@4ptI|7anLfA%p2u}>ystU=9DydMehV*R?vd|&}%z1-?`2z8D zmnr*(b{;0~54*bR=oQ2FAcnoil;yZ!jZsv;y*0f!v@Jd`iu-ic-hFWoLIwDXg5E=P z@z=@HgKTi4p5v(L=6DHY@Xq|K0{ZR_y#jmq-}kaFIPG8!+b0QJM^Q%W%WU9~^Wt$# zJvKiv+Uf2#z`hGJaaj`7McXL|frw}J-A4tz)Wmp5Z}bn%-eSnc1u1M_R~Pnt&SS!kU89986R(P#zuV z)z16))HDA-YLONE-yur9DxJ_mau*7b;?R?K&iUXq7#!6uSaPc}nLCH9)1>8=J$DbLgZ!6l?PstIA7%JwlLgpkGUo9*(4t(c79smp^H91G;@d;hrV2iUNAaXfN}62La7CBxoG~IzI{(ka>ld1zJ`RtDSIXUVh=`gwPJ2rEX$mi5J;`^aW6G=?*x_ z@K?L<;gM>TH|0SUAwKW}bR*%>PWjaqGf`qL=VJ`+rzl|OK+7EG3neF$`ki$$YXh0* zi*0#HHuD22@6BpFTZ{&L%jD%wLje%cVxwr$h(fa4*VhkphbJ^-~8q%{JS4`5N3B0M?sx;+4eRO0VG>A+)y^`)GH3!VzRJ9@Ej=vIC9 z#j;C3Hp>z=-G@b!DTJWbNx?)^AIV`r#ykeLIU>2Vt_#+yFK2#267(*&CS74egA04^ zh6TGG0uw$O{~yZPgRypElQpiYfE2ChsoqR8jbvPyK9dYP5g+(v;c$8r1gsV``BNOj z9mw)^xj<^uYFyYpdS~b6)W-i!M(;<(AN5IOHu`&8V#8I6|dZ&v>3SZdbAfqB|*#G3zCzqJX%r40L*j}e{nDA z-6uDzKQ<;iL!lFXN*^34rr|_1rl&5ZSft6|JSDwfX;z-BG`rF z9VL~{nut;2c8P;nVmh-!#~KiAoKuN2 zZLe|w(R74YBy!#Zw{Rh>R(z4tf*Z}ucPKzQ z5HzsuxwD|(uIK>vIP8h@C~ZO;@8KZyuxJI#|A>yE$=4Pgwj6klriq!f%X4osiNID- zqc=+EtqJ>Ka44{qv~=LpV{hOF@yYxHlL?FVqa#$du15_29Mm3F4u*-Lz=$`X&iZHP zjEl!h3kBlXmglt{6A|BkA4OM`h~VAbnr;I9L*{#y`~1Vz0m=vZmp)hd(W#uZnyrzl zf)6q8=F87Q2HRqQFMje~>nAA!+*s@sA}E`KZsUYJAWpC{Hgk82$G_U(PEcA{3c3}u z?*$~n6fPeNvu>(ISdi)X?4ONV?e9#df|2fnWUrINtAzOAZ*;eK-|bM0&@BdWg#Q?z zc#8Fh6;q)dGJ+c*DFD2pFL)aH;c_VOBbi6LJmpc)Z)N{rZ}r03i~>Av(teH(#dP$c znqH5&cmdD?MOlJCwf}?ybskQ-&f1RF{Cj3afG82V*Wq0paFhsPOMZ}vJ$nT0OscQ zh#c0!W0xp!yc}YoLVr8Xo@f7R=@4%WXK-FvX1xIg01rq^Ae0df;hLm;*OTm9;8CVM z&#?S2onOmu_+qh{1I}`C8|=R)duLlP7GZyM*0z4^gE$LSN=pYm30=Uc$ekOgUqGT< zX1eV~*$$|sH|NQY12N&+mScf_um9G)Yft}!M|2|Y9O~d4mwn-vzQl7@ERW?C}J3)m>(44m4EYb#-;FNs}^ya%SLN^kwfxHPZs)svl>I}!i% z%+8TXVzyrFUPvyJmp-J9&zGa$k6)O0@Q07$eXFs!0D9{g!X+QbELyHklMJpHR;A;3 z`xnixRX5Uz4HRU9)UyHe@{sydWVS2z`}5k?S+8S7PQzOu&X~M~oGyL``GiIjTF?00 zEKm@N93ZzqeRER;Js?;iJz4lc1m^91<5Hgooe|e#4m$&QoFCxSNqI7$%_R zp*PDmHYkJzHaqY%dbq_Q#u`aQv%8Q0!q{%l6+guWtC*Ra6`2N;+rI^Y3h&~mI3z-1 zd$bT;F$$sLAe8QjTfp5^7VZ{@ zEp0-64F0u{_=k@YaNFU{bp*mzh#6EvC%GwY&lnUK@vJaF;z8x-xkIkvt17Kx+-H*( zGUBur@V@e;J1fKQd;p-V;z1gZ)t>(B5dY=+nw+U;`)>PU6`(Nlk&uY+WOsKCn}&pr z#(cd#nT$K%pX&(W+5j1m5~BBOdy~00pbhZupjhK>^`Ml8*+}+&3PA5rZ#Ql@o1PHu zybeOzHT?3+!8UCU)v-EGAp0N>*a!};u6(K|=qMy}`$v{$}u9|$OXg37slc70W56b6IAa_N^l)$qqAI8PyCq_hkVe8|3 z1QXWV3B+a)K@tNs1rBmN>aI;bF2^fmdG>}i$OwQ%D%^DdWCqB~RjQ8B_$EjT zPy@YlW|H?u2-k!@+|_I#&N+J#U;G%94mQ@R8~(jL$;mP0QXZn`xy#Xca3GD8KBtB! zBrh8Q2_;m@fUQ)39;wN60qO8+PGh#%Hm#oM-m^_;8p+{AA;QA5LhYQaO_LnK+=6(9 z2b9NSD$mt<#7rQI+5VusNQ!pO2O=Ks(jY;DaIwS4; zPX;_#UhG_17*48Jp9M;ETg?>+JFLHK!AH-sg&j2E9Y{lITk4CIg3hKBsg=r8T;I%1 zte9Uqh;ZBf@-v@H*k^D{CXm)i41WwITg$3@_nfv@Y+bc3y2~}JuqXgB?SV-m3sTX$ z;|so!AFWSND81|u@3goi8mkP3Jw$@C>h}-wxTON%DqF1JnL3Y}(ENDL257d-*ZFVY z)gc$))n8ouWW@WtYeZ8=jz=exe8TwLEa+`J~0>dj{HxS*J*Bu!| z*baSFEG!@UR%pvsRdpQFsShIzLGc`J0$l2bEGxJ$8|}uN@?;=0PFO5(B@;FyttrKD zv*f~T=5#+m%!Jv0zzOPsDK2Wwjc98L16`1ibKh9~FI=XB2)XTMEWo~a;4~MCJ4It1 zaeEj8P6S1q7TIzpx1hlQ_rT^4KMdGwtCPF9B3oIw??-hosTn{kB6g1TrE`X$ z9um(1hOcJQC!J%XE1sa>=c?DA^9B;e2B@#c)_^ZvmX)Zvub5q)reJILJc`eK&=TevXn9W;06 z@^JBAf#v}(KW0aXY0s}E6u_`bY9J8XSjUZcFU46H>ST!r1c(^0;$%Tw>LF04l8R+hbUBkkOb zr0y>X3i}Z+F9uNyfdmWo@Fm$jK7#Hu??v~sli=KQFl{;`FG2rD9}9HN_uN>$Hg7JB z{S^4gBmi5?;v9)Ub-~JC+5`bsrM=~!(4}%9*#UzgZs*ZTN9?Hm+>aOGstE2W=57V3 zGE`Ip$@u19f0iSthkG4QG>d(K!!J|XPeDh>WPo2k?Ho8ja$<+HkKiXl82*s~ zudO{?i#X$wsc@ZHyDeeI-#gOXe7prC_E5gYhD<0Mqa()FS|{4COVUBl5_&9Px@?0FJf2(RajwjYmF$4ySv!4g6;OqGdbNUE$5Y zK|Cm!;@i%YLphdd1g{r|2>&K&%|6JB+JGizT3{KF=JU>!jeo#_q$GiHKkzcDP(#7> z3SjC8*Dt{mYLK8-1CR@@p>6jlUsCwj8t%mwvUqT7$Ta`0Li3E20UE-1DE?YNXo;lA%`{l z3}$C%6Xl7)bP_i+PM`|J6P(&_9N&XhVen5WWpYD%X2x5AbZF_7X(~iJ!+i!CV&|Sv z##~i_8NjiVt~L1LoB;i)mAsW#j}LhffeI05Y*0r9u?v$zv19;S`CpSOLv2f)SE+7r zrv3thhpp8GYIb6Q(UBWGD8JT2p-)p%X|gKz-O^CJ8?I@>%C?%OeJwCHN^&mHQ^OMw z;oZhJj*?E>fpD=hJO%=oZvlRbn&8Q|&PmC!c3eRfsCoh?z;G}MxrPa#ooU)93UV+q zjYxR)H-tUya{zrv;QFJJcR=DlYBiByxbCG<^RN!gFNv-fF-wCCh>c%h<+cTNx@vM%Ez<2;)}%Y!#33b zlsCNoX$6a#Tax?V4j707Yn_JvjdyNOxzm{ zdcUPntC@WUVzX|8z1V2jgz@Keo8gxc345Gi&0g)or-SPzAW^Pa&2a~kY7#c80}vDy z%5+eA1Ai484V>|c^K+LsiNDduK}Ka;Gn#+!q9&eNa^e8F1{kNFa+=tnMRK^}y8#7o zX@apo_()!Wggu*c8$T9K0j)XkZ9i;({KEkrnDD~^=T7JNjhez;XA;N_Z-0y@r_NYp z^M{h@1tffd4&e)=Cn#W?0B-In>M+vMbI2Y%9gbSdiwxwxGjOJK@QJGLfJ-HiCOQJ4 zREG;FM8zArNOELMxJD^54tlLk)juAD#W!JJ36zrM>_4u;h z0z2@P;F8-pDD3(>z74w2d?%#hBZu>#6u4jD43+n8ZjX)N-$u_tS3xfkH?}$$o7xN5 zsLB*#JGj6^Qa285fJ>ih1|6$edVX|9%Dj-+wPqP@2NU=oHWD3>bnoL9=g!6+oCns} zu9$PsLMA?1A_Bkf4ZB{c$=kctG;CPGbPOi*sWBUHfpGkz3j@ioRe8i2^CSW1mtEHn zsH&F05wgXYXz=R)I=#f`V2DrJeyB34J z)omJ@l{#7yqSdqLCKreYK(7d}vFQtdQ-NJ~KVN=u{(0T~R1mJX3O_pV4SI{9d53-t zKtG*Y@_>bfk=7)6H)d0cPS$J(;RT_46*#vnkQ%|+wHNR!?66A1Ak3j)y-gHEQmH8n z%z=QS#6DSYyr`O{@{b6iTLjvOx_?HMC;BcJoNL3Esu(`K68+$iA>@XgupU!}#Dy&K zp{!Jf2Ui1DszeP|iUUeni-oVnSUG&yU}4H~jjh6)P9$AQ+2aNWtXNujZ4NKEE+J5Q zUykWWBT7h!erm`Y$wB@SJ*Oe4Dh?n30e`=sheI8kKDn4v$RCodykgx{JZlL0A=u*G zz|e+U!)2qMQr1DhIOA;gztRd83uhAXOBcraULP1~Y&8bgBm3IiV{5>-0Rbm;Z-&`C z2UgecSWVAoKxB~m&DU*3f;WD+8mTu>z~Gkul|st39dx;XD4k+G3+IP*=-M zD`n~2wojmKm49G15e2I)~@Fd);Nkl3Y^GD)~Mn?Q*%WDCrq zMdF0Tpmn!qMZ#Bd=LduhNXdjJd5 z2K45`Ls^qxYdp3dS}Q_`HN|gv!I=R!sOKftF}<7sQ)|@3-)9c*Tdz(NC>Y`2s0dXB zaj@D_RN0o;Jq?|3>BmF70j1r{DZEzWJQ@R7GT|DC-nRNcdRpiT_e=yOb^RS<9^L+j zHR4?vAkY?`3tEFdj~6;kQZ_-a=~-k#3mgmK_V{-L;HG*@mz~S}Ixpf@xSTHm7n{TI z@Ii8zpKC*x=m01>5VwrD4sD>rjaE^@HOM=*5`h#gho|)AD66=Z!fE0Wv717AJ&kAY zp{HQGIow`BXov)kI+W(Y-=hYfdy4_}pFAF)AgxYbYF|aY{GM?@@;UX(r}0;R?XmF! zPLMF>3DcL+zC20;##+4zZa3b5knZqfttLNOmS5`gDVkM!;91FYMQcl^QE|dG5O-!w z!mZez>yzc$U0qz*oW*krG#KEh&k|ks-F)XG^w92;%5aBEz6oD=X?TBthYp7YwQ98q zJLVI7enSEui8d>nx>vKdjbGAgb!^qKV?gvC)`YsX@{A5IX6W~dM;~vvFnpIkCouI4 zAP2HQwS$VjpWo%cJG9$AAx}wZKdj$j4rJ1J8`EJ6iQrPeTY`*5Nu6atrJpDmMJKh8 zX5P5PNL|1q>hlskuu~sY6l2x~buJ|ChjYbnTcyU?;9NWV21P#03O}fz^qvbtZ-egO zH9PvbDV!pB1Pq4c#i3DgWn+^8py%}$U;}^YEEQyU9;w}FW3dqutK_168jJfalOUDv z6zYaoWZ-~6Uwy+vPe;cmoxjL_9m^XT*aRN}c>1(8_ns4%7IqHs=QvQy7fS-R{RrLp z$rRLchh<{16@5w#C&c2-?5%13i9Dx!_DU@0droC|3JeJ3Xr6M|k0h#JqbZWN2~W7; z<5&-h#Qw%Tt>DCpzo$2Br0~*=Y~J@;Eljme%T4roKh;Y@HDbc$a92upfn4GnScH41 zHw7d>;e6bL=CL_cLah7neecKcDIEK!Im`Ynkb=51);@1Z4PCmk^*te0WLtxVKbrpuF2x}{qlX8d zXzNpX_eqN`&|iS*f>I?E z1}ZmIf`E2J=R{K`uFpZ8a7$40r-YQVkm_PL4fp^S{F~>eT4%L~Kj^jWW8v{nfG+7+ z^Y;l?Fug?MR_Ml|=VI8+Mh^+A2vzU(jA=}{TCe~)d3XI4=XxdYtiPkL>i^1T`1z4k zY^`^W64A3jiMekn61b?>ShVsf5PiyN=-J|#5zvUzvl#OZdGU_KLSR{Ft$%L6x_IQyq{rHq}Y zh&z6OVGeqT5O*KWVZsWpBnGD|hxx2aj&+EEN~`;xs=paSF60Pa7jM^wxK8*=|vFhtc>`R+=^s&d|wDR%MzUn?BaS`NEpT zI<0q}z)eQuHdJ=d^Qn-W;75Mp=#l>&(R|O7m>ga1B=0LB2aTQEz!&vJl7MGL!rO3~ zq~?U^>+zF=>6hi+CPXj-M?er7<9l|HHO4WM?y%%IEPrH7{A|UjSpUN}-m2oXYm8Di zHMvjyyAu=sR(@}O*YNWv|JQ#o2(uxmRgXuj2;3s9<)LwBvm9NS8Dya{bG3ESrDkZm z)BI6_Z0#|mVYxWF!gjm)3q5qO7UYfl_v>O zT34Lr_~o&k`%`Sm^%4i4y7WG0c_8TwB$aFMr+K(@){uGwu7}`$ z4#%f5n@}f>{lSPD{(9-WSM%q5abnIF)hOPr*Kp3;MP~Fo3P4!@4WxB?hH?M>b$=$I zVWwhvcgGMM7Sqg$$q$PEUKu*ovxYo(I-tl?(P3Pi8pW>&eN;B*KaD&U0Jq4otxD?c zqYRz$G%G_MzsV}-1g?Xd*1m9|(tne0)^=kR5u0t~$y3zPUfrk28d7;I$DV)#=oD&p z;?hR2FEVkdt*-F5Al_vE`5a+P}va<9pM z+2=K$RY@TosKZ^DzJa_=fG}C7IxEtKCfqCu`po+Vr!hy|pOs4|;_g^A&tosVd9DO) zuggiA^XcWRR%X9u;mvf=!1AHboJY&l*;Vsy7bRbDl+FfV>e1a%K5h7cK8h}yD1sDq zboB$VWmVqr1~czJiMiLU{HnNDn|}bmQKMp8vqq?$d7mAt8Gl=L;DB^&os(Ps1dx_V z#M!F15L-w zw(5n%gg>JXZU@ybTjuo|?y~Z>M@i?9o2?(gNI3)1MU(j&ysc;jK6nlB-OfqCO_M`x zW?*^Iq_vjOeR{1gqOf=-<({RZK@l65=D%>g3{Y%StMu>>hTJTR@5O8WcU>Dts=m80 z)plZ^Qd}}&<8rB&`B5V@cuHqxC0v41p@4l}<^Qj<`h!W&B1l1!{%Wq4ok~9Wvkgr7 zGZ-ha0pkO#j;;6I%Bh#N%>T)uWVyz-a1<*=hiDmg^;wpnh{Jl-v3I!chk%0DDoa)G&2TLMrG{ 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 - + - + - + @@ -39,7 +39,7 @@ - + @@ -57,7 +57,7 @@ - + @@ -325,7 +325,7 @@ - + diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 58425bba..21db83d9 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -4,6 +4,8 @@ import Foundation import FlutterMacOS +import url_launcher_fde func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) } diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index f8438fad..538041d1 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -59,7 +59,7 @@ /* Begin PBXFileReference section */ 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Warnings.xcconfig; path = Configs/Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* Flutter Desktop Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Flutter Desktop Example.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10ED2044A3C60003C045 /* NKUST AP.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "NKUST AP.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; path = Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -125,7 +125,7 @@ 33CC10EE2044A3C60003C045 /* Products */ = { isa = PBXGroup; children = ( - 33CC10ED2044A3C60003C045 /* Flutter Desktop Example.app */, + 33CC10ED2044A3C60003C045 /* NKUST AP.app */, ); name = Products; sourceTree = ""; @@ -159,7 +159,6 @@ 3791C254B5D15F61597672EC /* Pods-Runner.debug.xcconfig */, F6D1C7225F9B1694A8A75E31 /* Pods-Runner.release.xcconfig */, ); - name = Pods; path = Pods; sourceTree = ""; }; @@ -184,8 +183,8 @@ 33CC11202044C79F0003C045 /* PBXTargetDependency */, ); name = Runner; - productName = "Flutter Desktop Example"; - productReference = 33CC10ED2044A3C60003C045 /* Flutter Desktop Example.app */; + productName = "NKUST AP"; + productReference = 33CC10ED2044A3C60003C045 /* NKUST AP.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ @@ -201,7 +200,7 @@ 33CC10EC2044A3C60003C045 = { CreatedOnToolsVersion = 9.2; LastSwiftMigration = 0920; - ProvisioningStyle = Manual; + ProvisioningStyle = Automatic; }; 33CC111A2044C6BA0003C045 = { CreatedOnToolsVersion = 9.2; @@ -452,17 +451,18 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CODE_SIGN_STYLE = Manual; + CODE_SIGN_IDENTITY = "Mac Developer"; + CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - DEVELOPMENT_TEAM = ""; + DEVELOPMENT_TEAM = R7BC26UNC9; FRAMEWORK_SEARCH_PATHS = ( - "$PROJECT_DIR/Flutter/ephemeral", + $PROJECT_DIR/Flutter/ephemeral, "$(inherited)", ); INFOPLIST_FILE = Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.google.FlutterEmbedderMacExample.FlutterDesktopExample; - PRODUCT_NAME = "Flutter Desktop Example"; + PRODUCT_NAME = "NKUST AP"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 4.0; @@ -475,17 +475,18 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CODE_SIGN_STYLE = Manual; + CODE_SIGN_IDENTITY = "Mac Developer"; + CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - DEVELOPMENT_TEAM = ""; + DEVELOPMENT_TEAM = R7BC26UNC9; FRAMEWORK_SEARCH_PATHS = ( - "$PROJECT_DIR/Flutter/ephemeral", + $PROJECT_DIR/Flutter/ephemeral, "$(inherited)", ); INFOPLIST_FILE = Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.google.FlutterEmbedderMacExample.FlutterDesktopExample; - PRODUCT_NAME = "Flutter Desktop Example"; + PRODUCT_NAME = "NKUST AP"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 4.0; }; diff --git a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 57774f08..f75281fc 100644 --- a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -15,7 +15,7 @@ @@ -43,7 +43,7 @@ @@ -66,7 +66,7 @@ @@ -85,7 +85,7 @@ From c268884c3f22937d012b0cf21e3cc8562532eeca Mon Sep 17 00:00:00 2001 From: RainVisitor Date: Sun, 28 Jul 2019 22:59:03 +0800 Subject: [PATCH 04/24] Update some page to preferences utils Add: home page cache image platform check for mobile and desktop separate --- lib/pages/home/bus/bus_reservations_page.dart | 5 ++-- lib/pages/home/bus/bus_reserve_page.dart | 5 ++-- lib/pages/home/info/notification_page.dart | 5 ++-- lib/pages/home/news_content_page.dart | 12 ++++++--- lib/pages/home_page.dart | 26 +++++++++---------- lib/utils/firebase_analytics_utils.dart | 5 ++-- lib/utils/preferences.dart | 24 ++++++++--------- 7 files changed, 41 insertions(+), 41 deletions(-) diff --git a/lib/pages/home/bus/bus_reservations_page.dart b/lib/pages/home/bus/bus_reservations_page.dart index 3d65c07b..f1326d6f 100644 --- a/lib/pages/home/bus/bus_reservations_page.dart +++ b/lib/pages/home/bus/bus_reservations_page.dart @@ -5,11 +5,11 @@ import 'package:nkust_ap/res/app_icon.dart'; import 'package:nkust_ap/res/resource.dart' as Resource; import 'package:nkust_ap/utils/cache_utils.dart'; import 'package:nkust_ap/utils/global.dart'; +import 'package:nkust_ap/utils/preferences.dart'; import 'package:nkust_ap/widgets/default_dialog.dart'; import 'package:nkust_ap/widgets/hint_content.dart'; import 'package:nkust_ap/widgets/progress_dialog.dart'; import 'package:nkust_ap/widgets/yes_no_dialog.dart'; -import 'package:shared_preferences/shared_preferences.dart'; enum _State { loading, finish, error, empty, offlineEmpty } @@ -207,8 +207,7 @@ class BusReservationsPageState extends State ); _getBusReservations() async { - SharedPreferences prefs = await SharedPreferences.getInstance(); - if (prefs.getBool(Constants.PREF_IS_OFFLINE_LOGIN)) { + if (Preferences.getBool(Constants.PREF_IS_OFFLINE_LOGIN, false)) { busReservationsData = await CacheUtils.loadBusReservationsData(); if (mounted) { setState(() { diff --git a/lib/pages/home/bus/bus_reserve_page.dart b/lib/pages/home/bus/bus_reserve_page.dart index 73e41f2d..4c6901cf 100644 --- a/lib/pages/home/bus/bus_reserve_page.dart +++ b/lib/pages/home/bus/bus_reserve_page.dart @@ -5,12 +5,12 @@ import 'package:nkust_ap/models/models.dart'; import 'package:nkust_ap/res/app_icon.dart'; import 'package:nkust_ap/res/resource.dart' as Resource; import 'package:nkust_ap/utils/global.dart'; +import 'package:nkust_ap/utils/preferences.dart'; import 'package:nkust_ap/widgets/default_dialog.dart'; import 'package:nkust_ap/widgets/flutter_calendar.dart'; import 'package:nkust_ap/widgets/hint_content.dart'; import 'package:nkust_ap/widgets/progress_dialog.dart'; import 'package:nkust_ap/widgets/yes_no_dialog.dart'; -import 'package:shared_preferences/shared_preferences.dart'; enum _State { loading, finish, error, empty, offline } enum Station { janGong, yanchao } @@ -341,8 +341,7 @@ class BusReservePageState extends State ); _getBusTimeTables() async { - SharedPreferences prefs = await SharedPreferences.getInstance(); - if (prefs.getBool(Constants.PREF_IS_OFFLINE_LOGIN)) { + if (Preferences.getBool(Constants.PREF_IS_OFFLINE_LOGIN, false)) { setState(() { state = _State.offline; }); diff --git a/lib/pages/home/info/notification_page.dart b/lib/pages/home/info/notification_page.dart index 7a7afa5b..c76124d0 100644 --- a/lib/pages/home/info/notification_page.dart +++ b/lib/pages/home/info/notification_page.dart @@ -4,8 +4,8 @@ import 'package:nkust_ap/models/models.dart'; import 'package:nkust_ap/res/app_icon.dart'; import 'package:nkust_ap/res/resource.dart' as Resource; import 'package:nkust_ap/utils/global.dart'; +import 'package:nkust_ap/utils/preferences.dart'; import 'package:nkust_ap/widgets/hint_content.dart'; -import 'package:shared_preferences/shared_preferences.dart'; enum _State { loading, finish, loadingMore, error, empty, offline } @@ -181,8 +181,7 @@ class NotificationPageState extends State } _getNotifications() async { - SharedPreferences prefs = await SharedPreferences.getInstance(); - if (prefs.getBool(Constants.PREF_IS_OFFLINE_LOGIN)) { + if (Preferences.getBool(Constants.PREF_IS_OFFLINE_LOGIN, false)) { setState(() { state = _State.offline; }); diff --git a/lib/pages/home/news_content_page.dart b/lib/pages/home/news_content_page.dart index dab40057..6dbf3e48 100644 --- a/lib/pages/home/news_content_page.dart +++ b/lib/pages/home/news_content_page.dart @@ -1,3 +1,5 @@ +import 'dart:io'; + import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:nkust_ap/models/models.dart'; @@ -98,10 +100,12 @@ class NewsContentPageState extends State aspectRatio: orientation == Orientation.portrait ? 4 / 3 : 9 / 16, child: Hero( tag: news.hashCode, - child: CachedNetworkImage( - imageUrl: news.image, - errorWidget: (context, url, error) => Icon(AppIcon.error), - ), + child: (Platform.isIOS || Platform.isAndroid) + ? CachedNetworkImage( + imageUrl: news.image, + errorWidget: (context, url, error) => Icon(Icons.error), + ) + : Image.network(news.image), ), ), SizedBox( diff --git a/lib/pages/home_page.dart b/lib/pages/home_page.dart index 42bfe514..2a643d45 100644 --- a/lib/pages/home_page.dart +++ b/lib/pages/home_page.dart @@ -8,10 +8,10 @@ import 'package:nkust_ap/res/app_icon.dart'; import 'package:nkust_ap/res/colors.dart' as Resource; import 'package:nkust_ap/utils/cache_utils.dart'; import 'package:nkust_ap/utils/global.dart'; +import 'package:nkust_ap/utils/preferences.dart'; import 'package:nkust_ap/widgets/drawer_body.dart'; import 'package:nkust_ap/widgets/hint_content.dart'; import 'package:nkust_ap/widgets/yes_no_dialog.dart'; -import 'package:shared_preferences/shared_preferences.dart'; enum _State { loading, finish, error, empty, offline } @@ -72,10 +72,12 @@ class HomePageState extends State { }, child: Hero( tag: news.hashCode, - child: CachedNetworkImage( - imageUrl: news.image, - errorWidget: (context, url, error) => Icon(Icons.error), - ), + child: (Platform.isIOS || Platform.isAndroid) + ? CachedNetworkImage( + imageUrl: news.image, + errorWidget: (context, url, error) => Icon(Icons.error), + ) + : Image.network(news.image), ), ), ); @@ -220,8 +222,7 @@ class HomePageState extends State { } void onTabTapped(int index) async { - SharedPreferences prefs = await SharedPreferences.getInstance(); - bool bus = prefs.getBool(Constants.PREF_BUS_ENABLE) ?? true; + bool bus = Preferences.getBool(Constants.PREF_BUS_ENABLE, true); setState(() { _currentTabIndex = index; switch (_currentTabIndex) { @@ -242,8 +243,7 @@ class HomePageState extends State { } _getAllNews() async { - SharedPreferences prefs = await SharedPreferences.getInstance(); - if (prefs.getBool(Constants.PREF_IS_OFFLINE_LOGIN)) { + if (Preferences.getBool(Constants.PREF_IS_OFFLINE_LOGIN, false)) { setState(() { state = _State.offline; }); @@ -278,8 +278,7 @@ class HomePageState extends State { } _setupBusNotify(BuildContext context) async { - SharedPreferences prefs = await SharedPreferences.getInstance(); - if (prefs.getBool(Constants.PREF_BUS_NOTIFY) ?? false) + if (Preferences.getBool(Constants.PREF_BUS_NOTIFY, false) ?? false) Helper.instance .getBusReservations() .then((BusReservationsData response) async { @@ -303,8 +302,7 @@ class HomePageState extends State { } _getUserInfo() async { - SharedPreferences prefs = await SharedPreferences.getInstance(); - if (prefs.getBool(Constants.PREF_IS_OFFLINE_LOGIN)) { + if (Preferences.getBool(Constants.PREF_IS_OFFLINE_LOGIN, false)) { userInfo = await CacheUtils.loadUserInfo(); setState(() { state = _State.offline; @@ -320,7 +318,7 @@ class HomePageState extends State { FA.setUserProperty('student_id', userInfo.studentId); FA.setUserId(userInfo.studentId); FA.logUserInfo(userInfo.department); - CacheUtils.saveUserInfo(userInfo); + //CacheUtils.saveUserInfo(userInfo); } }).catchError((e) { if (e is DioError) { diff --git a/lib/utils/firebase_analytics_utils.dart b/lib/utils/firebase_analytics_utils.dart index 9d001e7e..645459fd 100644 --- a/lib/utils/firebase_analytics_utils.dart +++ b/lib/utils/firebase_analytics_utils.dart @@ -88,8 +88,8 @@ class FA { static Future logAction(String name, String action, {String message = ''}) async { - PackageInfo packageInfo = await PackageInfo.fromPlatform(); - if (Platform.isIOS || Platform.isAndroid) + if (Platform.isIOS || Platform.isAndroid) { + PackageInfo packageInfo = await PackageInfo.fromPlatform(); await analytics.logEvent( name: name ?? '', parameters: { @@ -99,5 +99,6 @@ class FA { 'platform': Platform.operatingSystem, }, ); + } } } diff --git a/lib/utils/preferences.dart b/lib/utils/preferences.dart index e2177996..53ef2b5e 100644 --- a/lib/utils/preferences.dart +++ b/lib/utils/preferences.dart @@ -18,11 +18,11 @@ class Preferences { } static Future setStringSecurity(String key, String data) async { - await prefs.setString(key, encrypter.encrypt(data).base64); + await prefs?.setString(key, encrypter.encrypt(data).base64); } static String getStringSecurity(String key, String defaultValue) { - String data = prefs.getString(key) ?? ''; + String data = prefs?.getString(key) ?? ''; if (data == '') return defaultValue; else @@ -30,42 +30,42 @@ class Preferences { } static Future setString(String key, String data) async { - await prefs.setString(key, data); + await prefs?.setString(key, data); } static String getString(String key, String defaultValue) { - return prefs.getString(key) ?? defaultValue; + return prefs?.getString(key) ?? defaultValue; } static Future setInt(String key, int data) async { - await prefs.setInt(key, data); + await prefs?.setInt(key, data); } static int getInt(String key, int defaultValue) { - return prefs.getInt(key) ?? defaultValue; + return prefs?.getInt(key) ?? defaultValue; } static Future setDouble(String key, double data) async { - await prefs.setDouble(key, data); + await prefs?.setDouble(key, data); } static double getDouble(String key, double defaultValue) { - return prefs.getDouble(key) ?? defaultValue; + return prefs?.getDouble(key) ?? defaultValue; } static Future setBool(String key, bool data) async { - await prefs.setBool(key, data); + await prefs?.setBool(key, data); } static bool getBool(String key, bool defaultValue) { - return prefs.getBool(key) ?? defaultValue; + return prefs?.getBool(key) ?? defaultValue; } static Future setStringList(String key, List data) async { - await prefs.setStringList(key, data); + await prefs?.setStringList(key, data); } static List getStringList(String key, List defaultValue) { - return prefs.getStringList(key) ?? defaultValue; + return prefs?.getStringList(key) ?? defaultValue; } } From 37f319cae2e276e8ed36d3b9aad4abc7fad1b26b Mon Sep 17 00:00:00 2001 From: RainVisitor Date: Sun, 28 Jul 2019 22:59:37 +0800 Subject: [PATCH 05/24] Add url_launcher_fde for macOS plugin --- pubspec.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index d8e5599c..793d58e1 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -17,6 +17,8 @@ dependencies: shared_preferences: ^0.5.3+1 package_info: ^0.4.0+4 url_launcher: ^5.0.3 + url_launcher_fde: + path: ../url_launcher_fde share: ^0.6.1+1 connectivity: ^0.4.2 firebase_core: ^0.4.0+3 @@ -25,7 +27,7 @@ dependencies: firebase_messaging: ^5.0.2 http: ^0.12.0+2 #third party plugin - dio: 2.1.0 + dio: 2.1.13 toast: ^0.1.4 tuple: ^1.0.1 flutter_crashlytics: From 7d59ef5f6d63fd35235d6f8734b73a3a382f8bbb Mon Sep 17 00:00:00 2001 From: RainVisitor Date: Mon, 29 Jul 2019 20:34:15 +0800 Subject: [PATCH 06/24] Fix bus reverse page refresh --- lib/pages/home/bus/bus_reserve_page.dart | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/pages/home/bus/bus_reserve_page.dart b/lib/pages/home/bus/bus_reserve_page.dart index 4c6901cf..c638deaa 100644 --- a/lib/pages/home/bus/bus_reserve_page.dart +++ b/lib/pages/home/bus/bus_reserve_page.dart @@ -179,9 +179,10 @@ class BusReservePageState extends State ); default: return RefreshIndicator( - onRefresh: () { - _getBusTimeTables(); + onRefresh: () async { + await _getBusTimeTables(); FA.logAction('refresh', 'swipe'); + return null; }, child: ListView( physics: const NeverScrollableScrollPhysics(), From b17eb170ef840f18dbc3e4d33757fe84e07106be Mon Sep 17 00:00:00 2001 From: RainVisitor Date: Tue, 30 Jul 2019 23:48:54 +0800 Subject: [PATCH 07/24] Add shared_preference_fde plugin Move plugin from outside project to inside. This is experiment statement for macOS development --- .../shared_preferences_fde/.gitignore | 3 + desktop_plugin/shared_preferences_fde/LICENSE | 202 ++++++++++++++++++ .../Classes/SharedPreferencesPlugin.swift | 62 ++++++ .../Flutter/GeneratedPluginRegistrant.swift | 11 + .../ephemeral/Flutter-Generated.xcconfig | 6 + .../macos/shared_preferences_fde.podspec | 21 ++ .../shared_preferences_fde/pubspec.yaml | 17 ++ desktop_plugin/url_launcher_fde/.gitignore | 3 + desktop_plugin/url_launcher_fde/LICENSE | 202 ++++++++++++++++++ .../url_launcher_fde/linux/Makefile | 135 ++++++++++++ .../linux/url_launcher_fde_plugin.cc | 113 ++++++++++ .../linux/url_launcher_fde_plugin.h | 38 ++++ .../macos/Classes/UrlLauncherPlugin.swift | 55 +++++ .../macos/url_launcher_fde.podspec | 21 ++ desktop_plugin/url_launcher_fde/pubspec.yaml | 17 ++ .../url_launcher_fde/windows/.gitignore | 6 + .../windows/scripts/cache_flutter.bat | 27 +++ .../windows/url_launcher_fde.cpp | 121 +++++++++++ .../windows/url_launcher_fde.h | 36 ++++ .../windows/url_launcher_fde.vcxproj | 154 +++++++++++++ .../windows/url_launcher_fde.vcxproj.filters | 45 ++++ macos/Flutter/GeneratedPluginRegistrant.swift | 2 + macos/Info.plist | 2 +- macos/Runner.xcodeproj/project.pbxproj | 4 +- pubspec.yaml | 4 +- 25 files changed, 1303 insertions(+), 4 deletions(-) create mode 100755 desktop_plugin/shared_preferences_fde/.gitignore create mode 100755 desktop_plugin/shared_preferences_fde/LICENSE create mode 100755 desktop_plugin/shared_preferences_fde/macos/Classes/SharedPreferencesPlugin.swift create mode 100644 desktop_plugin/shared_preferences_fde/macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 desktop_plugin/shared_preferences_fde/macos/Flutter/ephemeral/Flutter-Generated.xcconfig create mode 100755 desktop_plugin/shared_preferences_fde/macos/shared_preferences_fde.podspec create mode 100755 desktop_plugin/shared_preferences_fde/pubspec.yaml create mode 100644 desktop_plugin/url_launcher_fde/.gitignore create mode 100644 desktop_plugin/url_launcher_fde/LICENSE create mode 100644 desktop_plugin/url_launcher_fde/linux/Makefile create mode 100644 desktop_plugin/url_launcher_fde/linux/url_launcher_fde_plugin.cc create mode 100644 desktop_plugin/url_launcher_fde/linux/url_launcher_fde_plugin.h create mode 100644 desktop_plugin/url_launcher_fde/macos/Classes/UrlLauncherPlugin.swift create mode 100644 desktop_plugin/url_launcher_fde/macos/url_launcher_fde.podspec create mode 100644 desktop_plugin/url_launcher_fde/pubspec.yaml create mode 100644 desktop_plugin/url_launcher_fde/windows/.gitignore create mode 100644 desktop_plugin/url_launcher_fde/windows/scripts/cache_flutter.bat create mode 100644 desktop_plugin/url_launcher_fde/windows/url_launcher_fde.cpp create mode 100644 desktop_plugin/url_launcher_fde/windows/url_launcher_fde.h create mode 100644 desktop_plugin/url_launcher_fde/windows/url_launcher_fde.vcxproj create mode 100644 desktop_plugin/url_launcher_fde/windows/url_launcher_fde.vcxproj.filters diff --git a/desktop_plugin/shared_preferences_fde/.gitignore b/desktop_plugin/shared_preferences_fde/.gitignore new file mode 100755 index 00000000..53e92cc4 --- /dev/null +++ b/desktop_plugin/shared_preferences_fde/.gitignore @@ -0,0 +1,3 @@ +.packages +.flutter-plugins +pubspec.lock diff --git a/desktop_plugin/shared_preferences_fde/LICENSE b/desktop_plugin/shared_preferences_fde/LICENSE new file mode 100755 index 00000000..d6456956 --- /dev/null +++ b/desktop_plugin/shared_preferences_fde/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/desktop_plugin/shared_preferences_fde/macos/Classes/SharedPreferencesPlugin.swift b/desktop_plugin/shared_preferences_fde/macos/Classes/SharedPreferencesPlugin.swift new file mode 100755 index 00000000..f6ac715a --- /dev/null +++ b/desktop_plugin/shared_preferences_fde/macos/Classes/SharedPreferencesPlugin.swift @@ -0,0 +1,62 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import FlutterMacOS +import Foundation + +public class SharedPreferencesPlugin: NSObject, FlutterPlugin { + public static func register(with registrar: FlutterPluginRegistrar) { + let channel = FlutterMethodChannel( + name: "plugins.flutter.io/shared_preferences", + binaryMessenger: registrar.messenger) + let instance = SharedPreferencesPlugin() + registrar.addMethodCallDelegate(instance, channel: channel) + } + + public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { + let method = call.method + if method == "getAll" { + result(getAllPrefs()) + } else if method == "setBool" || + method == "setInt" || + method == "setInt" || + method == "setDouble" || + method == "setString" || + method == "setStringList" { + let arguments = call.arguments as! [String : Any] + let key = arguments["key"] as! String + UserDefaults.standard.set(arguments["value"], forKey: key) + result(true) + } else if (method == "commit") { + // UserDefaults does not need to be synchronized. + result(true) + } else if (method == "remove") { + let arguments = call.arguments as! [String : Any] + let key = arguments["key"] as! String + UserDefaults.standard.removeObject(forKey: key) + result(true) + } else if (method == "clear") { + let defaults = UserDefaults.standard + for (key, _) in getAllPrefs() { + defaults.removeObject(forKey: key) + } + result(true) + } else { + result(FlutterMethodNotImplemented) + } + } +} + +private func getAllPrefs() -> [String : Any] { + var filteredPrefs: [String : Any] = [:] + if let appDomain = Bundle.main.bundleIdentifier, + let prefs = UserDefaults.standard.persistentDomain(forName: appDomain) { + for (key, value) in prefs { + if key.hasPrefix("flutter.") { + filteredPrefs[key] = value + } + } + } + return filteredPrefs +} diff --git a/desktop_plugin/shared_preferences_fde/macos/Flutter/GeneratedPluginRegistrant.swift b/desktop_plugin/shared_preferences_fde/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 00000000..876cb18d --- /dev/null +++ b/desktop_plugin/shared_preferences_fde/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// +import Foundation +import FlutterMacOS + +import shared_preferences_fde + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) +} diff --git a/desktop_plugin/shared_preferences_fde/macos/Flutter/ephemeral/Flutter-Generated.xcconfig b/desktop_plugin/shared_preferences_fde/macos/Flutter/ephemeral/Flutter-Generated.xcconfig new file mode 100644 index 00000000..d0b6d807 --- /dev/null +++ b/desktop_plugin/shared_preferences_fde/macos/Flutter/ephemeral/Flutter-Generated.xcconfig @@ -0,0 +1,6 @@ +// This is a generated file; do not edit or check into version control. +FLUTTER_ROOT=/Users/marquesini/sdks/flutter-master +FLUTTER_APPLICATION_PATH=/Users/marquesini/workspace/flutter/little_light_desktop/desktop_plugins/shared_preferences_fde +FLUTTER_BUILD_DIR=build +FLUTTER_FRAMEWORK_DIR=/Users/marquesini/sdks/flutter-master/bin/cache/artifacts/engine/darwin-x64 +FLUTTER_BUILD_NAME=0.0.1 diff --git a/desktop_plugin/shared_preferences_fde/macos/shared_preferences_fde.podspec b/desktop_plugin/shared_preferences_fde/macos/shared_preferences_fde.podspec new file mode 100755 index 00000000..19e3597e --- /dev/null +++ b/desktop_plugin/shared_preferences_fde/macos/shared_preferences_fde.podspec @@ -0,0 +1,21 @@ +# +# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html +# +Pod::Spec.new do |s| + s.name = 'shared_preferences_fde' + s.version = '0.0.1' + s.summary = 'Flutter plugin for reading and writing simple key-value pairs.' + s.description = <<-DESC + A temporary macOS implmentation of the shared_preferences plugin from flutter/plugins. + DESC + s.homepage = 'https://github.com/google/flutter-desktop-embedding/tree/master/plugins/flutter_plugins/shared_preferences_fde' + s.license = { :file => '../LICENSE' } + s.author = { 'Flutter Desktop Embedding Developers' => 'flutter-desktop-embedding-dev@googlegroups.com' } + s.source = { :path => '.' } + s.source_files = 'Classes/**/*' + s.dependency 'FlutterMacOS' + + s.platform = :osx + s.osx.deployment_target = '10.12' +end + diff --git a/desktop_plugin/shared_preferences_fde/pubspec.yaml b/desktop_plugin/shared_preferences_fde/pubspec.yaml new file mode 100755 index 00000000..5f5ba2c3 --- /dev/null +++ b/desktop_plugin/shared_preferences_fde/pubspec.yaml @@ -0,0 +1,17 @@ +name: shared_preferences_fde +description: Temporary desktop implmentations of shared_preferences from flutter/plugins +version: 0.0.1 +author: Flutter Desktop Embedding Developers +homepage: https://github.com/google/flutter-desktop-embedding/tree/master/plugins/flutter_plugins/shared_preferences_fde + +flutter: + plugin: + macosPrefix: FLE + pluginClass: SharedPreferencesPlugin + +environment: + sdk: ">=2.1.0 <3.0.0" + +dependencies: + flutter: + sdk: flutter diff --git a/desktop_plugin/url_launcher_fde/.gitignore b/desktop_plugin/url_launcher_fde/.gitignore new file mode 100644 index 00000000..53e92cc4 --- /dev/null +++ b/desktop_plugin/url_launcher_fde/.gitignore @@ -0,0 +1,3 @@ +.packages +.flutter-plugins +pubspec.lock diff --git a/desktop_plugin/url_launcher_fde/LICENSE b/desktop_plugin/url_launcher_fde/LICENSE new file mode 100644 index 00000000..d6456956 --- /dev/null +++ b/desktop_plugin/url_launcher_fde/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/desktop_plugin/url_launcher_fde/linux/Makefile b/desktop_plugin/url_launcher_fde/linux/Makefile new file mode 100644 index 00000000..25161043 --- /dev/null +++ b/desktop_plugin/url_launcher_fde/linux/Makefile @@ -0,0 +1,135 @@ +# Copyright 2019 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# The name of the plugin. +# The primary source file is assumed to be $(PLUGIN_NAME).cc, with +# $(PLUGIN_NAME).h as the public header meant for inclusion by the application. +PLUGIN_NAME=url_launcher_fde_plugin +# Any files other than the plugin class files that need to be compiled. +EXTRA_SOURCES= +# Extra flags (e.g., for library dependencies). +SYSTEM_LIBRARIES= +EXTRA_CXXFLAGS= +EXTRA_CPPFLAGS= +EXTRA_LDFLAGS= + +# Default build type. For a release build, set BUILD=release. +# Currently this only sets NDEBUG, which is used to control the flags passed +# to the Flutter engine in the example shell, and not the complation settings +# (e.g., optimization level) of the C++ code. +BUILD=debug + +# Dependency locations +# Default to building in the plugin directory. +OUT_DIR=$(CURDIR)/../build/linux +# Sharing an OUT_DIR will be common, so use a subdirectory for intermediates. +PLUGIN_OUT_DIR=$(OUT_DIR)/$(PLUGIN_NAME) +OBJ_DIR=$(PLUGIN_OUT_DIR)/obj +FLUTTER_CACHE_DIR=$(PLUGIN_OUT_DIR)/flutter + +# Flutter library +FLUTTER_LIB_NAME=flutter_linux +FLUTTER_LIB=$(FLUTTER_CACHE_DIR)/lib$(FLUTTER_LIB_NAME).so + +# If FLUTTER_ROOT is set, use that version of Flutter. Otherwise, assume that +# the flutter tool is in the path. +ifeq ($(strip $(FLUTTER_ROOT)),) +FLUTTER_BIN=flutter +else +FLUTTER_BIN=$(FLUTTER_ROOT)/bin/flutter +endif + +# Unpack configuration. +# TODO: Revisit how this is managed, either by having plugins builds always use +# an existing cache provided to the build, or moving logic into the tool. +FLUTTER_UNPACK_ARGS=--target-platform=linux-x64 \ + --cache-dir="$(FLUTTER_CACHE_DIR)" +ifneq ($(strip $(LOCAL_ENGINE)),) +FLUTTER_UNPACK_ARGS+= --local-engine="$(LOCAL_ENGINE)" +endif +ifneq ($(strip $(FLUTTER_ENGINE)),) +FLUTTER_UNPACK_ARGS+= --local-engine-src-path="$(FLUTTER_ENGINE)" +endif + +# Add relevant code from the wrapper library, which is intended to be statically +# built into the plugin. +# Use abspath for the wrapper root, which can contain relative paths; the +# intermediate build files will be based on the source path, which will cause +# issues if they start with one or more '../'s. +WRAPPER_ROOT=$(abspath $(FLUTTER_CACHE_DIR)/cpp_client_wrapper) +# TODO: Once JSON codec files are merged, make a PLUGIN_CODEC variable in the +# top section. For now, using JSON codec would require changes here. +WRAPPER_SOURCES= \ + $(WRAPPER_ROOT)/engine_method_result.cc \ + $(WRAPPER_ROOT)/plugin_registrar.cc \ + $(WRAPPER_ROOT)/standard_codec.cc + +# Use abspath for extra sources, which may also contain relative paths (see +# note above about WRAPPER_ROOT). +SOURCES=$(PLUGIN_NAME).cc $(WRAPPER_SOURCES) $(abspath $(EXTRA_SOURCES)) +PUBLIC_HEADER=$(PLUGIN_NAME).h + +WRAPPER_INCLUDE_DIR=$(WRAPPER_ROOT)/include +INCLUDE_DIRS=$(FLUTTER_CACHE_DIR) $(WRAPPER_INCLUDE_DIR) + +# Build settings +CXX=clang++ +CXXFLAGS.release=-DNDEBUG +CXXFLAGS=-std=c++14 -Wall -Werror -fPIC -fvisibility=hidden \ + -DFLUTTER_PLUGIN_IMPL $(CXXFLAGS.$(BUILD)) $(EXTRA_CXXFLAGS) +CPPFLAGS=$(patsubst %,-I%,$(INCLUDE_DIRS)) $(EXTRA_CPPFLAGS) +LDFLAGS=-shared -L$(FLUTTER_CACHE_DIR) -l$(FLUTTER_LIB_NAME) $(EXTRA_LDFLAGS) + +# Final output files that will be used by applications. +LIBRARY_OUT=$(OUT_DIR)/lib$(PLUGIN_NAME).so +HEADER_OUT=$(OUT_DIR)/include/$(PUBLIC_HEADER) + +# Intermediate files. +OBJ_FILES=$(SOURCES:%.cc=$(OBJ_DIR)/%.o) +DEPENDENCY_FILES=$(OBJ_FILES:%.o=%.d) + +# Targets + +.PHONY: all +all: $(PLUGIN_NAME) + +.PHONY: $(PLUGIN_NAME) +$(PLUGIN_NAME) : $(LIBRARY_OUT) $(HEADER_OUT) + +$(LIBRARY_OUT): $(OBJ_FILES) + mkdir -p $(@D) + $(CXX) $(CXXFLAGS) $(CPPFLAGS) $^ $(LDFLAGS) -o $@ + +$(HEADER_OUT): $(PUBLIC_HEADER) + mkdir -p $(@D) + cp $< $@ + +$(WRAPPER_SOURCES) $(FLUTTER_LIB): | sync + +# This is a phony target because the flutter tool cannot describe +# its inputs and outputs yet. +.PHONY: sync +sync: + $(FLUTTER_BIN) unpack $(FLUTTER_UNPACK_ARGS) + +-include $(DEPENDENCY_FILES) + +$(OBJ_DIR)/%.o : %.cc | sync + mkdir -p $(@D) + $(CXX) $(CXXFLAGS) $(CPPFLAGS) -MMD -c $< -o $@ + +.PHONY: clean +clean: + rm -f $(LIBRARY_OUT) $(HEADER_OUT) + rm -rf $(PLUGINOUT_DIR) diff --git a/desktop_plugin/url_launcher_fde/linux/url_launcher_fde_plugin.cc b/desktop_plugin/url_launcher_fde/linux/url_launcher_fde_plugin.cc new file mode 100644 index 00000000..16b3b485 --- /dev/null +++ b/desktop_plugin/url_launcher_fde/linux/url_launcher_fde_plugin.cc @@ -0,0 +1,113 @@ +// Copyright 2019 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "url_launcher_fde_plugin.h" + +#include +#include +#include +#include +#include +#include + +#include +#include + +namespace { + +using flutter::EncodableMap; +using flutter::EncodableValue; + +class UrlLauncherPlugin : public flutter::Plugin { + public: + static void RegisterWithRegistrar(flutter::PluginRegistrar *registrar); + + virtual ~UrlLauncherPlugin(); + + private: + UrlLauncherPlugin(); + + // Called when a method is called on the plugin's channel; + void HandleMethodCall( + const flutter::MethodCall &method_call, + std::unique_ptr> result); +}; + +// static +void UrlLauncherPlugin::RegisterWithRegistrar( + flutter::PluginRegistrar *registrar) { + auto channel = std::make_unique>( + registrar->messenger(), "plugins.flutter.io/url_launcher", + &flutter::StandardMethodCodec::GetInstance()); + + // Uses new instead of make_unique due to private constructor. + std::unique_ptr plugin(new UrlLauncherPlugin()); + + channel->SetMethodCallHandler( + [plugin_pointer = plugin.get()](const auto &call, auto result) { + plugin_pointer->HandleMethodCall(call, std::move(result)); + }); + + registrar->AddPlugin(std::move(plugin)); +} + +UrlLauncherPlugin::UrlLauncherPlugin() = default; + +UrlLauncherPlugin::~UrlLauncherPlugin() = default; + +void UrlLauncherPlugin::HandleMethodCall( + const flutter::MethodCall &method_call, + std::unique_ptr> result) { + if (method_call.method_name().compare("launch") == 0) { + std::string url; + if (method_call.arguments() && method_call.arguments()->IsMap()) { + const EncodableMap &arguments = method_call.arguments()->MapValue(); + auto url_it = arguments.find(EncodableValue("url")); + if (url_it != arguments.end()) { + url = url_it->second.StringValue(); + } + } + if (url.empty()) { + result->Error("argument_error", "No URL provided"); + return; + } + + pid_t pid = fork(); + if (pid == 0) { + execl("/usr/bin/xdg-open", "xdg-open", url.c_str(), nullptr); + exit(1); + } + int status = 0; + waitpid(pid, &status, 0); + if (status != 0) { + std::ostringstream error_message; + error_message << "Failed to open " << url << ": error " << status; + result->Error("open_error", error_message.str()); + return; + } + result->Success(); + } else { + result->NotImplemented(); + } +} + +} // namespace + +void UrlLauncherRegisterWithRegistrar( + FlutterDesktopPluginRegistrarRef registrar) { + // The plugin registrar owns the plugin, registered callbacks, etc., so must + // remain valid for the life of the application. + static auto *plugin_registrar = new flutter::PluginRegistrar(registrar); + UrlLauncherPlugin::RegisterWithRegistrar(plugin_registrar); +} diff --git a/desktop_plugin/url_launcher_fde/linux/url_launcher_fde_plugin.h b/desktop_plugin/url_launcher_fde/linux/url_launcher_fde_plugin.h new file mode 100644 index 00000000..2200c1af --- /dev/null +++ b/desktop_plugin/url_launcher_fde/linux/url_launcher_fde_plugin.h @@ -0,0 +1,38 @@ +// Copyright 2019 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +#ifndef PLUGINS_FLUTTER_PLUGINS_URL_LAUNCHER_FDE_LINUX_URL_LAUNCHER_FDE_PLUGIN_H_ +#define PLUGINS_FLUTTER_PLUGINS_URL_LAUNCHER_FDE_LINUX_URL_LAUNCHER_FDE_PLUGIN_H_ + +// A plugin to control a native menubar. + +#include + +#ifdef FLUTTER_PLUGIN_IMPL +#define FLUTTER_PLUGIN_EXPORT __attribute__((visibility("default"))) +#else +#define FLUTTER_PLUGIN_EXPORT +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + +FLUTTER_PLUGIN_EXPORT void UrlLauncherRegisterWithRegistrar( + FlutterDesktopPluginRegistrarRef registrar); + +#if defined(__cplusplus) +} // extern "C" +#endif + +#endif // PLUGINS_FLUTTER_PLUGINS_URL_LAUNCHER_FDE_LINUX_URL_LAUNCHER_FDE_PLUGIN_H_ diff --git a/desktop_plugin/url_launcher_fde/macos/Classes/UrlLauncherPlugin.swift b/desktop_plugin/url_launcher_fde/macos/Classes/UrlLauncherPlugin.swift new file mode 100644 index 00000000..4eda3a67 --- /dev/null +++ b/desktop_plugin/url_launcher_fde/macos/Classes/UrlLauncherPlugin.swift @@ -0,0 +1,55 @@ +// Copyright 2019 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import FlutterMacOS +import Foundation + +public class UrlLauncherPlugin: NSObject, FlutterPlugin { + public static func register(with registrar: FlutterPluginRegistrar) { + let channel = FlutterMethodChannel( + name: "plugins.flutter.io/url_launcher", + binaryMessenger: registrar.messenger) + let instance = UrlLauncherPlugin() + registrar.addMethodCallDelegate(instance, channel: channel) + } + + public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { + let method = call.method + let urlString: String? = (call.arguments as? Dictionary)?["url"] as? String + if method == "canLaunch" { + guard let unwrappedURLString = urlString, + let url = URL.init(string: unwrappedURLString) else { + result(invalidURLError(urlString)) + return + } + result(NSWorkspace.shared.urlForApplication(toOpen: url) != nil) + } else if method == "launch" { + guard let unwrappedURLString = urlString, + let url = URL.init(string: unwrappedURLString) else { + result(invalidURLError(urlString)) + return + } + result(NSWorkspace.shared.open(url)) + } else { + result(FlutterMethodNotImplemented) + } + } +} + +private func invalidURLError(_ url: String?) -> FlutterError { + return FlutterError( + code:"argument_error", + message: "Unable to parse URL", + details: "Provided URL: \(String(describing: url))") +} diff --git a/desktop_plugin/url_launcher_fde/macos/url_launcher_fde.podspec b/desktop_plugin/url_launcher_fde/macos/url_launcher_fde.podspec new file mode 100644 index 00000000..d2371a71 --- /dev/null +++ b/desktop_plugin/url_launcher_fde/macos/url_launcher_fde.podspec @@ -0,0 +1,21 @@ +# +# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html +# +Pod::Spec.new do |s| + s.name = 'url_launcher_fde' + s.version = '0.0.1' + s.summary = 'Flutter plugin for launching a URL.' + s.description = <<-DESC + A temporary macOS implmentation of the url_launcher plugin from flutter/plugins. + DESC + s.homepage = 'https://github.com/google/flutter-desktop-embedding/tree/master/plugins/flutter_plugins/url_launcher_fde' + s.license = { :file => '../LICENSE' } + s.author = { 'Flutter Desktop Embedding Developers' => 'flutter-desktop-embedding-dev@googlegroups.com' } + s.source = { :path => '.' } + s.source_files = 'Classes/**/*' + s.dependency 'FlutterMacOS' + + s.platform = :osx + s.osx.deployment_target = '10.12' +end + diff --git a/desktop_plugin/url_launcher_fde/pubspec.yaml b/desktop_plugin/url_launcher_fde/pubspec.yaml new file mode 100644 index 00000000..d31c9771 --- /dev/null +++ b/desktop_plugin/url_launcher_fde/pubspec.yaml @@ -0,0 +1,17 @@ +name: url_launcher_fde +description: Temporary desktop implmentations of url_launcher from flutter/plugins +version: 0.0.1 +author: Flutter Desktop Embedding Developers +homepage: https://github.com/google/flutter-desktop-embedding/tree/master/plugins/flutter_plugins/url_launcher_fde + +flutter: + plugin: + macosPrefix: FLE + pluginClass: UrlLauncherPlugin + +environment: + sdk: ">=2.1.0 <3.0.0" + +dependencies: + flutter: + sdk: flutter diff --git a/desktop_plugin/url_launcher_fde/windows/.gitignore b/desktop_plugin/url_launcher_fde/windows/.gitignore new file mode 100644 index 00000000..48c5a4e9 --- /dev/null +++ b/desktop_plugin/url_launcher_fde/windows/.gitignore @@ -0,0 +1,6 @@ +flutter/ + +# Visual Studio files +*.user +*.suo +.vs \ No newline at end of file diff --git a/desktop_plugin/url_launcher_fde/windows/scripts/cache_flutter.bat b/desktop_plugin/url_launcher_fde/windows/scripts/cache_flutter.bat new file mode 100644 index 00000000..b2f9e9c7 --- /dev/null +++ b/desktop_plugin/url_launcher_fde/windows/scripts/cache_flutter.bat @@ -0,0 +1,27 @@ +:: Copyright 2019 Google LLC +:: +:: Licensed under the Apache License, Version 2.0 (the "License"); +:: you may not use this file except in compliance with the License. +:: You may obtain a copy of the License at +:: +:: http://www.apache.org/licenses/LICENSE-2.0 +:: +:: Unless required by applicable law or agreed to in writing, software +:: distributed under the License is distributed on an "AS IS" BASIS, +:: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +:: See the License for the specific language governing permissions and +:: limitations under the License. +@echo off + +:: Caches the Flutter artifacts. This unfortunately reproduces logic from +:: Flutter's tool_backend.dart, since currently that step combines building +:: the bundle and running unpack. Future tool changes should simplify this. + +set CACHE_DIR=%~1 +:: Currently unused, but present now to avoid project changes when unpack needs it later. +set BUILD_MODE=%~2 + +if defined LOCAL_ENGINE set ENGINE_PARAM=--local-engine=%LOCAL_ENGINE% +if defined FLUTTER_ENGINE set ENGINE_SOURCE_PARAM=--local-engine-src-path=%FLUTTER_ENGINE% + +"%FLUTTER_ROOT%\bin\flutter" unpack --target-platform=windows-x64 --cache-dir="%CACHE_DIR%" %ENGINE_PARAM% %ENGINE_SOURCE_PARAM% diff --git a/desktop_plugin/url_launcher_fde/windows/url_launcher_fde.cpp b/desktop_plugin/url_launcher_fde/windows/url_launcher_fde.cpp new file mode 100644 index 00000000..54274db2 --- /dev/null +++ b/desktop_plugin/url_launcher_fde/windows/url_launcher_fde.cpp @@ -0,0 +1,121 @@ +// Copyright 2019 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +#include "url_launcher_fde.h" + +#include + +#include +#include +#include +#include +#include +#include + +namespace { + +using flutter::EncodableMap; +using flutter::EncodableValue; + +class UrlLauncherPlugin : public flutter::Plugin { + public: + static void RegisterWithRegistrar(flutter::PluginRegistrar *registrar); + + virtual ~UrlLauncherPlugin(); + + private: + UrlLauncherPlugin(); + + // Called when a method is called on plugin channel; + void HandleMethodCall( + const flutter::MethodCall &method_call, + std::unique_ptr> result); +}; + +// static +void UrlLauncherPlugin::RegisterWithRegistrar( + flutter::PluginRegistrar *registrar) { + auto channel = std::make_unique>( + registrar->messenger(), "plugins.flutter.io/url_launcher", + &flutter::StandardMethodCodec::GetInstance()); + + // Uses new instead of make_unique due to private constructor. + std::unique_ptr plugin(new UrlLauncherPlugin()); + + channel->SetMethodCallHandler( + [plugin_pointer = plugin.get()](const auto &call, auto result) { + plugin_pointer->HandleMethodCall(call, std::move(result)); + }); + + registrar->AddPlugin(std::move(plugin)); +} + +UrlLauncherPlugin::UrlLauncherPlugin() = default; + +UrlLauncherPlugin::~UrlLauncherPlugin() = default; + +void UrlLauncherPlugin::HandleMethodCall( + const flutter::MethodCall &method_call, + std::unique_ptr> result) { + if (method_call.method_name().compare("launch") == 0) { + std::string url; + if (method_call.arguments() && method_call.arguments()->IsMap()) { + const EncodableMap &arguments = method_call.arguments()->MapValue(); + auto url_it = arguments.find(EncodableValue("url")); + if (url_it != arguments.end()) { + url = url_it->second.StringValue(); + } + } + if (url.empty()) { + result->Error("argument_error", "No URL provided"); + return; + } + + // launch a URL on Windows + size_t size = url.length() + 1; + std::wstring wurl; + wurl.reserve(size); + size_t outSize; + mbstowcs_s(&outSize, &wurl[0], size, url.c_str(), size - 1); + +#pragma warning(push) +#pragma warning(disable : 4311) // warning C4311: 'type cast': pointer + // truncation from 'HINSTANCE' to 'int' +#pragma warning(disable : 4302) // warning C4302: 'type cast': truncation from + // 'HINSTANCE' to 'int' + int status = + reinterpret_cast(ShellExecute(NULL, TEXT("open"), wurl.c_str(), NULL, NULL, SW_SHOWNORMAL)); +#pragma warning(pop) + + if (status <= 32) { + std::ostringstream error_message; + error_message << "Failed to open " << url << ": ShellExecute error code " + << status; + result->Error("open_error", error_message.str()); + return; + } + result->Success(); + } else { + result->NotImplemented(); + } +} + +} // namespace + +void UrlLauncherRegisterWithRegistrar( + FlutterDesktopPluginRegistrarRef registrar) { + // The plugin registrar owns the plugin, registered callbacks, etc., so must + // remain valid for the life of the application. + static auto *plugin_registrar = new flutter::PluginRegistrar(registrar); + UrlLauncherPlugin::RegisterWithRegistrar(plugin_registrar); +} diff --git a/desktop_plugin/url_launcher_fde/windows/url_launcher_fde.h b/desktop_plugin/url_launcher_fde/windows/url_launcher_fde.h new file mode 100644 index 00000000..7f35a745 --- /dev/null +++ b/desktop_plugin/url_launcher_fde/windows/url_launcher_fde.h @@ -0,0 +1,36 @@ +// Copyright 2019 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +#ifndef PLUGINS_URL_LAUNCHER_PLUGIN_WINDOWS_H_ +#define PLUGINS_URL_LAUNCHER_PLUGIN_WINDOWS_H_ + +#include + +#ifdef FLUTTER_PLUGIN_IMPL +#define FLUTTER_PLUGIN_EXPORT __declspec(dllexport) +#else +#define FLUTTER_PLUGIN_EXPORT __declspec(dllimport) +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + +FLUTTER_PLUGIN_EXPORT void UrlLauncherRegisterWithRegistrar( + FlutterDesktopPluginRegistrarRef registrar); + +#if defined(__cplusplus) +} // extern "C" +#endif + +#endif // PLUGINS_EXAMPLE_EXAMPLE_PLUGIN_WINDOWS_H_ diff --git a/desktop_plugin/url_launcher_fde/windows/url_launcher_fde.vcxproj b/desktop_plugin/url_launcher_fde/windows/url_launcher_fde.vcxproj new file mode 100644 index 00000000..62f1f8f1 --- /dev/null +++ b/desktop_plugin/url_launcher_fde/windows/url_launcher_fde.vcxproj @@ -0,0 +1,154 @@ + + + + + Debug + x64 + + + Release + x64 + + + + 15.0 + {18F565CD-7BD5-459C-9FEB-2E2379E88105} + Win32Proj + UrlLauncherPlugin + 10.0.17763.0 + + + + DynamicLibrary + true + v141 + Unicode + + + DynamicLibrary + false + v141 + true + Unicode + + + + + + + + + + + + + + + + + true + $(VC_IncludePath);$(WindowsSDK_IncludePath);$(ProjectDir)flutter\cpp_client_wrapper\include;$(ProjectDir)flutter + $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64;$(ProjectDir)flutter + $(SolutionDir)..\build\windows\$(Platform)\$(Configuration)\Plugins\ + $(SolutionDir)..\build\windows\intermediates\$(Platform)\$(Configuration)\$(ProjectName)\ + + + + + false + $(VC_IncludePath);$(WindowsSDK_IncludePath);$(ProjectDir)flutter\cpp_client_wrapper\include;$(ProjectDir)flutter + $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64;$(ProjectDir)flutter + $(SolutionDir)..\build\windows\$(Platform)\$(Configuration)\Plugins\ + $(SolutionDir)..\build\windows\intermediates\$(Platform)\$(Configuration)\$(ProjectName)\ + + + + + + NotUsing + Level3 + Disabled + true + _DEBUG;FLUTTER_PLUGIN_IMPL;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + + + Windows + true + flutter_windows.dll.lib;%(AdditionalDependencies) + + + "$(ProjectDir)scripts\cache_flutter" "$(ProjectDir)flutter" debug + Cache Flutter artifacts + + + + + + + + + + + + + xcopy /q /i /s /y "$(ProjectDir)url_launcher_fde.h" "$(OutDir)" + + + Publishing header to output directory + + + + + NotUsing + Level3 + MaxSpeed + true + true + true + NDEBUG;FLUTTER_PLUGIN_IMPL;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + + + Windows + true + true + true + flutter_windows.dll.lib;%(AdditionalDependencies) + + + "$(ProjectDir)scripts\cache_flutter" "$(ProjectDir)flutter" release + Cache Flutter artifacts + + + + + + + + + + + + + xcopy /q /i /s /y "$(ProjectDir)url_launcher_fde.h" "$(OutDir)" + + + Publishing header to output directory + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/desktop_plugin/url_launcher_fde/windows/url_launcher_fde.vcxproj.filters b/desktop_plugin/url_launcher_fde/windows/url_launcher_fde.vcxproj.filters new file mode 100644 index 00000000..4dcd8a16 --- /dev/null +++ b/desktop_plugin/url_launcher_fde/windows/url_launcher_fde.vcxproj.filters @@ -0,0 +1,45 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {dbe2dac9-4a21-4849-bef5-2069d695609d} + + + + + Header Files + + + Header Files + + + Source Files + + + + + Source Files\cpp_client_wrapper + + + Source Files\cpp_client_wrapper + + + Source Files\cpp_client_wrapper + + + Source Files + + + \ No newline at end of file diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 21db83d9..251c25de 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -4,8 +4,10 @@ import Foundation import FlutterMacOS +import shared_preferences_fde import url_launcher_fde func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) } diff --git a/macos/Info.plist b/macos/Info.plist index 515b4ac7..20ee72c5 100644 --- a/macos/Info.plist +++ b/macos/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.0 + 0.0.1 CFBundleVersion 1 LSMinimumSystemVersion diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index 538041d1..ccf1c18f 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -461,7 +461,7 @@ ); INFOPLIST_FILE = Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.FlutterEmbedderMacExample.FlutterDesktopExample; + PRODUCT_BUNDLE_IDENTIFIER = com.nkust.ap.flutter; PRODUCT_NAME = "NKUST AP"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -485,7 +485,7 @@ ); INFOPLIST_FILE = Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.FlutterEmbedderMacExample.FlutterDesktopExample; + PRODUCT_BUNDLE_IDENTIFIER = com.nkust.ap.flutter; PRODUCT_NAME = "NKUST AP"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 4.0; diff --git a/pubspec.yaml b/pubspec.yaml index 793d58e1..b36d06da 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -15,10 +15,12 @@ dependencies: cupertino_icons: ^0.1.2 #official plugin shared_preferences: ^0.5.3+1 + shared_preferences_fde: + path: ./desktop_plugin/shared_preferences_fde package_info: ^0.4.0+4 url_launcher: ^5.0.3 url_launcher_fde: - path: ../url_launcher_fde + path: ./desktop_plugin/url_launcher_fde share: ^0.6.1+1 connectivity: ^0.4.2 firebase_core: ^0.4.0+3 From cf7b6cad3c358aedc47fcad5e3c4a542fe7f3b4b Mon Sep 17 00:00:00 2001 From: RainVisitor Date: Wed, 31 Jul 2019 00:25:14 +0800 Subject: [PATCH 08/24] Update shared_preferences setting for macOS Improve: login page code for shared_preferences --- lib/main.dart | 2 +- lib/pages/home/setting_page.dart | 23 ++++----- lib/pages/login_page.dart | 84 ++++++++++++-------------------- lib/utils/app_localizations.dart | 2 +- 4 files changed, 43 insertions(+), 68 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 31a7cd8d..54139419 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -23,7 +23,7 @@ import 'package:nkust_ap/widgets/share_data_widget.dart'; void main() async { bool isInDebugMode = Constants.isInDebugMode; String themeCode = AppTheme.LIGHT; - if (Platform.isIOS || Platform.isAndroid) { + if (Platform.isIOS || Platform.isAndroid || Platform.isMacOS) { await Preferences.init(); AppIcon.code = Preferences.getString(Constants.PREF_ICON_STYLE_CODE, AppIcon.OUTLINED); diff --git a/lib/pages/home/setting_page.dart b/lib/pages/home/setting_page.dart index e0b2549c..e0923829 100644 --- a/lib/pages/home/setting_page.dart +++ b/lib/pages/home/setting_page.dart @@ -172,10 +172,8 @@ class SettingPageState extends State { setState(() { AppLocalizations.languageCode = item.value; }); - if (Platform.isAndroid || Platform.isIOS) { - Preferences.setString( - Constants.PREF_LANGUAGE_CODE, item.value); - } + Preferences.setString( + Constants.PREF_LANGUAGE_CODE, item.value); Navigator.pop(context); }), ]), @@ -210,10 +208,8 @@ class SettingPageState extends State { setState(() { AppIcon.code = item.value; }); - if (Platform.isAndroid || Platform.isIOS) - Preferences.setString( - Constants.PREF_ICON_STYLE_CODE, - item.value); + Preferences.setString( + Constants.PREF_ICON_STYLE_CODE, item.value); Navigator.pop(context); }), ]), @@ -251,9 +247,8 @@ class SettingPageState extends State { .data .setThemeData(AppTheme.data); }); - if (Platform.isAndroid || Platform.isIOS) - Preferences.setString( - Constants.PREF_THEME_CODE, item.value); + Preferences.setString( + Constants.PREF_THEME_CODE, item.value); Navigator.pop(context); }), ]), @@ -306,10 +301,12 @@ class SettingPageState extends State { } _getPreference() async { - PackageInfo packageInfo = await PackageInfo.fromPlatform(); + PackageInfo packageInfo; + if (Platform.isAndroid || Platform.isIOS) + packageInfo = await PackageInfo.fromPlatform(); setState(() { isOffline = Preferences.getBool(Constants.PREF_IS_OFFLINE_LOGIN, false); - appVersion = packageInfo.version; + appVersion = packageInfo?.version ?? '1.0.0'; courseNotify = Preferences.getBool(Constants.PREF_COURSE_NOTIFY, false); displayPicture = Preferences.getBool(Constants.PREF_DISPLAY_PICTURE, true); diff --git a/lib/pages/login_page.dart b/lib/pages/login_page.dart index 338b5638..63b79a45 100644 --- a/lib/pages/login_page.dart +++ b/lib/pages/login_page.dart @@ -8,6 +8,7 @@ import 'package:nkust_ap/models/api/login_response.dart'; import 'package:nkust_ap/res/assets.dart'; import 'package:nkust_ap/res/colors.dart' as Resource; import 'package:nkust_ap/utils/global.dart'; +import 'package:nkust_ap/utils/preferences.dart'; import 'package:nkust_ap/widgets/default_dialog.dart'; import 'package:nkust_ap/widgets/drawer_body.dart'; import 'package:nkust_ap/widgets/progress_dialog.dart'; @@ -25,7 +26,6 @@ class LoginPage extends StatefulWidget { class LoginPageState extends State with SingleTickerProviderStateMixin { AppLocalizations app; - SharedPreferences prefs; final TextEditingController _username = new TextEditingController(); final TextEditingController _password = new TextEditingController(); @@ -44,8 +44,8 @@ class LoginPageState extends State FA.setCurrentScreen("LoginPage", "login_page.dart"); usernameFocusNode = FocusNode(); passwordFocusNode = FocusNode(); + _getPreference(); if (Platform.isAndroid || Platform.isIOS) { - _getPreference(); _checkUpdate(); } } @@ -227,10 +227,10 @@ class LoginPageState extends State } _checkUpdate() async { - prefs = await SharedPreferences.getInstance(); PackageInfo packageInfo = await PackageInfo.fromPlatform(); await Future.delayed(Duration(milliseconds: 50)); - var currentVersion = prefs.getString(Constants.PREF_CURRENT_VERSION) ?? ""; + var currentVersion = + Preferences.getString(Constants.PREF_CURRENT_VERSION, ''); if (currentVersion != packageInfo.buildNumber) { showDialog( context: context, @@ -247,7 +247,8 @@ class LoginPageState extends State Navigator.of(context, rootNavigator: true).pop('dialog'), ), ); - prefs.setString(Constants.PREF_CURRENT_VERSION, packageInfo.buildNumber); + Preferences.setString( + Constants.PREF_CURRENT_VERSION, packageInfo.buildNumber); } if (!Constants.isInDebugMode) { final RemoteConfig remoteConfig = await RemoteConfig.instance; @@ -345,10 +346,8 @@ class LoginPageState extends State setState(() { isRememberPassword = value; if (!isRememberPassword) isAutoLogin = false; - if (Platform.isAndroid || Platform.isIOS) { - prefs.setBool(Constants.PREF_AUTO_LOGIN, isAutoLogin); - prefs.setBool(Constants.PREF_REMEMBER_PASSWORD, isRememberPassword); - } + Preferences.setBool(Constants.PREF_AUTO_LOGIN, isAutoLogin); + Preferences.setBool(Constants.PREF_REMEMBER_PASSWORD, isRememberPassword); }); } @@ -356,32 +355,19 @@ class LoginPageState extends State setState(() { isAutoLogin = value; isRememberPassword = isAutoLogin; - if (Platform.isAndroid || Platform.isIOS) { - prefs.setBool(Constants.PREF_AUTO_LOGIN, isAutoLogin); - prefs.setBool(Constants.PREF_REMEMBER_PASSWORD, isRememberPassword); - } + Preferences.setBool(Constants.PREF_AUTO_LOGIN, isAutoLogin); + Preferences.setBool(Constants.PREF_REMEMBER_PASSWORD, isRememberPassword); }); } _getPreference() async { - prefs = await SharedPreferences.getInstance(); isRememberPassword = - prefs.getBool(Constants.PREF_REMEMBER_PASSWORD) ?? true; - isAutoLogin = prefs.getBool(Constants.PREF_AUTO_LOGIN) ?? false; - var username = prefs.getString(Constants.PREF_USERNAME) ?? ""; - var password = ""; + Preferences.getBool(Constants.PREF_REMEMBER_PASSWORD, true); + isAutoLogin = Preferences.getBool(Constants.PREF_AUTO_LOGIN, false); + var username = Preferences.getString(Constants.PREF_USERNAME, ''); + var password = ''; if (isRememberPassword) { - var encryptPassword = prefs.getString(Constants.PREF_PASSWORD) ?? ""; - if (encryptPassword != "") { - try { - password = encrypter.decrypt64(encryptPassword); - } catch (e) { - FA.logAESErrorEvent(encryptPassword); - password = encryptPassword; - await prefs.setString(Constants.PREF_PASSWORD, - encrypter.encrypt(encryptPassword).base64); - } - } + password = Preferences.getStringSecurity(Constants.PREF_PASSWORD, ''); } setState(() { _username.text = username; @@ -405,26 +391,26 @@ class LoginPageState extends State return false; }), barrierDismissible: false); - - if (Platform.isAndroid || Platform.isIOS) - prefs.setString(Constants.PREF_USERNAME, _username.text); + Preferences.setString(Constants.PREF_USERNAME, _username.text); Helper.instance .login(_username.text, _password.text) .then((LoginResponse response) async { if (Navigator.canPop(context)) Navigator.pop(context, 'dialog'); - if (Platform.isAndroid || Platform.isIOS) { + if (Platform.isAndroid || Platform.isIOS || Platform.isMacOS) { if (response.isLogin != null) { - prefs.setBool(Constants.PREF_AP_ENABLE, response.isLogin.ap); - prefs.setBool(Constants.PREF_BUS_ENABLE, response.isLogin.bus); - prefs.setBool(Constants.PREF_LEAVE_ENABLE, response.isLogin.leave); + Preferences.setBool(Constants.PREF_AP_ENABLE, response.isLogin.ap); + Preferences.setBool( + Constants.PREF_BUS_ENABLE, response.isLogin.bus); + Preferences.setBool( + Constants.PREF_LEAVE_ENABLE, response.isLogin.leave); } - prefs.setString(Constants.PREF_USERNAME, _username.text); + Preferences.setString(Constants.PREF_USERNAME, _username.text); if (isRememberPassword) { - await prefs.setString(Constants.PREF_PASSWORD, - encrypter.encrypt(_password.text).base64); + Preferences.setStringSecurity( + Constants.PREF_PASSWORD, _password.text); } - prefs.setBool(Constants.PREF_IS_OFFLINE_LOGIN, false); + Preferences.setBool(Constants.PREF_IS_OFFLINE_LOGIN, false); } _navigateToFilterObject(context); }).catchError((e) { @@ -450,24 +436,16 @@ class LoginPageState extends State } _offlineLogin() async { - String username = prefs.getString(Constants.PREF_USERNAME) ?? ''; - String encryptPassword = prefs.getString(Constants.PREF_PASSWORD) ?? ''; - if (username.isEmpty || encryptPassword.isEmpty) { + String username = Preferences.getString(Constants.PREF_USERNAME, ''); + String password = + Preferences.getStringSecurity(Constants.PREF_PASSWORD, ''); + if (username.isEmpty || password.isEmpty) { Utils.showToast(context, app.noOfflineLoginData); } else { - String password = ''; - try { - password = encrypter.decrypt64(encryptPassword); - } catch (e) { - FA.logAESErrorEvent(encryptPassword); - password = encryptPassword; - await prefs.setString( - Constants.PREF_PASSWORD, encrypter.encrypt(encryptPassword).base64); - } if (username != _username.text || password != _password.text) Utils.showToast(context, app.offlineLoginPasswordError); else { - prefs.setBool(Constants.PREF_IS_OFFLINE_LOGIN, true); + Preferences.setBool(Constants.PREF_IS_OFFLINE_LOGIN, true); Utils.showToast(context, app.loadOfflineData); _navigateToFilterObject(context); } diff --git a/lib/utils/app_localizations.dart b/lib/utils/app_localizations.dart index 9a310d8f..14cd57bf 100644 --- a/lib/utils/app_localizations.dart +++ b/lib/utils/app_localizations.dart @@ -1110,7 +1110,7 @@ class AppLocalizationsDelegate extends LocalizationsDelegate { @override Future load(Locale locale) async { print('Load ${locale.languageCode}'); - if (Platform.isAndroid || Platform.isIOS) { + if (Platform.isAndroid || Platform.isIOS || Platform.isMacOS) { SharedPreferences preference = await SharedPreferences.getInstance(); String languageCode = preference.getString(Constants.PREF_LANGUAGE_CODE) ?? 'system'; From 23ea5f8198650b00f9a3f09f0363b9a01de45568 Mon Sep 17 00:00:00 2001 From: RainVisitor Date: Sat, 10 Aug 2019 19:39:38 +0800 Subject: [PATCH 09/24] Add url_launcher_fde for macos --- .../Flutter/ephemeral/Flutter-Generated.xcconfig | 7 ++++--- .../Flutter/ephemeral/flutter_export_environment.sh | 8 ++++++++ .../macos/Flutter/GeneratedPluginRegistrant.swift | 11 +++++++++++ .../Flutter/ephemeral/Flutter-Generated.xcconfig | 7 +++++++ .../Flutter/ephemeral/flutter_export_environment.sh | 8 ++++++++ lib/main.dart | 3 ++- macos/Flutter/flutter_export_environment.sh | 9 +++++++++ 7 files changed, 49 insertions(+), 4 deletions(-) create mode 100755 desktop_plugin/shared_preferences_fde/macos/Flutter/ephemeral/flutter_export_environment.sh create mode 100644 desktop_plugin/url_launcher_fde/macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 desktop_plugin/url_launcher_fde/macos/Flutter/ephemeral/Flutter-Generated.xcconfig create mode 100755 desktop_plugin/url_launcher_fde/macos/Flutter/ephemeral/flutter_export_environment.sh create mode 100755 macos/Flutter/flutter_export_environment.sh diff --git a/desktop_plugin/shared_preferences_fde/macos/Flutter/ephemeral/Flutter-Generated.xcconfig b/desktop_plugin/shared_preferences_fde/macos/Flutter/ephemeral/Flutter-Generated.xcconfig index d0b6d807..76855356 100644 --- a/desktop_plugin/shared_preferences_fde/macos/Flutter/ephemeral/Flutter-Generated.xcconfig +++ b/desktop_plugin/shared_preferences_fde/macos/Flutter/ephemeral/Flutter-Generated.xcconfig @@ -1,6 +1,7 @@ // This is a generated file; do not edit or check into version control. -FLUTTER_ROOT=/Users/marquesini/sdks/flutter-master -FLUTTER_APPLICATION_PATH=/Users/marquesini/workspace/flutter/little_light_desktop/desktop_plugins/shared_preferences_fde +FLUTTER_ROOT=/Users/rainvisitor/development/flutter +FLUTTER_APPLICATION_PATH=/Users/rainvisitor/Documents/GitHub/NKUST-AP-Flutter/desktop_plugin/shared_preferences_fde FLUTTER_BUILD_DIR=build -FLUTTER_FRAMEWORK_DIR=/Users/marquesini/sdks/flutter-master/bin/cache/artifacts/engine/darwin-x64 +FLUTTER_FRAMEWORK_DIR=/Users/rainvisitor/development/flutter/bin/cache/artifacts/engine/darwin-x64 FLUTTER_BUILD_NAME=0.0.1 +FLUTTER_BUILD_NUMBER=0.0.1 diff --git a/desktop_plugin/shared_preferences_fde/macos/Flutter/ephemeral/flutter_export_environment.sh b/desktop_plugin/shared_preferences_fde/macos/Flutter/ephemeral/flutter_export_environment.sh new file mode 100755 index 00000000..451604a2 --- /dev/null +++ b/desktop_plugin/shared_preferences_fde/macos/Flutter/ephemeral/flutter_export_environment.sh @@ -0,0 +1,8 @@ +#!/bin/sh +# This is a generated file; do not edit or check into version control. +export "FLUTTER_ROOT=/Users/rainvisitor/development/flutter" +export "FLUTTER_APPLICATION_PATH=/Users/rainvisitor/Documents/GitHub/NKUST-AP-Flutter/desktop_plugin/shared_preferences_fde" +export "FLUTTER_BUILD_DIR=build" +export "FLUTTER_FRAMEWORK_DIR=/Users/rainvisitor/development/flutter/bin/cache/artifacts/engine/darwin-x64" +export "FLUTTER_BUILD_NAME=0.0.1" +export "FLUTTER_BUILD_NUMBER=0.0.1" diff --git a/desktop_plugin/url_launcher_fde/macos/Flutter/GeneratedPluginRegistrant.swift b/desktop_plugin/url_launcher_fde/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 00000000..21db83d9 --- /dev/null +++ b/desktop_plugin/url_launcher_fde/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// +import Foundation +import FlutterMacOS + +import url_launcher_fde + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) +} diff --git a/desktop_plugin/url_launcher_fde/macos/Flutter/ephemeral/Flutter-Generated.xcconfig b/desktop_plugin/url_launcher_fde/macos/Flutter/ephemeral/Flutter-Generated.xcconfig new file mode 100644 index 00000000..1264c990 --- /dev/null +++ b/desktop_plugin/url_launcher_fde/macos/Flutter/ephemeral/Flutter-Generated.xcconfig @@ -0,0 +1,7 @@ +// This is a generated file; do not edit or check into version control. +FLUTTER_ROOT=/Users/rainvisitor/development/flutter +FLUTTER_APPLICATION_PATH=/Users/rainvisitor/Documents/GitHub/NKUST-AP-Flutter/desktop_plugin/url_launcher_fde +FLUTTER_BUILD_DIR=build +FLUTTER_FRAMEWORK_DIR=/Users/rainvisitor/development/flutter/bin/cache/artifacts/engine/darwin-x64 +FLUTTER_BUILD_NAME=0.0.1 +FLUTTER_BUILD_NUMBER=0.0.1 diff --git a/desktop_plugin/url_launcher_fde/macos/Flutter/ephemeral/flutter_export_environment.sh b/desktop_plugin/url_launcher_fde/macos/Flutter/ephemeral/flutter_export_environment.sh new file mode 100755 index 00000000..c6086150 --- /dev/null +++ b/desktop_plugin/url_launcher_fde/macos/Flutter/ephemeral/flutter_export_environment.sh @@ -0,0 +1,8 @@ +#!/bin/sh +# This is a generated file; do not edit or check into version control. +export "FLUTTER_ROOT=/Users/rainvisitor/development/flutter" +export "FLUTTER_APPLICATION_PATH=/Users/rainvisitor/Documents/GitHub/NKUST-AP-Flutter/desktop_plugin/url_launcher_fde" +export "FLUTTER_BUILD_DIR=build" +export "FLUTTER_FRAMEWORK_DIR=/Users/rainvisitor/development/flutter/bin/cache/artifacts/engine/darwin-x64" +export "FLUTTER_BUILD_NAME=0.0.1" +export "FLUTTER_BUILD_NUMBER=0.0.1" diff --git a/lib/main.dart b/lib/main.dart index 54139419..c7e8aff2 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -5,7 +5,8 @@ import 'package:firebase_analytics/firebase_analytics.dart'; import 'package:firebase_analytics/observer.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/cupertino.dart'; -import 'package:flutter/foundation.dart'; +import 'package:flutter/foundation.dart' + show debugDefaultTargetPlatformOverride; import 'package:flutter/material.dart'; import 'package:flutter_crashlytics/flutter_crashlytics.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; diff --git a/macos/Flutter/flutter_export_environment.sh b/macos/Flutter/flutter_export_environment.sh new file mode 100755 index 00000000..9e21f37e --- /dev/null +++ b/macos/Flutter/flutter_export_environment.sh @@ -0,0 +1,9 @@ +#!/bin/sh +# This is a generated file; do not edit or check into version control. +export "FLUTTER_ROOT=/Users/rainvisitor/development/flutter" +export "FLUTTER_APPLICATION_PATH=/Users/rainvisitor/Documents/GitHub/NKUST-AP-Flutter" +export "FLUTTER_TARGET=/Users/rainvisitor/Documents/GitHub/NKUST-AP-Flutter/lib/main.dart" +export "FLUTTER_BUILD_DIR=/Users/rainvisitor/Documents/GitHub/NKUST-AP-Flutter/.dart_tool/flutter_build/25c1fbd5ee33c3b4cf3abf2baeaddc44" +export "FLUTTER_FRAMEWORK_DIR=/Users/rainvisitor/development/flutter/bin/cache/artifacts/engine/darwin-x64" +export "FLUTTER_BUILD_NAME=3.2.0" +export "FLUTTER_BUILD_NUMBER=30200" From c13b1060165cf5adf32659bfa41378adcda730a7 Mon Sep 17 00:00:00 2001 From: RainVisitor Date: Sat, 10 Aug 2019 19:54:44 +0800 Subject: [PATCH 10/24] Remove fde plugin --- pubspec.yaml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/pubspec.yaml b/pubspec.yaml index b36d06da..3030ad37 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -15,12 +15,8 @@ dependencies: cupertino_icons: ^0.1.2 #official plugin shared_preferences: ^0.5.3+1 - shared_preferences_fde: - path: ./desktop_plugin/shared_preferences_fde package_info: ^0.4.0+4 url_launcher: ^5.0.3 - url_launcher_fde: - path: ./desktop_plugin/url_launcher_fde share: ^0.6.1+1 connectivity: ^0.4.2 firebase_core: ^0.4.0+3 @@ -28,6 +24,7 @@ dependencies: firebase_remote_config: ^0.2.0+2 firebase_messaging: ^5.0.2 http: ^0.12.0+2 + html: ^0.14.0+2 #third party plugin dio: 2.1.13 toast: ^0.1.4 From 8ae1403e839e690746da4957e36a1cf96e78e9c0 Mon Sep 17 00:00:00 2001 From: RainVisitor Date: Sun, 11 Aug 2019 00:30:07 +0800 Subject: [PATCH 11/24] Add feature search student id --- lib/pages/login_page.dart | 26 ++- lib/pages/search_student_id_page.dart | 227 ++++++++++++++++++++++++++ lib/utils/app_localizations.dart | 37 +++++ lib/utils/nkust_helper.dart | 40 +++++ 4 files changed, 329 insertions(+), 1 deletion(-) create mode 100644 lib/pages/search_student_id_page.dart create mode 100644 lib/utils/nkust_helper.dart diff --git a/lib/pages/login_page.dart b/lib/pages/login_page.dart index 63b79a45..b0a4fca2 100644 --- a/lib/pages/login_page.dart +++ b/lib/pages/login_page.dart @@ -3,8 +3,10 @@ import 'dart:io'; import 'package:dio/dio.dart'; import 'package:encrypt/encrypt.dart'; import 'package:firebase_remote_config/firebase_remote_config.dart'; +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:nkust_ap/models/api/login_response.dart'; +import 'package:nkust_ap/pages/search_student_id_page.dart'; import 'package:nkust_ap/res/assets.dart'; import 'package:nkust_ap/res/colors.dart' as Resource; import 'package:nkust_ap/utils/global.dart'; @@ -214,7 +216,29 @@ class LoginPageState extends State style: TextStyle(color: Colors.white, fontSize: 16.0), ), ), - ) + ), + Center( + child: FlatButton( + onPressed: () async { + var username = await Navigator.push( + context, + CupertinoPageRoute( + builder: (_) => SearchStudentIdPage(), + ), + ); + if (username != null && username is String) { + setState(() { + _username.text = username; + }); + Utils.showToast(context, app.firstLoginHint); + } + }, + child: Text( + app.searchUsername, + style: TextStyle(color: Colors.white, fontSize: 16.0), + ), + ), + ), ]; if (orientation == Orientation.portrait) { list.addAll(listB); diff --git a/lib/pages/search_student_id_page.dart b/lib/pages/search_student_id_page.dart new file mode 100644 index 00000000..6daa982f --- /dev/null +++ b/lib/pages/search_student_id_page.dart @@ -0,0 +1,227 @@ +import 'package:flutter/material.dart'; +import 'package:nkust_ap/models/user_info.dart'; +import 'package:nkust_ap/res/assets.dart'; +import 'package:nkust_ap/res/colors.dart' as Resource; +import 'package:nkust_ap/utils/app_localizations.dart'; +import 'package:nkust_ap/utils/firebase_analytics_utils.dart'; +import 'package:nkust_ap/utils/nkust_helper.dart'; +import 'package:nkust_ap/utils/utils.dart'; +import 'package:nkust_ap/widgets/default_dialog.dart'; +import 'package:sprintf/sprintf.dart'; + +class SearchStudentIdPage extends StatefulWidget { + static const String routerName = "/searchUsername"; + + @override + SearchStudentIdPageState createState() => SearchStudentIdPageState(); +} + +class SearchStudentIdPageState extends State { + final TextEditingController _id = TextEditingController(); + + AppLocalizations app; + + FocusNode idFocusNode; + bool isAutoFill = true; + + @override + void initState() { + super.initState(); + FA.setCurrentScreen( + "SearchUsernamePagePage", "search_student_id_page.dart"); + idFocusNode = FocusNode(); + } + + @override + void dispose() { + super.dispose(); + } + + _editTextStyle() => TextStyle( + color: Colors.white, fontSize: 18.0, decorationColor: Colors.white); + + @override + Widget build(BuildContext context) { + app = AppLocalizations.of(context); + return OrientationBuilder( + builder: (_, orientation) { + return Scaffold( + backgroundColor: Resource.Colors.blue, + resizeToAvoidBottomPadding: orientation == Orientation.portrait, + body: Container( + alignment: Alignment(0, 0), + padding: EdgeInsets.symmetric(horizontal: 30.0), + child: orientation == Orientation.portrait + ? Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + mainAxisAlignment: MainAxisAlignment.spaceAround, + mainAxisSize: MainAxisSize.min, + children: _renderContent(orientation), + ) + : Row( + mainAxisAlignment: MainAxisAlignment.center, + children: _renderContent(orientation), + ), + ), + ); + }, + ); + } + + _renderContent(Orientation orientation) { + List list = orientation == Orientation.portrait + ? [ + Center( + child: Image.asset( + ImageAssets.K, + width: 120.0, + height: 120.0, + ), + ), + SizedBox(height: orientation == Orientation.portrait ? 30.0 : 0.0), + ] + : [ + Expanded( + child: Image.asset( + ImageAssets.K, + width: 120.0, + height: 120.0, + ), + ), + SizedBox(height: orientation == Orientation.portrait ? 30.0 : 0.0), + ]; + List listB = [ + TextField( + maxLines: 1, + textInputAction: TextInputAction.send, + controller: _id, + focusNode: idFocusNode, + onSubmitted: (text) { + idFocusNode.unfocus(); + _search(); + }, + decoration: InputDecoration( + labelText: app.id, + ), + style: _editTextStyle(), + ), + SizedBox(height: 8.0), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + GestureDetector( + child: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Theme( + data: ThemeData( + unselectedWidgetColor: Colors.white, + ), + child: Checkbox( + activeColor: Colors.white, + checkColor: Color(0xff2574ff), + value: isAutoFill, + onChanged: _onAutoFillChanged, + ), + ), + Text( + app.autoFill, + style: TextStyle(color: Colors.white), + ) + ], + ), + onTap: () => _onAutoFillChanged(!isAutoFill), + ), + ], + ), + SizedBox(height: 8.0), + Container( + width: double.infinity, + child: RaisedButton( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.all( + Radius.circular(30.0), + ), + ), + padding: EdgeInsets.all(14.0), + onPressed: () { + FA.logAction('search_username', 'click'); + _search(); + }, + color: Colors.white, + child: Text( + app.search, + style: TextStyle(color: Resource.Colors.blue, fontSize: 18.0), + ), + ), + ), + ]; + if (orientation == Orientation.portrait) { + list.addAll(listB); + } else { + list.add( + Expanded( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: listB, + ), + ), + ); + } + return list; + } + + _onAutoFillChanged(bool value) async { + setState(() { + isAutoFill = value; + }); + } + + _search() async { + if (_id.text.isEmpty) { + Utils.showToast(context, app.doNotEmpty); + } else { + UserInfo result = await NKUSTHelper.instance.getUsername(_id.text); + if (result != null && isAutoFill) { + Navigator.pop(context, result.studentId); + } else { + showDialog( + context: context, + builder: (BuildContext context) => DefaultDialog( + title: app.searchResult, + actionText: app.iKnow, + actionFunction: () => + Navigator.of(context, rootNavigator: true).pop('dialog'), + contentWidget: RichText( + text: TextSpan( + style: TextStyle( + color: Resource.Colors.grey, + height: 1.3, + fontSize: 16.0, + ), + children: [ + TextSpan( + text: result == null + ? app.searchStudentIdError + : sprintf( + app.searchStudentIdFormat, + [ + result.studentNameCht, + result.studentId, + ], + ), + style: TextStyle(fontWeight: FontWeight.bold), + ), + if (result != null) + TextSpan( + text: '\n${app.firstLoginHint}', + ), + ], + ), + ), + ), + ); + } + } + } +} diff --git a/lib/utils/app_localizations.dart b/lib/utils/app_localizations.dart index 14cd57bf..e3d4302a 100644 --- a/lib/utils/app_localizations.dart +++ b/lib/utils/app_localizations.dart @@ -351,6 +351,16 @@ class AppLocalizations { 'iconStyle': 'Icon Style', 'filled': 'Filled', 'outlined': 'Outlined', + 'searchUsername': 'Search Student ID', + 'search': 'Search', + 'name': 'Name', + 'id': 'id', + 'searchResult': 'Result', + 'autoFill': 'Auto Fill', + 'firstLoginHint': + 'For first-time login, please fill in the last four number of your ID as your password', + 'searchStudentIdFormat': 'Name:%s\nStudent ID:%s\n', + 'searchStudentIdError': 'Search no data.', }, 'zh': { 'app_name': '高科校務通', @@ -625,6 +635,15 @@ class AppLocalizations { 'iconStyle': '圖案風格', 'filled': '填充', 'outlined': '輪廓', + 'searchUsername': '學號查詢', + 'search': '查詢', + 'name': '名字', + 'id': '身分證字號', + 'searchResult': '查詢結果', + 'autoFill': '自動填入', + 'firstLoginHint': '首次登入密碼預設為身分證末四碼', + 'searchStudentIdFormat': '姓名:%s\n學號:%s\n', + 'searchStudentIdError': '查無資料', }, }; @@ -1099,6 +1118,24 @@ class AppLocalizations { String get filled => _vocabularies['filled']; String get outlined => _vocabularies['outlined']; + + String get searchUsername => _vocabularies['searchUsername']; + + String get search => _vocabularies['search']; + + String get name => _vocabularies['name']; + + String get id => _vocabularies['id']; + + String get searchResult => _vocabularies['searchResult']; + + String get autoFill => _vocabularies['autoFill']; + + String get firstLoginHint => _vocabularies['firstLoginHint']; + + String get searchStudentIdFormat => _vocabularies['searchStudentIdFormat']; + + String get searchStudentIdError => _vocabularies['searchError']; } class AppLocalizationsDelegate extends LocalizationsDelegate { diff --git a/lib/utils/nkust_helper.dart b/lib/utils/nkust_helper.dart new file mode 100644 index 00000000..ea6dd975 --- /dev/null +++ b/lib/utils/nkust_helper.dart @@ -0,0 +1,40 @@ +import 'dart:async'; +import 'dart:convert'; +import 'dart:io'; + +import 'package:html/parser.dart'; +import 'package:nkust_ap/models/user_info.dart'; + +class NKUSTHelper { + static NKUSTHelper _instance; + + static NKUSTHelper get instance { + if (_instance == null) { + _instance = NKUSTHelper(); + } + return _instance; + } + + Future getUsername(String rocId) async { + final client = HttpClient(); + List bodyBytes = utf8.encode("uid=$rocId"); // utf8 encode + final request = await client.postUrl( + Uri.parse('https://webap.nkust.edu.tw/nkust/system/getuid_1.jsp'), + ); + request.headers.add('Connection', 'keep-alive'); + request.headers.add('Content-Length', "uid=$rocId".length.toString()); + request.headers.add('Content-Type', 'application/x-www-form-urlencoded'); + request.add(bodyBytes); + final response = await request.close(); + var text = await utf8.decoder.bind(response).first; + var document = parse(text); + var elements = document.getElementsByTagName('b'); + if (elements.length >= 4) + return UserInfo( + studentId: elements[4].text.replaceAll(' ', ''), + studentNameCht: elements[2].text, + ); + else + return null; + } +} From 86551f812456562c9ad24ed79e0eecc427fc5b19 Mon Sep 17 00:00:00 2001 From: RainVisitor Date: Sun, 11 Aug 2019 23:10:50 +0800 Subject: [PATCH 12/24] Code tune login page and version check Improve: version check function move to Utils.dart and will check in home_page when auto login preferences utils initial skip if not support for target platform cache utils implement by preference Remove: macOS fde and plugin setting Fix: score page load offline error --- ios/Flutter/flutter_export_environment.sh | 10 + lib/main.dart | 40 ++- lib/models/score_data.dart | 3 +- lib/pages/home/score_page.dart | 4 +- lib/pages/home/user_info_page.dart | 6 +- lib/pages/home_page.dart | 4 +- lib/pages/login_page.dart | 330 ++++++------------ lib/utils/app_localizations.dart | 11 +- lib/utils/cache_utils.dart | 94 +++-- lib/utils/preferences.dart | 5 +- lib/utils/utils.dart | 133 ++++++- lib/widgets/semester_picker.dart | 8 +- macos/Flutter/GeneratedPluginRegistrant.swift | 4 - 13 files changed, 337 insertions(+), 315 deletions(-) create mode 100755 ios/Flutter/flutter_export_environment.sh diff --git a/ios/Flutter/flutter_export_environment.sh b/ios/Flutter/flutter_export_environment.sh new file mode 100755 index 00000000..552c4bdb --- /dev/null +++ b/ios/Flutter/flutter_export_environment.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# This is a generated file; do not edit or check into version control. +export "FLUTTER_ROOT=/Users/rainvisitor/development/flutter" +export "FLUTTER_APPLICATION_PATH=/Users/rainvisitor/Documents/GitHub/NKUST-AP-Flutter" +export "FLUTTER_TARGET=lib/main.dart" +export "FLUTTER_BUILD_DIR=build" +export "SYMROOT=${SOURCE_ROOT}/../build/ios" +export "FLUTTER_FRAMEWORK_DIR=/Users/rainvisitor/development/flutter/bin/cache/artifacts/engine/ios" +export "FLUTTER_BUILD_NAME=3.2.0" +export "FLUTTER_BUILD_NUMBER=30200" diff --git a/lib/main.dart b/lib/main.dart index c7e8aff2..db8c66bc 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -23,15 +23,11 @@ import 'package:nkust_ap/widgets/share_data_widget.dart'; void main() async { bool isInDebugMode = Constants.isInDebugMode; - String themeCode = AppTheme.LIGHT; - if (Platform.isIOS || Platform.isAndroid || Platform.isMacOS) { - await Preferences.init(); - AppIcon.code = - Preferences.getString(Constants.PREF_ICON_STYLE_CODE, AppIcon.OUTLINED); - themeCode = - Preferences.getString(Constants.PREF_THEME_CODE, AppTheme.LIGHT); - } - AppTheme.code = themeCode; + await Preferences.init(); + AppIcon.code = + Preferences.getString(Constants.PREF_ICON_STYLE_CODE, AppIcon.OUTLINED); + AppTheme.code = + Preferences.getString(Constants.PREF_THEME_CODE, AppTheme.LIGHT); if (Platform.isIOS || Platform.isAndroid) { FlutterError.onError = (FlutterErrorDetails details) { if (isInDebugMode) { @@ -81,8 +77,9 @@ class MyApp extends StatefulWidget { class MyAppState extends State { FirebaseAnalytics analytics; - FirebaseMessaging _firebaseMessaging; + FirebaseMessaging firebaseMessaging; ThemeData themeData; + bool isLogin = false, offlineLogin = false; setThemeData(ThemeData themeData) { setState(() { @@ -95,7 +92,7 @@ class MyAppState extends State { themeData = widget.themeData; if (Platform.isAndroid || Platform.isIOS) { analytics = FirebaseAnalytics(); - _firebaseMessaging = FirebaseMessaging(); + firebaseMessaging = FirebaseMessaging(); _initFCM(); FA.analytics = analytics; Preferences.init(); @@ -154,8 +151,8 @@ class MyAppState extends State { } void _initFCM() { - _firebaseMessaging.requestNotificationPermissions(); - _firebaseMessaging.configure( + firebaseMessaging.requestNotificationPermissions(); + firebaseMessaging.configure( onMessage: (Map message) async { if (Constants.isInDebugMode) print("onMessage: $message"); Utils.showFCMNotification( @@ -171,20 +168,25 @@ class MyAppState extends State { if (Constants.isInDebugMode) print("onResume: $message"); }, ); - _firebaseMessaging.requestNotificationPermissions( - const IosNotificationSettings(sound: true, badge: true, alert: true)); - _firebaseMessaging.onIosSettingsRegistered + firebaseMessaging.requestNotificationPermissions( + const IosNotificationSettings( + sound: true, + badge: true, + alert: true, + ), + ); + firebaseMessaging.onIosSettingsRegistered .listen((IosNotificationSettings settings) { print("Settings registered: $settings"); }); - _firebaseMessaging.getToken().then((String token) { + firebaseMessaging.getToken().then((String token) { if (token == null) return; if (Constants.isInDebugMode) { print("Push Messaging token: $token"); } if (Platform.isAndroid) - _firebaseMessaging.subscribeToTopic("Android"); - else if (Platform.isIOS) _firebaseMessaging.subscribeToTopic("IOS"); + firebaseMessaging.subscribeToTopic("Android"); + else if (Platform.isIOS) firebaseMessaging.subscribeToTopic("IOS"); }); } } diff --git a/lib/models/score_data.dart b/lib/models/score_data.dart index 17c1f426..1c1d71ef 100644 --- a/lib/models/score_data.dart +++ b/lib/models/score_data.dart @@ -13,8 +13,7 @@ class ScoreData { return ScoreData( status: json['status'], messages: json['messages'], - content: - json['scores'].length != 0 ? Content.fromJson(json['scores']) : null, + content: json['scores'] != null ? Content.fromJson(json['scores']) : null, ); } diff --git a/lib/pages/home/score_page.dart b/lib/pages/home/score_page.dart index 35bbdd13..85ba9d82 100644 --- a/lib/pages/home/score_page.dart +++ b/lib/pages/home/score_page.dart @@ -306,8 +306,10 @@ class ScorePageState extends State { state = _State.offlineEmpty; else if (scoreData.status == 204) state = _State.empty; - else { + else if (scoreData.status == 200) { state = _State.finish; + } else { + state = _State.error; } }); } diff --git a/lib/pages/home/user_info_page.dart b/lib/pages/home/user_info_page.dart index 177ede09..1e5c1c06 100644 --- a/lib/pages/home/user_info_page.dart +++ b/lib/pages/home/user_info_page.dart @@ -5,8 +5,8 @@ import 'package:nkust_ap/models/user_info.dart'; import 'package:nkust_ap/res/colors.dart' as Resource; import 'package:nkust_ap/utils/cache_utils.dart'; import 'package:nkust_ap/utils/global.dart'; +import 'package:nkust_ap/utils/preferences.dart'; import 'package:nkust_ap/widgets/drawer_body.dart'; -import 'package:shared_preferences/shared_preferences.dart'; enum _Status { loading, finish, error, empty } @@ -138,8 +138,8 @@ class UserInfoPageState extends State } _getUserPicture() async { - SharedPreferences prefs = await SharedPreferences.getInstance(); - bool isOffline = prefs.getBool(Constants.PREF_IS_OFFLINE_LOGIN) ?? false; + bool isOffline = + Preferences.getBool(Constants.PREF_IS_OFFLINE_LOGIN, false); if (!isOffline) { Helper.instance.getUsersPicture().then((url) async { if (this.mounted) { diff --git a/lib/pages/home_page.dart b/lib/pages/home_page.dart index 2a643d45..883b1f2e 100644 --- a/lib/pages/home_page.dart +++ b/lib/pages/home_page.dart @@ -44,10 +44,12 @@ class HomePageState extends State { @override void initState() { - super.initState(); FA.setCurrentScreen("HomePage", "home_page.dart"); _getAllNews(); _getUserInfo(); + if (Preferences.getBool(Constants.PREF_AUTO_LOGIN, false)) + Utils.checkUpdate(context); + super.initState(); } @override diff --git a/lib/pages/login_page.dart b/lib/pages/login_page.dart index b0a4fca2..dcf57deb 100644 --- a/lib/pages/login_page.dart +++ b/lib/pages/login_page.dart @@ -1,55 +1,49 @@ -import 'dart:io'; - import 'package:dio/dio.dart'; -import 'package:encrypt/encrypt.dart'; -import 'package:firebase_remote_config/firebase_remote_config.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:nkust_ap/models/api/login_response.dart'; -import 'package:nkust_ap/pages/search_student_id_page.dart'; import 'package:nkust_ap/res/assets.dart'; import 'package:nkust_ap/res/colors.dart' as Resource; import 'package:nkust_ap/utils/global.dart'; import 'package:nkust_ap/utils/preferences.dart'; -import 'package:nkust_ap/widgets/default_dialog.dart'; import 'package:nkust_ap/widgets/drawer_body.dart'; import 'package:nkust_ap/widgets/progress_dialog.dart'; -import 'package:nkust_ap/widgets/yes_no_dialog.dart'; -import 'package:package_info/package_info.dart'; -import 'package:shared_preferences/shared_preferences.dart'; +import 'package:nkust_ap/widgets/share_data_widget.dart'; class LoginPage extends StatefulWidget { static const String routerName = "/login"; @override - LoginPageState createState() => new LoginPageState(); + LoginPageState createState() => LoginPageState(); } class LoginPageState extends State with SingleTickerProviderStateMixin { AppLocalizations app; - final TextEditingController _username = new TextEditingController(); - final TextEditingController _password = new TextEditingController(); + final TextEditingController _username = TextEditingController(); + final TextEditingController _password = TextEditingController(); var isRememberPassword = true; var isAutoLogin = false; FocusNode usernameFocusNode; FocusNode passwordFocusNode; - final encrypter = - Encrypter(AES(Constants.key, Constants.iv, mode: AESMode.cbc)); + TextStyle get _editTextStyle => TextStyle( + color: Colors.white, + fontSize: 18.0, + decorationColor: Colors.white, + ); @override void initState() { - super.initState(); FA.setCurrentScreen("LoginPage", "login_page.dart"); usernameFocusNode = FocusNode(); passwordFocusNode = FocusNode(); _getPreference(); - if (Platform.isAndroid || Platform.isIOS) { - _checkUpdate(); - } + if (!Preferences.getBool(Constants.PREF_AUTO_LOGIN, false)) + Utils.checkUpdate(context); + super.initState(); } @override @@ -57,38 +51,37 @@ class LoginPageState extends State super.dispose(); } - _editTextStyle() => new TextStyle( - color: Colors.white, fontSize: 18.0, decorationColor: Colors.white); - @override Widget build(BuildContext context) { app = AppLocalizations.of(context); - return OrientationBuilder(builder: (_, orientation) { - return Scaffold( - resizeToAvoidBottomPadding: orientation == Orientation.portrait, - backgroundColor: Resource.Colors.blue, - body: Center( - child: Container( - padding: EdgeInsets.symmetric(horizontal: 30.0), - child: orientation == Orientation.portrait - ? Column( - crossAxisAlignment: CrossAxisAlignment.stretch, - mainAxisAlignment: MainAxisAlignment.spaceAround, - mainAxisSize: MainAxisSize.min, - children: _renderContent(orientation), - ) - : Row( - mainAxisAlignment: MainAxisAlignment.center, - children: _renderContent(orientation), - ), + return OrientationBuilder( + builder: (_, orientation) { + return Scaffold( + resizeToAvoidBottomPadding: orientation == Orientation.portrait, + backgroundColor: Resource.Colors.blue, + body: Center( + child: Container( + padding: EdgeInsets.symmetric(horizontal: 30.0), + child: orientation == Orientation.portrait + ? Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + mainAxisAlignment: MainAxisAlignment.spaceAround, + mainAxisSize: MainAxisSize.min, + children: _renderContent(orientation), + ) + : Row( + mainAxisAlignment: MainAxisAlignment.center, + children: _renderContent(orientation), + ), + ), ), - ), - ); - }); + ); + }, + ); } _renderContent(Orientation orientation) { - List list = orientation == Orientation.portrait + List section = orientation == Orientation.portrait ? [ Center( child: Image.asset( @@ -109,7 +102,7 @@ class LoginPageState extends State ), SizedBox(height: orientation == Orientation.portrait ? 30.0 : 0.0), ]; - List listB = [ + List sectionInput = [ TextField( maxLines: 1, controller: _username, @@ -122,7 +115,7 @@ class LoginPageState extends State decoration: InputDecoration( labelText: app.username, ), - style: _editTextStyle(), + style: _editTextStyle, ), TextField( obscureText: true, @@ -137,7 +130,7 @@ class LoginPageState extends State decoration: InputDecoration( labelText: app.password, ), - style: _editTextStyle(), + style: _editTextStyle, ), SizedBox(height: 8.0), Row( @@ -158,7 +151,10 @@ class LoginPageState extends State onChanged: _onAutoLoginChanged, ), ), - Text(app.autoLogin, style: TextStyle(color: Colors.white)) + Text( + app.autoLogin, + style: TextStyle(color: Colors.white), + ) ], ), onTap: () => _onAutoLoginChanged(!isAutoLogin), @@ -178,7 +174,10 @@ class LoginPageState extends State onChanged: _onRememberPasswordChanged, ), ), - Text(app.remember, style: TextStyle(color: Colors.white)) + Text( + app.remember, + style: TextStyle(color: Colors.white), + ) ], ), onTap: () => _onRememberPasswordChanged(!isRememberPassword), @@ -217,153 +216,42 @@ class LoginPageState extends State ), ), ), - Center( - child: FlatButton( - onPressed: () async { - var username = await Navigator.push( - context, - CupertinoPageRoute( - builder: (_) => SearchStudentIdPage(), - ), - ); - if (username != null && username is String) { - setState(() { - _username.text = username; - }); - Utils.showToast(context, app.firstLoginHint); - } - }, - child: Text( - app.searchUsername, - style: TextStyle(color: Colors.white, fontSize: 16.0), - ), - ), - ), +// Center( +// child: FlatButton( +// onPressed: () async { +// var username = await Navigator.push( +// context, +// CupertinoPageRoute( +// builder: (_) => SearchStudentIdPage(), +// ), +// ); +// if (username != null && username is String) { +// setState(() { +// _username.text = username; +// }); +// Utils.showToast(context, app.firstLoginHint); +// } +// }, +// child: Text( +// app.searchUsername, +// style: TextStyle(color: Colors.white, fontSize: 16.0), +// ), +// ), +// ), ]; if (orientation == Orientation.portrait) { - list.addAll(listB); + section.addAll(sectionInput); } else { - list.add(Expanded( + section.add( + Expanded( child: Column( - mainAxisAlignment: MainAxisAlignment.center, children: listB))); - } - return list; - } - - _checkUpdate() async { - PackageInfo packageInfo = await PackageInfo.fromPlatform(); - await Future.delayed(Duration(milliseconds: 50)); - var currentVersion = - Preferences.getString(Constants.PREF_CURRENT_VERSION, ''); - if (currentVersion != packageInfo.buildNumber) { - showDialog( - context: context, - builder: (BuildContext context) => DefaultDialog( - title: app.updateNoteTitle, - contentWidget: Text( - "v${packageInfo.version}\n" - "${app.updateNoteContent}", - textAlign: TextAlign.center, - style: TextStyle(color: Resource.Colors.grey), + mainAxisAlignment: MainAxisAlignment.center, + children: sectionInput, ), - actionText: app.iKnow, - actionFunction: () => - Navigator.of(context, rootNavigator: true).pop('dialog'), ), ); - Preferences.setString( - Constants.PREF_CURRENT_VERSION, packageInfo.buildNumber); - } - if (!Constants.isInDebugMode) { - final RemoteConfig remoteConfig = await RemoteConfig.instance; - try { - await remoteConfig.fetch(expiration: const Duration(seconds: 10)); - await remoteConfig.activateFetched(); - } on FetchThrottledException catch (exception) {} catch (exception) {} - String url = ""; - int versionDiff = 0, newVersion; - if (Platform.isAndroid) { - url = "market://details?id=${packageInfo.packageName}"; - newVersion = remoteConfig.getInt(Constants.ANDROID_APP_VERSION); - } else if (Platform.isIOS) { - url = - "itms-apps://itunes.apple.com/tw/app/apple-store/id1439751462?mt=8"; - newVersion = remoteConfig.getInt(Constants.IOS_APP_VERSION); - } else { - url = "https://www.facebook.com/NKUST.ITC/"; - newVersion = remoteConfig.getInt(Constants.APP_VERSION); - } - versionDiff = newVersion - int.parse(packageInfo.buildNumber); - String versionContent = - "\nv${newVersion ~/ 10000}.${newVersion % 1000 ~/ 100}.${newVersion % 100}\n"; - switch (AppLocalizations.locale.languageCode) { - case 'zh': - versionContent += - remoteConfig.getString(Constants.NEW_VERSION_CONTENT_ZH); - break; - default: - versionContent += - remoteConfig.getString(Constants.NEW_VERSION_CONTENT_EN); - break; - } - if (versionDiff < 5 && versionDiff > 0) { - showDialog( - context: context, - builder: (BuildContext context) => YesNoDialog( - title: app.updateTitle, - contentWidget: RichText( - textAlign: TextAlign.center, - text: TextSpan( - style: TextStyle( - color: Resource.Colors.grey, height: 1.3, fontSize: 16.0), - children: [ - TextSpan( - text: - '${Utils.getPlatformUpdateContent(app)}\n${versionContent.replaceAll('\\n', '\n')}', - style: TextStyle(fontWeight: FontWeight.bold), - ), - ]), - ), - leftActionText: app.skip, - rightActionText: app.update, - leftActionFunction: null, - rightActionFunction: () { - Utils.launchUrl(url); - }, - ), - ); - } else if (versionDiff >= 5) { - showDialog( - context: context, - barrierDismissible: false, - builder: (BuildContext context) => WillPopScope( - child: DefaultDialog( - title: app.updateTitle, - actionText: app.update, - contentWidget: RichText( - textAlign: TextAlign.center, - text: TextSpan( - style: TextStyle( - color: Resource.Colors.grey, - height: 1.3, - fontSize: 16.0), - children: [ - TextSpan( - text: - '${Utils.getPlatformUpdateContent(app)}\n${versionContent.replaceAll('\\n', '\n')}', - style: TextStyle(fontWeight: FontWeight.bold)), - ]), - ), - actionFunction: () { - Utils.launchUrl(url); - }), - onWillPop: () async { - return false; - }, - ), - ); - } } + return section; } _onRememberPasswordChanged(bool value) async { @@ -388,14 +276,11 @@ class LoginPageState extends State isRememberPassword = Preferences.getBool(Constants.PREF_REMEMBER_PASSWORD, true); isAutoLogin = Preferences.getBool(Constants.PREF_AUTO_LOGIN, false); - var username = Preferences.getString(Constants.PREF_USERNAME, ''); - var password = ''; - if (isRememberPassword) { - password = Preferences.getStringSecurity(Constants.PREF_PASSWORD, ''); - } setState(() { - _username.text = username; - _password.text = password; + _username.text = Preferences.getString(Constants.PREF_USERNAME, ''); + _password.text = isRememberPassword + ? Preferences.getStringSecurity(Constants.PREF_PASSWORD, '') + : ''; }); await Future.delayed(Duration(microseconds: 50)); if (isAutoLogin) { @@ -408,37 +293,37 @@ class LoginPageState extends State Utils.showToast(context, app.doNotEmpty); } else { showDialog( - context: context, - builder: (BuildContext context) => WillPopScope( - child: ProgressDialog(app.logining), - onWillPop: () async { - return false; - }), - barrierDismissible: false); + context: context, + builder: (BuildContext context) => WillPopScope( + child: ProgressDialog(app.logining), + onWillPop: () async { + return false; + }), + barrierDismissible: false, + ); Preferences.setString(Constants.PREF_USERNAME, _username.text); Helper.instance .login(_username.text, _password.text) .then((LoginResponse response) async { - if (Navigator.canPop(context)) Navigator.pop(context, 'dialog'); - - if (Platform.isAndroid || Platform.isIOS || Platform.isMacOS) { - if (response.isLogin != null) { - Preferences.setBool(Constants.PREF_AP_ENABLE, response.isLogin.ap); - Preferences.setBool( - Constants.PREF_BUS_ENABLE, response.isLogin.bus); - Preferences.setBool( - Constants.PREF_LEAVE_ENABLE, response.isLogin.leave); - } - Preferences.setString(Constants.PREF_USERNAME, _username.text); - if (isRememberPassword) { - Preferences.setStringSecurity( - Constants.PREF_PASSWORD, _password.text); - } - Preferences.setBool(Constants.PREF_IS_OFFLINE_LOGIN, false); + if (Navigator.canPop(context)) + Navigator.of(context, rootNavigator: true).pop(); + if (response.isLogin != null) { + Preferences.setBool(Constants.PREF_AP_ENABLE, response.isLogin.ap); + Preferences.setBool(Constants.PREF_BUS_ENABLE, response.isLogin.bus); + Preferences.setBool( + Constants.PREF_LEAVE_ENABLE, response.isLogin.leave); + } + Preferences.setString(Constants.PREF_USERNAME, _username.text); + if (isRememberPassword) { + Preferences.setStringSecurity( + Constants.PREF_PASSWORD, _password.text); } + Preferences.setBool(Constants.PREF_IS_OFFLINE_LOGIN, false); + ShareDataWidget.of(context).data.isLogin = true; _navigateToFilterObject(context); }).catchError((e) { - if (Navigator.canPop(context)) Navigator.pop(context, 'dialog'); + if (Navigator.canPop(context)) + Navigator.of(context, rootNavigator: true).pop(); if (e is DioError) { switch (e.type) { case DioErrorType.RESPONSE: @@ -478,14 +363,17 @@ class LoginPageState extends State _navigateToFilterObject(BuildContext context) async { final result = await Navigator.push( - context, MaterialPageRoute(builder: (context) => HomePage())); + context, + MaterialPageRoute( + builder: (context) => HomePage(), + ), + ); print(result); clearSetting(); } void clearSetting() async { - var prefs = await SharedPreferences.getInstance(); - prefs.setBool(Constants.PREF_AUTO_LOGIN, false); + Preferences.setBool(Constants.PREF_AUTO_LOGIN, false); setState(() { isAutoLogin = false; pictureBytes = null; diff --git a/lib/utils/app_localizations.dart b/lib/utils/app_localizations.dart index e3d4302a..109ef0ce 100644 --- a/lib/utils/app_localizations.dart +++ b/lib/utils/app_localizations.dart @@ -928,7 +928,14 @@ class AppLocalizations { String get appVersion => _vocabularies['app_version']; - String get updateContent => _vocabularies['update_content']; + String get updateContent { + if (Platform.isAndroid) + return updateAndroidContent; + else if (Platform.isIOS) + return updateIOSContent; + else + return _vocabularies['update_content']; + } String get updateAndroidContent => _vocabularies['update_android_content']; @@ -1147,7 +1154,7 @@ class AppLocalizationsDelegate extends LocalizationsDelegate { @override Future load(Locale locale) async { print('Load ${locale.languageCode}'); - if (Platform.isAndroid || Platform.isIOS || Platform.isMacOS) { + if (Platform.isAndroid || Platform.isIOS) { SharedPreferences preference = await SharedPreferences.getInstance(); String languageCode = preference.getString(Constants.PREF_LANGUAGE_CODE) ?? 'system'; diff --git a/lib/utils/cache_utils.dart b/lib/utils/cache_utils.dart index af83af70..8e99d61e 100644 --- a/lib/utils/cache_utils.dart +++ b/lib/utils/cache_utils.dart @@ -10,105 +10,94 @@ import 'package:nkust_ap/models/schedule_data.dart'; import 'package:nkust_ap/models/score_data.dart'; import 'package:nkust_ap/models/semester_data.dart'; import 'package:nkust_ap/models/user_info.dart'; -import 'package:shared_preferences/shared_preferences.dart'; +import 'package:nkust_ap/utils/preferences.dart'; class CacheUtils { static void saveSemesterData(SemesterData semesterData) async { if (semesterData == null) return; - SharedPreferences prefs = await SharedPreferences.getInstance(); - await prefs.setString( + Preferences.setString( Constants.PREF_SEMESTER_DATA, jsonEncode(semesterData)); } static Future loadSemesterData() async { - SharedPreferences prefs = await SharedPreferences.getInstance(); - String json = prefs.getString(Constants.PREF_SEMESTER_DATA) ?? ""; - if (json == "") return null; + String json = Preferences.getString(Constants.PREF_SEMESTER_DATA, ''); + if (json == '') return null; SemesterData semesterData = SemesterData.fromJson(jsonDecode(json)); return semesterData; } static void saveCourseData(String value, CourseData courseData) async { if (courseData == null) return; - SharedPreferences prefs = await SharedPreferences.getInstance(); - String username = prefs.getString(Constants.PREF_USERNAME) ?? ''; - await prefs.setString('${Constants.PREF_COURSE_DATA}_${username}_$value', + String username = Preferences.getString(Constants.PREF_USERNAME, ''); + await Preferences.setString( + '${Constants.PREF_COURSE_DATA}_${username}_$value', jsonEncode(courseData)); } static Future loadCourseData(String value) async { - SharedPreferences prefs = await SharedPreferences.getInstance(); - String username = prefs.getString(Constants.PREF_USERNAME) ?? ''; - String json = - prefs.getString('${Constants.PREF_COURSE_DATA}_${username}_$value') ?? - ''; + String username = Preferences.getString(Constants.PREF_USERNAME, ''); + String json = Preferences.getString( + '${Constants.PREF_COURSE_DATA}_${username}_$value', ''); if (json == '') return null; return CourseData.fromJson(jsonDecode(json)); } static void saveScoreData(String value, ScoreData scoreData) async { if (scoreData == null) return; - SharedPreferences prefs = await SharedPreferences.getInstance(); - String username = prefs.getString(Constants.PREF_USERNAME) ?? ''; - await prefs.setString('${Constants.PREF_SCORE_DATA}_${username}_$value', + String username = Preferences.getString(Constants.PREF_USERNAME, ''); + await Preferences.setString( + '${Constants.PREF_SCORE_DATA}_${username}_$value', jsonEncode(scoreData)); } static Future loadScoreData(String value) async { - SharedPreferences prefs = await SharedPreferences.getInstance(); - String username = prefs.getString(Constants.PREF_USERNAME) ?? ''; - String json = - prefs.getString('${Constants.PREF_SCORE_DATA}_${username}_$value') ?? - ''; + String username = Preferences.getString(Constants.PREF_USERNAME, ''); + String json = Preferences.getString( + '${Constants.PREF_SCORE_DATA}_${username}_$value', ''); if (json == '') return null; return ScoreData.fromJson(jsonDecode(json)); } static void saveScheduleDataList(List scheduleDataList) async { if (scheduleDataList == null) return; - SharedPreferences prefs = await SharedPreferences.getInstance(); - await prefs.setString( + await Preferences.setString( Constants.PREF_SCHEDULE_DATA, jsonEncode(scheduleDataList)); } static Future> loadScheduleDataList() async { - SharedPreferences prefs = await SharedPreferences.getInstance(); - String json = prefs.getString(Constants.PREF_SCHEDULE_DATA) ?? ''; + String json = Preferences.getString(Constants.PREF_SCHEDULE_DATA, ''); if (json == '') return null; return ScheduleData.toList(jsonDecode(json)); } static void saveUserInfo(UserInfo userInfo) async { if (userInfo == null) return; - SharedPreferences prefs = await SharedPreferences.getInstance(); - String username = prefs.getString(Constants.PREF_USERNAME) ?? ''; - await prefs.setString( + + String username = Preferences.getString(Constants.PREF_USERNAME, ''); + await Preferences.setString( '${Constants.PREF_USER_INFO}_$username', jsonEncode(userInfo)); } static Future loadUserInfo() async { - SharedPreferences prefs = await SharedPreferences.getInstance(); - String username = prefs.getString(Constants.PREF_USERNAME) ?? ''; + String username = Preferences.getString(Constants.PREF_USERNAME, ''); String json = - prefs.getString('${Constants.PREF_USER_INFO}_$username') ?? ''; + Preferences.getString('${Constants.PREF_USER_INFO}_$username', ''); if (json == '') return null; return UserInfo.fromJson(jsonDecode(json)); } static void saveLeaveData(String value, LeaveResponse leaveData) async { if (leaveData == null) return; - SharedPreferences prefs = await SharedPreferences.getInstance(); - String username = prefs.getString(Constants.PREF_USERNAME) ?? ''; - await prefs.setString('${Constants.PREF_LEAVE_DATA}_${username}_$value', + String username = Preferences.getString(Constants.PREF_USERNAME, ''); + await Preferences.setString( + '${Constants.PREF_LEAVE_DATA}_${username}_$value', jsonEncode(leaveData)); } static Future loadLeaveData(String value) async { - SharedPreferences prefs = await SharedPreferences.getInstance(); - String username = prefs.getString(Constants.PREF_USERNAME) ?? ''; - String json = - prefs.getString('${Constants.PREF_LEAVE_DATA}_${username}_$value') ?? - ''; + String username = Preferences.getString(Constants.PREF_USERNAME, ''); + String json = Preferences.getString( + '${Constants.PREF_LEAVE_DATA}_${username}_$value', ''); if (json == '') return null; return LeaveResponse.fromJson(jsonDecode(json)); } @@ -116,35 +105,32 @@ class CacheUtils { static void saveBusReservationsData( BusReservationsData busReservationsData) async { if (busReservationsData == null) return; - SharedPreferences prefs = await SharedPreferences.getInstance(); - String username = prefs.getString(Constants.PREF_USERNAME) ?? ''; - await prefs.setString('${Constants.PREF_BUS_RESERVATIONS_DATA}_$username', + String username = Preferences.getString(Constants.PREF_USERNAME, ''); + await Preferences.setString( + '${Constants.PREF_BUS_RESERVATIONS_DATA}_$username', jsonEncode(busReservationsData)); } static Future loadBusReservationsData() async { - SharedPreferences prefs = await SharedPreferences.getInstance(); - String username = prefs.getString(Constants.PREF_USERNAME) ?? ''; - String json = - prefs.getString('${Constants.PREF_BUS_RESERVATIONS_DATA}_$username') ?? - ''; + String username = Preferences.getString(Constants.PREF_USERNAME, ''); + String json = Preferences.getString( + '${Constants.PREF_BUS_RESERVATIONS_DATA}_$username', ''); if (json == '') return null; return BusReservationsData.fromJson(jsonDecode(json)); } static void savePictureData(Uint8List bytes) async { if (bytes == null) return; - SharedPreferences prefs = await SharedPreferences.getInstance(); - String username = prefs.getString(Constants.PREF_USERNAME) ?? ''; - await prefs.setString( + + String username = Preferences.getString(Constants.PREF_USERNAME, ''); + await Preferences.setString( '${Constants.PREF_PICTURE_DATA}_$username', base64.encode(bytes)); } static Future loadPictureData() async { - SharedPreferences prefs = await SharedPreferences.getInstance(); - String username = prefs.getString(Constants.PREF_USERNAME) ?? ''; + String username = Preferences.getString(Constants.PREF_USERNAME, ''); String base64String = - prefs.getString('${Constants.PREF_PICTURE_DATA}_$username') ?? ''; + Preferences.getString('${Constants.PREF_PICTURE_DATA}_$username', ''); if (base64String == '') return null; return base64.decode(base64String); } diff --git a/lib/utils/preferences.dart b/lib/utils/preferences.dart index 53ef2b5e..f069f8be 100644 --- a/lib/utils/preferences.dart +++ b/lib/utils/preferences.dart @@ -1,3 +1,5 @@ +import 'dart:io'; + import 'package:encrypt/encrypt.dart'; import 'package:nkust_ap/config/constants.dart'; import 'package:shared_preferences/shared_preferences.dart'; @@ -14,7 +16,8 @@ class Preferences { static SharedPreferences prefs; static init() async { - prefs = await SharedPreferences.getInstance(); + if (Platform.isIOS || Platform.isAndroid) + prefs = await SharedPreferences.getInstance(); } static Future setStringSecurity(String key, String data) async { diff --git a/lib/utils/utils.dart b/lib/utils/utils.dart index 5ac53e46..5e080537 100644 --- a/lib/utils/utils.dart +++ b/lib/utils/utils.dart @@ -3,6 +3,7 @@ import 'dart:io'; import 'package:app_review/app_review.dart'; import 'package:connectivity/connectivity.dart'; import 'package:dio/dio.dart'; +import 'package:firebase_remote_config/firebase_remote_config.dart'; import 'package:flutter/material.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:nkust_ap/config/constants.dart'; @@ -11,6 +12,8 @@ import 'package:nkust_ap/models/course_data.dart'; import 'package:nkust_ap/res/resource.dart' as Resource; import 'package:nkust_ap/utils/app_localizations.dart'; import 'package:nkust_ap/utils/firebase_analytics_utils.dart'; +import 'package:nkust_ap/utils/preferences.dart'; +import 'package:nkust_ap/widgets/default_dialog.dart'; import 'package:nkust_ap/widgets/yes_no_dialog.dart'; import 'package:package_info/package_info.dart'; import 'package:share/share.dart'; @@ -59,13 +62,13 @@ class Utils { ); } - static String getPlatformUpdateContent(AppLocalizations app) { + static String getPlatformUpdateContent(BuildContext context) { if (Platform.isAndroid) - return app.updateAndroidContent; + return AppLocalizations.of(context).updateAndroidContent; else if (Platform.isIOS) - return app.updateIOSContent; + return AppLocalizations.of(context).updateIOSContent; else - return app.updateContent; + return AppLocalizations.of(context).updateContent; } static void showSnackBarBar( @@ -393,4 +396,126 @@ class Utils { //TODO implement other platform system local notification } } + + static checkUpdate(BuildContext context) async { + await Future.delayed( + Duration(milliseconds: 50), + ); + if (!(Platform.isAndroid || Platform.isIOS)) return; + final app = AppLocalizations.of(context); + PackageInfo packageInfo = await PackageInfo.fromPlatform(); + var currentVersion = + Preferences.getString(Constants.PREF_CURRENT_VERSION, ''); + if (currentVersion != packageInfo.buildNumber) { + showDialog( + context: context, + builder: (BuildContext context) => DefaultDialog( + title: app.updateNoteTitle, + contentWidget: Text( + "v${packageInfo.version}\n" + "${app.updateNoteContent}", + textAlign: TextAlign.center, + style: TextStyle(color: Resource.Colors.grey), + ), + actionText: app.iKnow, + actionFunction: () => + Navigator.of(context, rootNavigator: true).pop('dialog'), + ), + ); + Preferences.setString( + Constants.PREF_CURRENT_VERSION, packageInfo.buildNumber); + } + if (!Constants.isInDebugMode) { + final RemoteConfig remoteConfig = await RemoteConfig.instance; + try { + await remoteConfig.fetch( + expiration: const Duration(seconds: 10), + ); + await remoteConfig.activateFetched(); + } on FetchThrottledException catch (exception) {} catch (exception) {} + String url = ""; + int versionDiff = 0, newVersion; + if (Platform.isAndroid) { + url = "market://details?id=${packageInfo.packageName}"; + newVersion = remoteConfig.getInt(Constants.ANDROID_APP_VERSION); + } else if (Platform.isIOS) { + url = + "itms-apps://itunes.apple.com/tw/app/apple-store/id1439751462?mt=8"; + newVersion = remoteConfig.getInt(Constants.IOS_APP_VERSION); + } else { + url = "https://www.facebook.com/NKUST.ITC/"; + newVersion = remoteConfig.getInt(Constants.APP_VERSION); + } + versionDiff = newVersion - int.parse(packageInfo.buildNumber); + String versionContent = + "\nv${newVersion ~/ 10000}.${newVersion % 1000 ~/ 100}.${newVersion % 100}\n"; + switch (AppLocalizations.locale.languageCode) { + case 'zh': + versionContent += + remoteConfig.getString(Constants.NEW_VERSION_CONTENT_ZH); + break; + default: + versionContent += + remoteConfig.getString(Constants.NEW_VERSION_CONTENT_EN); + break; + } + if (versionDiff < 5 && versionDiff > 0) { + showDialog( + context: context, + builder: (BuildContext context) => YesNoDialog( + title: app.updateTitle, + contentWidget: RichText( + textAlign: TextAlign.center, + text: TextSpan( + style: TextStyle( + color: Resource.Colors.grey, height: 1.3, fontSize: 16.0), + children: [ + TextSpan( + text: '${app.updateContent}\n' + '${versionContent.replaceAll('\\n', '\n')}', + style: TextStyle(fontWeight: FontWeight.bold), + ), + ]), + ), + leftActionText: app.skip, + rightActionText: app.update, + leftActionFunction: null, + rightActionFunction: () { + Utils.launchUrl(url); + }, + ), + ); + } else if (versionDiff >= 5) { + showDialog( + context: context, + barrierDismissible: false, + builder: (BuildContext context) => WillPopScope( + child: DefaultDialog( + title: app.updateTitle, + actionText: app.update, + contentWidget: RichText( + textAlign: TextAlign.center, + text: TextSpan( + style: TextStyle( + color: Resource.Colors.grey, + height: 1.3, + fontSize: 16.0), + children: [ + TextSpan( + text: '${app.updateContent}\n' + '${versionContent.replaceAll('\\n', '\n')}', + style: TextStyle(fontWeight: FontWeight.bold)), + ]), + ), + actionFunction: () { + Utils.launchUrl(url); + }), + onWillPop: () async { + return false; + }, + ), + ); + } + } + } } diff --git a/lib/widgets/semester_picker.dart b/lib/widgets/semester_picker.dart index 699ab880..b4a0ee2c 100644 --- a/lib/widgets/semester_picker.dart +++ b/lib/widgets/semester_picker.dart @@ -65,9 +65,11 @@ class SemesterPickerState extends State { this.semesterData = await CacheUtils.loadSemesterData(); if (this.semesterData == null) return; widget.onSelect(semesterData.defaultSemester, semesterData.defaultIndex); - setState(() { - selectSemester = semesterData.defaultSemester; - }); + if (mounted) { + setState(() { + selectSemester = semesterData.defaultSemester; + }); + } } void _getSemester() async { diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 251c25de..58425bba 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -4,10 +4,6 @@ import Foundation import FlutterMacOS -import shared_preferences_fde -import url_launcher_fde func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { - SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) - UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) } From 429badd8da06933eca43f2da31b91da64772794d Mon Sep 17 00:00:00 2001 From: RainVisitor Date: Sun, 11 Aug 2019 23:53:52 +0800 Subject: [PATCH 13/24] Fix new_content_page overflow pixel in landscape Code tune new_content_page Add cupertino page route in util page --- lib/pages/home/news_content_page.dart | 172 ++++++++++++-------------- lib/pages/home_page.dart | 5 +- lib/utils/utils.dart | 9 ++ 3 files changed, 95 insertions(+), 91 deletions(-) diff --git a/lib/pages/home/news_content_page.dart b/lib/pages/home/news_content_page.dart index 6dbf3e48..7d474d69 100644 --- a/lib/pages/home/news_content_page.dart +++ b/lib/pages/home/news_content_page.dart @@ -9,20 +9,6 @@ import 'package:nkust_ap/utils/global.dart'; enum _Status { loading, finish, error, empty } -class NewsContentPageRoute extends MaterialPageRoute { - NewsContentPageRoute(this.news) - : super(builder: (BuildContext context) => new NewsContentPage(news)); - - final News news; - - @override - Widget buildPage(BuildContext context, Animation animation, - Animation secondaryAnimation) { - return new FadeTransition( - opacity: animation, child: new NewsContentPage(news)); - } -} - class NewsContentPage extends StatefulWidget { static const String routerName = "/news/content"; @@ -31,22 +17,17 @@ class NewsContentPage extends StatefulWidget { NewsContentPage(this.news); @override - NewsContentPageState createState() => new NewsContentPageState(news); + NewsContentPageState createState() => NewsContentPageState(); } -class NewsContentPageState extends State - with SingleTickerProviderStateMixin { +class NewsContentPageState extends State { _Status state = _Status.finish; AppLocalizations app; - final News news; - - NewsContentPageState(this.news); - @override void initState() { + FA.setCurrentScreen("NewsContentPage", "widget.s_content_page.dart"); super.initState(); - FA.setCurrentScreen("NewsContentPage", "news_content_page.dart"); } @override @@ -54,76 +35,68 @@ class NewsContentPageState extends State super.dispose(); } - Widget _homebody(Orientation orientation) { + @override + Widget build(BuildContext context) { + app = AppLocalizations.of(context); + return Scaffold( + appBar: AppBar( + title: Text(app.news), + backgroundColor: Resource.Colors.blue, + ), + body: _homebody(), + ); + } + + Widget _homebody() { switch (state) { case _Status.loading: return Center( child: CircularProgressIndicator(), ); case _Status.finish: - return OrientationBuilder(builder: (_, orientation) { - if (orientation == Orientation.portrait) - return Column( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.center, - children: _renderContent(orientation), - ); - else - return Row( + return OrientationBuilder( + builder: (_, orientation) { + return Flex( + direction: orientation == Orientation.portrait + ? Axis.vertical + : Axis.horizontal, crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center, children: _renderContent(orientation), ); - }); + }, + ); default: return Container(); } } - @override - Widget build(BuildContext context) { - app = AppLocalizations.of(context); - return Scaffold( - appBar: new AppBar( - title: new Text(app.news), - backgroundColor: Resource.Colors.blue, - ), - body: OrientationBuilder(builder: (_, orientation) { - return _homebody(orientation); - }), - ); - } - _renderContent(Orientation orientation) { - List list = [ - AspectRatio( - aspectRatio: orientation == Orientation.portrait ? 4 / 3 : 9 / 16, - child: Hero( - tag: news.hashCode, - child: (Platform.isIOS || Platform.isAndroid) - ? CachedNetworkImage( - imageUrl: news.image, - errorWidget: (context, url, error) => Icon(Icons.error), - ) - : Image.network(news.image), - ), + final Widget image = AspectRatio( + aspectRatio: orientation == Orientation.portrait ? 4 / 3 : 9 / 16, + child: Hero( + tag: widget.news.hashCode, + child: (Platform.isIOS || Platform.isAndroid) + ? CachedNetworkImage( + imageUrl: widget.news.image, + errorWidget: (context, url, error) => Icon(Icons.error), + ) + : Image.network(widget.news.image), ), - SizedBox( - height: orientation == Orientation.portrait ? 16.0 : 0.0, - width: orientation == Orientation.portrait ? 0.0 : 32.0), - ]; - List listB = [ + ); + final List newsContent = [ Hero( tag: Constants.TAG_NEWS_TITLE, child: Material( color: Colors.transparent, child: Text( - news.title, + widget.news.title, textAlign: TextAlign.center, style: TextStyle( - fontSize: 20.0, - color: Resource.Colors.greyText, - fontWeight: FontWeight.w500), + fontSize: 20.0, + color: Resource.Colors.greyText, + fontWeight: FontWeight.w500, + ), ), ), ), @@ -135,36 +108,55 @@ class NewsContentPageState extends State padding: EdgeInsets.symmetric( horizontal: orientation == Orientation.portrait ? 16.0 : 0.0), child: Text( - news.content, + widget.news.content, textAlign: TextAlign.center, - style: TextStyle(fontSize: 16.0, color: Resource.Colors.greyText), + style: TextStyle( + fontSize: 16.0, + color: Resource.Colors.greyText, + ), ), ), - SizedBox(height: 16.0), - RaisedButton( - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.all( - Radius.circular(30.0), + if (widget.news.url.isNotEmpty) ...[ + SizedBox(height: 16.0), + RaisedButton( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.all( + Radius.circular(30.0), + ), + ), + onPressed: () { + Utils.launchUrl(widget.news.url); + String message = widget.news.content.length > 12 + ? widget.news.content + : widget.news.content.substring(0, 12); + FA.logAction('news_link', 'click', message: message); + }, + padding: EdgeInsets.symmetric(vertical: 12.0, horizontal: 0.0), + color: Resource.Colors.yellow, + child: Icon( + AppIcon.exitToApp, + color: Colors.white, ), ), - onPressed: () { - if (news.url.isNotEmpty) Utils.launchUrl(news.url); - String message = news.content.length > 12 - ? news.content - : news.content.substring(0, 12); - FA.logAction('news_link', 'click', message: message); - }, - padding: EdgeInsets.symmetric(vertical: 12.0, horizontal: 0.0), - color: Resource.Colors.yellow, - child: Icon(AppIcon.exitToApp, color: Colors.white), - ) + ], ]; if (orientation == Orientation.portrait) { - list.addAll(listB); + return [ + image, + SizedBox(height: 16.0), + ...newsContent, + ]; } else { - list.add( - Column(mainAxisAlignment: MainAxisAlignment.center, children: listB)); + return [ + Expanded(child: image), + SizedBox(width: 32.0), + Expanded( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: newsContent, + ), + ), + ]; } - return list; } } diff --git a/lib/pages/home_page.dart b/lib/pages/home_page.dart index 883b1f2e..cf17f283 100644 --- a/lib/pages/home_page.dart +++ b/lib/pages/home_page.dart @@ -66,7 +66,10 @@ class HomePageState extends State { horizontal: MediaQuery.of(context).size.width * 0.02), child: GestureDetector( onTap: () { - Navigator.of(context).push(NewsContentPageRoute(news)); + Utils.pushCupertinoStyle( + context, + NewsContentPage(news), + ); String message = news.content.length > 12 ? news.content : news.content.substring(0, 12); diff --git a/lib/utils/utils.dart b/lib/utils/utils.dart index 5e080537..c4cf259e 100644 --- a/lib/utils/utils.dart +++ b/lib/utils/utils.dart @@ -4,6 +4,7 @@ import 'package:app_review/app_review.dart'; import 'package:connectivity/connectivity.dart'; import 'package:dio/dio.dart'; import 'package:firebase_remote_config/firebase_remote_config.dart'; +import 'package:flutter/cupertino.dart' show CupertinoPageRoute; import 'package:flutter/material.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:nkust_ap/config/constants.dart'; @@ -518,4 +519,12 @@ class Utils { } } } + + static pushCupertinoStyle(BuildContext context, Widget page) { + Navigator.of(context).push( + CupertinoPageRoute(builder: (BuildContext context) { + return page; + }), + ); + } } From ce4b617b1354ed9fb6480a0b57cec40c78f33654 Mon Sep 17 00:00:00 2001 From: RainVisitor Date: Mon, 12 Aug 2019 00:52:54 +0800 Subject: [PATCH 14/24] Code tune home_page Update page route to cupertino page route for home_page --- lib/pages/home_page.dart | 303 ++++++++++++++++++++------------------- 1 file changed, 154 insertions(+), 149 deletions(-) diff --git a/lib/pages/home_page.dart b/lib/pages/home_page.dart index cf17f283..577b018e 100644 --- a/lib/pages/home_page.dart +++ b/lib/pages/home_page.dart @@ -16,12 +16,18 @@ import 'package:nkust_ap/widgets/yes_no_dialog.dart'; enum _State { loading, finish, error, empty, offline } class HomePageRoute extends MaterialPageRoute { - HomePageRoute() : super(builder: (BuildContext context) => new HomePage()); + HomePageRoute() + : super( + builder: (BuildContext context) => HomePage(), + ); @override Widget buildPage(BuildContext context, Animation animation, Animation secondaryAnimation) { - return new FadeTransition(opacity: animation, child: new HomePage()); + return FadeTransition( + opacity: animation, + child: HomePage(), + ); } } @@ -29,7 +35,7 @@ class HomePage extends StatefulWidget { static const String routerName = "/home"; @override - HomePageState createState() => new HomePageState(); + HomePageState createState() => HomePageState(); } class HomePageState extends State { @@ -45,7 +51,7 @@ class HomePageState extends State { @override void initState() { FA.setCurrentScreen("HomePage", "home_page.dart"); - _getAllNews(); + _getNewsAll(); _getUserInfo(); if (Preferences.getBool(Constants.PREF_AUTO_LOGIN, false)) Utils.checkUpdate(context); @@ -57,6 +63,64 @@ class HomePageState extends State { super.dispose(); } + @override + Widget build(BuildContext context) { + app = AppLocalizations.of(context); + if (state != _State.offline) _setupBusNotify(context); + return WillPopScope( + child: Scaffold( + appBar: AppBar( + title: Text(app.appName), + backgroundColor: Resource.Colors.blue, + actions: [ + IconButton( + icon: Icon(AppIcon.info), + onPressed: _showInformationDialog, + ) + ], + ), + drawer: DrawerBody(userInfo: userInfo), + body: OrientationBuilder(builder: (_, orientation) { + return Container( + padding: EdgeInsets.symmetric( + vertical: orientation == Orientation.portrait ? 32.0 : 4.0), + child: Center( + child: _homebody(orientation), + ), + ); + }), + bottomNavigationBar: BottomNavigationBar( + elevation: 12.0, + fixedColor: Resource.Colors.bottomNavigationSelect, + unselectedItemColor: Resource.Colors.bottomNavigationSelect, + type: BottomNavigationBarType.fixed, + selectedFontSize: 12.0, + unselectedFontSize: 12.0, + selectedIconTheme: IconThemeData(size: 24.0), + currentIndex: _currentTabIndex, + onTap: onTabTapped, + items: [ + BottomNavigationBarItem( + icon: Icon(AppIcon.directionsBus), + title: Text(app.bus), + ), + BottomNavigationBarItem( + icon: Icon(AppIcon.classIcon), + title: Text(app.course), + ), + BottomNavigationBarItem( + icon: Icon(AppIcon.assignment), + title: Text(app.score), + ), + ], + ), + ), + onWillPop: () async { + if (Platform.isAndroid) _showLogoutDialog(); + return false; + }); + } + Widget _newsImage(News news, Orientation orientation, bool active) { return AnimatedContainer( duration: Duration(milliseconds: 500), @@ -135,27 +199,29 @@ class HomePageState extends State { ), Expanded( child: PageView.builder( - controller: pageController, - itemCount: newsList.length, - itemBuilder: (context, int currentIndex) { - bool active = (currentIndex == _currentNewsIndex); - return _newsImage( - newsList[currentIndex], orientation, active); - }), + controller: pageController, + itemCount: newsList.length, + itemBuilder: (context, int currentIndex) { + bool active = (currentIndex == _currentNewsIndex); + return _newsImage( + newsList[currentIndex], orientation, active); + }, + ), ), SizedBox(height: orientation == Orientation.portrait ? 16.0 : 4.0), RichText( textAlign: TextAlign.center, text: TextSpan( - style: TextStyle(color: Resource.Colors.grey, fontSize: 24.0), - children: [ - TextSpan( - text: - '${newsList.length >= 10 && _currentNewsIndex < 9 ? '0' : ''}' - '${_currentNewsIndex + 1}', - style: TextStyle(color: Resource.Colors.red)), - TextSpan(text: ' / ${newsList.length}'), - ]), + style: TextStyle(color: Resource.Colors.grey, fontSize: 24.0), + children: [ + TextSpan( + text: + '${newsList.length >= 10 && _currentNewsIndex < 9 ? '0' : ''}' + '${_currentNewsIndex + 1}', + style: TextStyle(color: Resource.Colors.red)), + TextSpan(text: ' / ${newsList.length}'), + ], + ), ), ], ); @@ -169,121 +235,59 @@ class HomePageState extends State { } } - @override - Widget build(BuildContext context) { - app = AppLocalizations.of(context); - if (state == _State.offline) _setupBusNotify(context); - return WillPopScope( - child: Scaffold( - appBar: AppBar( - title: Text(app.appName), - backgroundColor: Resource.Colors.blue, - actions: [ - IconButton( - icon: Icon(AppIcon.info), - onPressed: _showInformationDialog, - ) - ], - ), - drawer: DrawerBody(userInfo: userInfo), - body: OrientationBuilder(builder: (_, orientation) { - return Container( - padding: EdgeInsets.symmetric( - vertical: orientation == Orientation.portrait ? 32.0 : 4.0), - child: Center( - child: _homebody(orientation), - ), - ); - }), - bottomNavigationBar: BottomNavigationBar( - fixedColor: Resource.Colors.bottomNavigationSelect, - unselectedItemColor: Resource.Colors.bottomNavigationSelect, - type: BottomNavigationBarType.fixed, - selectedFontSize: 12.0, - unselectedFontSize: 12.0, - selectedIconTheme: IconThemeData(size: 24.0), - currentIndex: _currentTabIndex, - onTap: onTabTapped, - items: [ - BottomNavigationBarItem( - icon: Icon(AppIcon.directionsBus), - title: Text(app.bus), - ), - BottomNavigationBarItem( - icon: Icon(AppIcon.classIcon), - title: Text(app.course), - ), - BottomNavigationBarItem( - icon: Icon(AppIcon.assignment), - title: Text(app.score), - ), - ], - ), - ), - onWillPop: () async { - if (Platform.isAndroid) _showLogoutDialog(); - return false; - }); - } - void onTabTapped(int index) async { bool bus = Preferences.getBool(Constants.PREF_BUS_ENABLE, true); - setState(() { - _currentTabIndex = index; - switch (_currentTabIndex) { - case 0: - if (bus) - Navigator.of(context).push(BusPageRoute()); - else - Utils.showToast(context, app.canNotUseFeature); - break; - case 1: - Navigator.of(context).push(CoursePageRoute()); - break; - case 2: - Navigator.of(context).push(ScorePageRoute()); - break; - } - }); + switch (_currentTabIndex) { + case 0: + if (bus) + Utils.pushCupertinoStyle(context, BusPage()); + else + Utils.showToast(context, app.canNotUseFeature); + break; + case 1: + Utils.pushCupertinoStyle(context, CoursePage()); + break; + case 2: + Utils.pushCupertinoStyle(context, ScorePage()); + break; + } } - _getAllNews() async { + _getNewsAll() async { if (Preferences.getBool(Constants.PREF_IS_OFFLINE_LOGIN, false)) { setState(() { state = _State.offline; }); - return; - } - state = _State.loading; - Helper.instance.getAllNews().then((newsList) { - this.newsList = newsList; - this.newsList.sort((a, b) { - return b.weight.compareTo(a.weight); - }); - setState(() { - state = newsList.length == 0 ? _State.empty : _State.finish; - }); - }).catchError((e) { - if (e is DioError) { - switch (e.type) { - case DioErrorType.RESPONSE: - Utils.handleResponseError(context, 'getAllNews', mounted, e); - break; - case DioErrorType.CANCEL: - break; - default: - state = _State.error; - Utils.handleDioError(context, e); - break; + } else + Helper.instance.getAllNews().then((newsList) { + this.newsList = newsList; + this.newsList.sort((a, b) { + return b.weight.compareTo(a.weight); + }); + setState(() { + state = newsList.length == 0 ? _State.empty : _State.finish; + }); + }).catchError((e) { + if (e is DioError) { + switch (e.type) { + case DioErrorType.RESPONSE: + Utils.handleResponseError(context, 'getAllNews', mounted, e); + break; + case DioErrorType.CANCEL: + break; + default: + state = _State.error; + Utils.handleDioError(context, e); + break; + } + } else { + throw e; } - } else { - throw e; - } - }); + }); } _setupBusNotify(BuildContext context) async { - if (Preferences.getBool(Constants.PREF_BUS_NOTIFY, false) ?? false) + if (Preferences.getBool(Constants.PREF_BUS_NOTIFY, false)) Helper.instance .getBusReservations() .then((BusReservationsData response) async { @@ -312,32 +316,31 @@ class HomePageState extends State { setState(() { state = _State.offline; }); - return; - } - Helper.instance.getUsersInfo().then((response) { - if (this.mounted) { - setState(() { - userInfo = response; - }); - FA.setUserProperty('department', userInfo.department); - FA.setUserProperty('student_id', userInfo.studentId); - FA.setUserId(userInfo.studentId); - FA.logUserInfo(userInfo.department); - //CacheUtils.saveUserInfo(userInfo); - } - }).catchError((e) { - if (e is DioError) { - switch (e.type) { - case DioErrorType.RESPONSE: - Utils.handleResponseError(context, 'getUserInfo', mounted, e); - break; - default: - break; + } else + Helper.instance.getUsersInfo().then((userInfo) { + if (this.mounted) { + setState(() { + this.userInfo = userInfo; + }); + FA.setUserProperty('department', userInfo.department); + FA.setUserProperty('student_id', userInfo.studentId); + FA.setUserId(userInfo.studentId); + FA.logUserInfo(userInfo.department); + CacheUtils.saveUserInfo(userInfo); } - } else { - throw e; - } - }); + }).catchError((e) { + if (e is DioError) { + switch (e.type) { + case DioErrorType.RESPONSE: + Utils.handleResponseError(context, 'getUserInfo', mounted, e); + break; + default: + break; + } + } else { + throw e; + } + }); } void _showLogoutDialog() { @@ -352,7 +355,9 @@ class HomePageState extends State { rightActionText: app.ok, rightActionFunction: () { Navigator.popUntil( - context, ModalRoute.withName(Navigator.defaultRouteName)); + context, + ModalRoute.withName(Navigator.defaultRouteName), + ); }, ), ); From ccd53608b67231d6ce379ae3f4dba793d212d141 Mon Sep 17 00:00:00 2001 From: RainVisitor Date: Mon, 12 Aug 2019 01:21:28 +0800 Subject: [PATCH 15/24] Code tune school_info_page --- lib/pages/home/info/notification_page.dart | 54 +++++----- lib/pages/home/info/phone_page.dart | 120 ++++++++++----------- lib/pages/home/info/schedule_page.dart | 49 ++++----- lib/pages/home/shcool_info_page.dart | 51 ++++----- 4 files changed, 125 insertions(+), 149 deletions(-) diff --git a/lib/pages/home/info/notification_page.dart b/lib/pages/home/info/notification_page.dart index c76124d0..f02857d6 100644 --- a/lib/pages/home/info/notification_page.dart +++ b/lib/pages/home/info/notification_page.dart @@ -9,17 +9,6 @@ import 'package:nkust_ap/widgets/hint_content.dart'; enum _State { loading, finish, loadingMore, error, empty, offline } -class NotificationPageRoute extends MaterialPageRoute { - NotificationPageRoute() - : super(builder: (BuildContext context) => NotificationPage()); - - @override - Widget buildPage(BuildContext context, Animation animation, - Animation secondaryAnimation) { - return FadeTransition(opacity: animation, child: NotificationPage()); - } -} - class NotificationPage extends StatefulWidget { static const String routerName = "/info/notification"; @@ -32,20 +21,31 @@ class NotificationPageState extends State @override bool get wantKeepAlive => true; + _State state = _State.loading; + + AppLocalizations app; + ScrollController controller; List notificationList = []; + int page = 1; - _State state = _State.loading; + TextStyle get _textStyle => TextStyle( + fontSize: 18.0, + fontWeight: FontWeight.bold, + ); - AppLocalizations app; + TextStyle get _textGreyStyle => TextStyle( + color: Resource.Colors.grey, + fontSize: 14.0, + ); @override void initState() { - super.initState(); FA.setCurrentScreen("NotificationPage", "notification_page.dart"); controller = ScrollController()..addListener(_scrollListener); _getNotifications(); + super.initState(); } @override @@ -54,14 +54,6 @@ class NotificationPageState extends State controller.removeListener(_scrollListener); } - _textGreyStyle() { - return TextStyle(color: Resource.Colors.grey, fontSize: 14.0); - } - - _textStyle() { - return TextStyle(fontSize: 18.0, fontWeight: FontWeight.bold); - } - Widget _notificationItem(NotificationModel notification) { return GestureDetector( onLongPress: () { @@ -88,8 +80,8 @@ class NotificationPageState extends State crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - notification.info.title ?? "", - style: _textStyle(), + notification.info.title ?? '', + style: _textStyle, textAlign: TextAlign.left, ), SizedBox(height: 8.0), @@ -97,15 +89,15 @@ class NotificationPageState extends State children: [ Expanded( child: Text( - notification.info.department ?? "", - style: _textGreyStyle(), + notification.info.department ?? '', + style: _textGreyStyle, textAlign: TextAlign.left, ), ), Expanded( child: Text( - notification.info.date ?? "", - style: _textGreyStyle(), + notification.info.date ?? '', + style: _textGreyStyle, textAlign: TextAlign.right, ), ), @@ -120,6 +112,7 @@ class NotificationPageState extends State @override Widget build(BuildContext context) { + super.build(context); app = AppLocalizations.of(context); return _body(); } @@ -149,13 +142,14 @@ class NotificationPageState extends State ); default: return RefreshIndicator( - onRefresh: () { + onRefresh: () async { setState(() { state = _State.loading; }); notificationList.clear(); - _getNotifications(); + await _getNotifications(); FA.logAction('refresh', 'swipe'); + return null; }, child: ListView.builder( controller: controller, diff --git a/lib/pages/home/info/phone_page.dart b/lib/pages/home/info/phone_page.dart index 0376b494..58d0ee17 100644 --- a/lib/pages/home/info/phone_page.dart +++ b/lib/pages/home/info/phone_page.dart @@ -7,16 +7,6 @@ import 'package:nkust_ap/widgets/hint_content.dart'; enum _State { loading, finish, error } -class PhonePageRoute extends MaterialPageRoute { - PhonePageRoute() : super(builder: (BuildContext context) => PhonePage()); - - @override - Widget buildPage(BuildContext context, Animation animation, - Animation secondaryAnimation) { - return FadeTransition(opacity: animation, child: PhonePage()); - } -} - class PhonePage extends StatefulWidget { static const String routerName = "/info/phone"; @@ -29,19 +19,33 @@ class PhonePageState extends State @override bool get wantKeepAlive => true; + _State state = _State.loading; + + AppLocalizations app; + List phoneModelList = []; - _State state = _State.loading; + TextStyle get _textStyle => TextStyle( + fontSize: 18.0, + fontWeight: FontWeight.bold, + ); - int page = 1; + TextStyle get _textBlueStyle => TextStyle( + color: Resource.Colors.blueText, + fontSize: 18.0, + fontWeight: FontWeight.bold, + ); - AppLocalizations app; + TextStyle get _textGreyStyle => TextStyle( + color: Resource.Colors.grey, + fontSize: 14.0, + ); @override void initState() { - super.initState(); FA.setCurrentScreen("PhonePage", "phone_page.dart"); _getPhones(); + super.initState(); } @override @@ -49,19 +53,45 @@ class PhonePageState extends State super.dispose(); } - _textBlueStyle() { - return TextStyle( - color: Resource.Colors.blueText, - fontSize: 18.0, - fontWeight: FontWeight.bold); - } - - _textGreyStyle() { - return TextStyle(color: Resource.Colors.grey, fontSize: 14.0); + @override + Widget build(BuildContext context) { + super.build(context); + app = AppLocalizations.of(context); + return _body(); } - _textStyle() { - return TextStyle(fontSize: 18.0, fontWeight: FontWeight.bold); + Widget _body() { + switch (state) { + case _State.loading: + return Center( + child: CircularProgressIndicator(), + ); + case _State.error: + return HintContent( + icon: AppIcon.assignment, + content: app.clickToRetry, + ); + default: + return ListView.builder( + itemCount: phoneModelList.length, + itemBuilder: (context, index) { + if (phoneModelList[index].number.isEmpty) { + return Padding( + padding: EdgeInsets.symmetric( + vertical: 8.0, + horizontal: 16.0, + ), + child: Text( + phoneModelList[index].name, + style: _textBlueStyle, + textAlign: TextAlign.left, + ), + ); + } else + return _phoneItem(phoneModelList[index]); + }, + ); + } } Widget _phoneItem(PhoneModel phone) { @@ -80,13 +110,13 @@ class PhonePageState extends State children: [ Text( phone.name ?? '', - style: _textStyle(), + style: _textStyle, textAlign: TextAlign.left, ), SizedBox(height: 8.0), Text( phone.number ?? '', - style: _textGreyStyle(), + style: _textGreyStyle, textAlign: TextAlign.left, ) ], @@ -104,42 +134,6 @@ class PhonePageState extends State ); } - @override - Widget build(BuildContext context) { - app = AppLocalizations.of(context); - return _body(); - } - - Widget _body() { - switch (state) { - case _State.loading: - return Container( - child: CircularProgressIndicator(), alignment: Alignment.center); - case _State.error: - return HintContent( - icon: AppIcon.assignment, - content: app.clickToRetry, - ); - default: - return ListView.builder( - itemCount: phoneModelList.length, - itemBuilder: (context, index) { - if (phoneModelList[index].number.isEmpty) { - return Padding( - padding: EdgeInsets.symmetric(vertical: 8.0, horizontal: 16.0), - child: Text( - phoneModelList[index].name, - style: _textBlueStyle(), - textAlign: TextAlign.left, - ), - ); - } else - return _phoneItem(phoneModelList[index]); - }, - ); - } - } - _getPhones() async { setState(() { state = _State.loading; diff --git a/lib/pages/home/info/schedule_page.dart b/lib/pages/home/info/schedule_page.dart index 9cb4dffe..ef4f60db 100644 --- a/lib/pages/home/info/schedule_page.dart +++ b/lib/pages/home/info/schedule_page.dart @@ -15,17 +15,6 @@ import 'package:sprintf/sprintf.dart'; enum _State { loading, finish, error, empty } -class SchedulePageRoute extends MaterialPageRoute { - SchedulePageRoute() - : super(builder: (BuildContext context) => new SchedulePage()); - - @override - Widget buildPage(BuildContext context, Animation animation, - Animation secondaryAnimation) { - return new FadeTransition(opacity: animation, child: new SchedulePage()); - } -} - class SchedulePage extends StatefulWidget { static const String routerName = "/info/schedule"; @@ -38,7 +27,7 @@ class SchedulePageState extends State @override bool get wantKeepAlive => true; - List scheduleWeights = []; + AppLocalizations app; List scheduleDataList = []; @@ -46,13 +35,21 @@ class SchedulePageState extends State int page = 1; - AppLocalizations app; + TextStyle get _textBlueStyle => TextStyle( + color: Resource.Colors.blueText, + fontSize: 18.0, + fontWeight: FontWeight.bold, + ); + + TextStyle get _textStyle => TextStyle( + fontSize: 16.0, + ); @override void initState() { - super.initState(); FA.setCurrentScreen("SchedulePage", "schedule_page.dart"); _getSchedules(); + super.initState(); } @override @@ -62,6 +59,7 @@ class SchedulePageState extends State @override Widget build(BuildContext context) { + super.build(context); app = AppLocalizations.of(context); return _body(); } @@ -82,7 +80,9 @@ class SchedulePageState extends State ); default: return CustomScrollView( - slivers: scheduleWeights, + slivers: [ + for (var value in scheduleDataList) ..._scheduleItem(value), + ], ); } } @@ -119,8 +119,6 @@ class SchedulePageState extends State } else { var jsonArray = jsonDecode(data); scheduleDataList = ScheduleData.toList(jsonArray); - scheduleWeights.clear(); - for (var i in scheduleDataList) scheduleWeights.addAll(_scheduleItem(i)); if (mounted) { setState(() { if (scheduleDataList.length == 0) @@ -133,17 +131,6 @@ class SchedulePageState extends State } } - _textBlueStyle() { - return TextStyle( - color: Resource.Colors.blueText, - fontSize: 18.0, - fontWeight: FontWeight.bold); - } - - _textStyle() { - return TextStyle(fontSize: 16.0); - } - List _scheduleItem(ScheduleData schedule) { List events = []; for (var i in schedule.events) { @@ -153,7 +140,7 @@ class SchedulePageState extends State padding: EdgeInsets.symmetric(horizontal: 12.0), child: Text( i, - style: _textStyle(), + style: _textStyle, textAlign: TextAlign.left, ), ), @@ -173,7 +160,7 @@ class SchedulePageState extends State padding: EdgeInsets.symmetric(horizontal: 12.0), child: Text( schedule.week ?? "", - style: _textBlueStyle(), + style: _textBlueStyle, textAlign: TextAlign.left, ), ), @@ -224,7 +211,7 @@ class SchedulePageState extends State alignment: Alignment.centerLeft, child: Text( schedule.events[index], - style: _textStyle(), + style: _textStyle, textAlign: TextAlign.left, ), ), diff --git a/lib/pages/home/shcool_info_page.dart b/lib/pages/home/shcool_info_page.dart index b0424f77..7ece7934 100644 --- a/lib/pages/home/shcool_info_page.dart +++ b/lib/pages/home/shcool_info_page.dart @@ -5,12 +5,12 @@ import 'package:nkust_ap/utils/global.dart'; class SchoolInfoPageRoute extends MaterialPageRoute { SchoolInfoPageRoute() - : super(builder: (BuildContext context) => new SchoolInfoPage()); + : super(builder: (BuildContext context) => SchoolInfoPage()); @override Widget buildPage(BuildContext context, Animation animation, Animation secondaryAnimation) { - return new FadeTransition(opacity: animation, child: new SchoolInfoPage()); + return FadeTransition(opacity: animation, child: SchoolInfoPage()); } } @@ -18,49 +18,57 @@ class SchoolInfoPage extends StatefulWidget { static const String routerName = "/ShcoolInfo"; @override - SchoolInfoPageState createState() => new SchoolInfoPageState(); + SchoolInfoPageState createState() => SchoolInfoPageState(); } class SchoolInfoPageState extends State with SingleTickerProviderStateMixin { - int _currentIndex = 0; - TabController controller; final List _children = [ - new NotificationPage(), - new PhonePage(), - new SchedulePage() + NotificationPage(), + PhonePage(), + SchedulePage() ]; AppLocalizations app; + TabController controller; + + int _currentIndex = 0; + @override void initState() { - super.initState(); FA.setCurrentScreen("SchoolInfoPage", "school_info_page.dart"); controller = TabController(length: 3, vsync: this); + super.initState(); } @override void dispose() { - super.dispose(); controller.dispose(); + super.dispose(); } @override Widget build(BuildContext context) { app = AppLocalizations.of(context); - return new Scaffold( - appBar: new AppBar( - title: new Text(app.schoolInfo), + return Scaffold( + appBar: AppBar( + title: Text(app.schoolInfo), backgroundColor: Resource.Colors.blue, ), body: TabBarView( - children: _children, - controller: controller, - physics: new NeverScrollableScrollPhysics()), - bottomNavigationBar: new BottomNavigationBar( + children: _children, + controller: controller, + physics: NeverScrollableScrollPhysics(), + ), + bottomNavigationBar: BottomNavigationBar( currentIndex: _currentIndex, - onTap: onTabTapped, + onTap: (index) { + setState(() { + _currentIndex = index; + controller.animateTo(_currentIndex); + }); + }, fixedColor: Resource.Colors.yellow, items: [ BottomNavigationBarItem( @@ -79,11 +87,4 @@ class SchoolInfoPageState extends State ), ); } - - void onTabTapped(int index) { - setState(() { - _currentIndex = index; - controller.animateTo(_currentIndex); - }); - } } From bc9ef02d74f9e4d9b348a4b8bb9fe0cc42be27fd Mon Sep 17 00:00:00 2001 From: RainVisitor Date: Mon, 12 Aug 2019 01:49:26 +0800 Subject: [PATCH 16/24] Upgrade flutter official plugin to latest Fix: home_page bottom navigation open error Update : gradle to 3.4.0 google-services to 4.3.0 --- android/build.gradle | 4 ++-- .../gradle/wrapper/gradle-wrapper.properties | 2 +- lib/pages/home_page.dart | 4 +--- pubspec.yaml | 19 +++++++++---------- 4 files changed, 13 insertions(+), 16 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index 4080d4f4..27077342 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -8,9 +8,9 @@ buildscript { dependencies { classpath 'io.fabric.tools:gradle:1.+' - classpath 'com.android.tools.build:gradle:3.3.1' + classpath 'com.android.tools.build:gradle:3.4.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - classpath 'com.google.gms:google-services:3.2.1' // Google Services plugin + classpath 'com.google.gms:google-services:4.3.0' // Google Services plugin } } diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 2819f022..9b6616cb 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip diff --git a/lib/pages/home_page.dart b/lib/pages/home_page.dart index 577b018e..e5328123 100644 --- a/lib/pages/home_page.dart +++ b/lib/pages/home_page.dart @@ -43,7 +43,6 @@ class HomePageState extends State { AppLocalizations app; UserInfo userInfo = UserInfo(); - int _currentTabIndex = 0; int _currentNewsIndex = 0; List newsList = []; @@ -97,7 +96,6 @@ class HomePageState extends State { selectedFontSize: 12.0, unselectedFontSize: 12.0, selectedIconTheme: IconThemeData(size: 24.0), - currentIndex: _currentTabIndex, onTap: onTabTapped, items: [ BottomNavigationBarItem( @@ -237,7 +235,7 @@ class HomePageState extends State { void onTabTapped(int index) async { bool bus = Preferences.getBool(Constants.PREF_BUS_ENABLE, true); - switch (_currentTabIndex) { + switch (index) { case 0: if (bus) Utils.pushCupertinoStyle(context, BusPage()); diff --git a/pubspec.yaml b/pubspec.yaml index 3030ad37..cb12cb87 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -12,17 +12,16 @@ dependencies: flutter_localizations: sdk: flutter flutter_cupertino_localizations: ^1.0.1 - cupertino_icons: ^0.1.2 #official plugin - shared_preferences: ^0.5.3+1 - package_info: ^0.4.0+4 - url_launcher: ^5.0.3 - share: ^0.6.1+1 - connectivity: ^0.4.2 - firebase_core: ^0.4.0+3 - firebase_analytics: ^3.0.2 - firebase_remote_config: ^0.2.0+2 - firebase_messaging: ^5.0.2 + shared_preferences: ^0.5.3+4 + package_info: ^0.4.0+6 + url_launcher: ^5.1.2 + share: ^0.6.2+1 + connectivity: ^0.4.3+7 + firebase_core: ^0.4.0+8 + firebase_analytics: ^5.0.0 + firebase_remote_config: ^0.2.0+5 + firebase_messaging: ^5.1.3 http: ^0.12.0+2 html: ^0.14.0+2 #third party plugin From eb8253408edd2ade94247485723b500d145b1b34 Mon Sep 17 00:00:00 2001 From: RainVisitor Date: Tue, 13 Aug 2019 23:42:18 +0800 Subject: [PATCH 17/24] Fix score page error when detail is null Disable crashlytics when debug mode --- lib/main.dart | 44 ++++++++++++++++++++++---------------- lib/models/score_data.dart | 2 +- 2 files changed, 27 insertions(+), 19 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index db8c66bc..4fad63a9 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -29,31 +29,39 @@ void main() async { AppTheme.code = Preferences.getString(Constants.PREF_THEME_CODE, AppTheme.LIGHT); if (Platform.isIOS || Platform.isAndroid) { - FlutterError.onError = (FlutterErrorDetails details) { - if (isInDebugMode) { - // In development mode simply print to console. - FlutterError.dumpErrorToConsole(details); - } else { - // In production mode report to the application zone to report to - // Crashlytics. - Zone.current.handleUncaughtError(details.exception, details.stack); - } - }; + if (!Constants.isInDebugMode) { + FlutterError.onError = (FlutterErrorDetails details) { + if (isInDebugMode) { + // In development mode simply print to console. + FlutterError.dumpErrorToConsole(details); + } else { + // In production mode report to the application zone to report to + // Crashlytics. + Zone.current.handleUncaughtError(details.exception, details.stack); + } + }; - await FlutterCrashlytics().initialize(); + await FlutterCrashlytics().initialize(); - runZoned>(() async { + runZoned>(() async { + runApp( + MyApp( + themeData: AppTheme.data, + ), + ); + }, onError: (error, stackTrace) async { + // Whenever an error occurs, call the `reportCrash` function. This will send + // Dart errors to our dev console or Crashlytics depending on the environment. + await FlutterCrashlytics() + .reportCrash(error, stackTrace, forceCrash: false); + }); + } else { runApp( MyApp( themeData: AppTheme.data, ), ); - }, onError: (error, stackTrace) async { - // Whenever an error occurs, call the `reportCrash` function. This will send - // Dart errors to our dev console or Crashlytics depending on the environment. - await FlutterCrashlytics() - .reportCrash(error, stackTrace, forceCrash: false); - }); + } } else { // See https://github.com/flutter/flutter/wiki/Desktop-shells#target-platform-override debugDefaultTargetPlatformOverride = TargetPlatform.fuchsia; diff --git a/lib/models/score_data.dart b/lib/models/score_data.dart index 1c1d71ef..461110be 100644 --- a/lib/models/score_data.dart +++ b/lib/models/score_data.dart @@ -36,7 +36,7 @@ class Content { static Content fromJson(Map json) { return Content( scores: Score.toList(json['scores']), - detail: Detail.fromJson(json['detail']), + detail: json['detail'] == null ? null : Detail.fromJson(json['detail']), ); } From d6d4b97f618f5faecd026223d171fe2c34cad46c Mon Sep 17 00:00:00 2001 From: RainVisitor Date: Wed, 14 Aug 2019 00:31:24 +0800 Subject: [PATCH 18/24] Update all page route to cupertino page route Improve login page button padding and revert search student id --- lib/pages/home/bus_page.dart | 2 +- lib/pages/login_page.dart | 49 +++++++++++++++++++----------------- lib/widgets/drawer_body.dart | 38 +++++++++++++++------------- 3 files changed, 47 insertions(+), 42 deletions(-) diff --git a/lib/pages/home/bus_page.dart b/lib/pages/home/bus_page.dart index 0bf9724f..8d0151c0 100644 --- a/lib/pages/home/bus_page.dart +++ b/lib/pages/home/bus_page.dart @@ -72,7 +72,7 @@ class BusPageState extends State with SingleTickerProviderStateMixin { color: Colors.white, ), onPressed: () { - Navigator.of(context).push(BusRulePageRoute()); + Utils.pushCupertinoStyle(context, BusRulePage()); }) ], ), diff --git a/lib/pages/login_page.dart b/lib/pages/login_page.dart index dcf57deb..249b40f6 100644 --- a/lib/pages/login_page.dart +++ b/lib/pages/login_page.dart @@ -2,6 +2,7 @@ import 'package:dio/dio.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:nkust_ap/models/api/login_response.dart'; +import 'package:nkust_ap/pages/search_student_id_page.dart'; import 'package:nkust_ap/res/assets.dart'; import 'package:nkust_ap/res/colors.dart' as Resource; import 'package:nkust_ap/utils/global.dart'; @@ -65,7 +66,7 @@ class LoginPageState extends State child: orientation == Orientation.portrait ? Column( crossAxisAlignment: CrossAxisAlignment.stretch, - mainAxisAlignment: MainAxisAlignment.spaceAround, + mainAxisAlignment: MainAxisAlignment.center, mainAxisSize: MainAxisSize.min, children: _renderContent(orientation), ) @@ -207,6 +208,7 @@ class LoginPageState extends State ), Center( child: FlatButton( + padding: EdgeInsets.all(0.0), onPressed: () { _offlineLogin(); }, @@ -216,28 +218,29 @@ class LoginPageState extends State ), ), ), -// Center( -// child: FlatButton( -// onPressed: () async { -// var username = await Navigator.push( -// context, -// CupertinoPageRoute( -// builder: (_) => SearchStudentIdPage(), -// ), -// ); -// if (username != null && username is String) { -// setState(() { -// _username.text = username; -// }); -// Utils.showToast(context, app.firstLoginHint); -// } -// }, -// child: Text( -// app.searchUsername, -// style: TextStyle(color: Colors.white, fontSize: 16.0), -// ), -// ), -// ), + Center( + child: FlatButton( + padding: EdgeInsets.all(0.0), + onPressed: () async { + var username = await Navigator.push( + context, + CupertinoPageRoute( + builder: (_) => SearchStudentIdPage(), + ), + ); + if (username != null && username is String) { + setState(() { + _username.text = username; + }); + Utils.showToast(context, app.firstLoginHint); + } + }, + child: Text( + app.searchUsername, + style: TextStyle(color: Colors.white, fontSize: 16.0), + ), + ), + ), ]; if (orientation == Orientation.portrait) { section.addAll(sectionInput); diff --git a/lib/widgets/drawer_body.dart b/lib/widgets/drawer_body.dart index 170fcfd2..d543e154 100644 --- a/lib/widgets/drawer_body.dart +++ b/lib/widgets/drawer_body.dart @@ -64,8 +64,10 @@ class DrawerBodyState extends State { ? 200 : widget.userInfo.status) == 200) - Navigator.of(context) - .push(UserInfoPageRoute(widget.userInfo)); + Utils.pushCupertinoStyle( + context, + UserInfoPage(userInfo: widget.userInfo), + ); else Utils.showToast(context, widget.userInfo.message); }, @@ -150,17 +152,17 @@ class DrawerBodyState extends State { _subItem( icon: AppIcon.classIcon, title: app.course, - route: CoursePageRoute(), + page: CoursePage(), ), _subItem( icon: AppIcon.assignment, title: app.score, - route: ScorePageRoute(), + page: ScorePage(), ), _subItem( icon: AppIcon.apps, title: app.calculateUnits, - route: CalculateUnitsPageRoute(), + page: CalculateUnitsPage(), ), ], ), @@ -181,12 +183,12 @@ class DrawerBodyState extends State { _subItem( icon: AppIcon.edit, title: app.leaveApply, - route: LeavePageRoute(initIndex: 0), + page: LeavePage(initIndex: 0), ), _subItem( icon: AppIcon.assignment, title: app.leaveRecords, - route: LeavePageRoute(initIndex: 1), + page: LeavePage(initIndex: 1), ), ], ), @@ -207,29 +209,29 @@ class DrawerBodyState extends State { _subItem( icon: AppIcon.dateRange, title: app.busReserve, - route: BusPageRoute(initIndex: 0), + page: BusPage(initIndex: 0), ), _subItem( icon: AppIcon.assignment, title: app.busReservations, - route: BusPageRoute(initIndex: 1), + page: BusPage(initIndex: 1), ), ], ), _item( icon: AppIcon.info, title: app.schoolInfo, - route: SchoolInfoPageRoute(), + page: SchoolInfoPage(), ), _item( icon: AppIcon.face, title: app.about, - route: AboutUsPageRoute(), + page: AboutUsPage(), ), _item( icon: AppIcon.settings, title: app.settings, - route: SettingPageRoute(), + page: SettingPage(), ), ListTile( leading: Icon( @@ -251,21 +253,21 @@ class DrawerBodyState extends State { _item({ @required IconData icon, @required String title, - @required MaterialPageRoute route, + @required Widget page, }) => ListTile( leading: Icon(icon, color: Resource.Colors.grey), title: Text(title, style: _defaultStyle), onTap: () { Navigator.pop(context); - Navigator.push(context, route); + Utils.pushCupertinoStyle(context, page); }, ); _subItem({ @required IconData icon, @required String title, - @required MaterialPageRoute route, + @required Widget page, }) => ListTile( contentPadding: EdgeInsets.symmetric(horizontal: 72.0), @@ -273,13 +275,13 @@ class DrawerBodyState extends State { title: Text(title, style: _defaultStyle), onTap: () async { if (Platform.isAndroid || Platform.isIOS) { - if (route is BusPageRoute) { + if (page is BusPage) { bool bus = Preferences.getBool(Constants.PREF_BUS_ENABLE, true); if (!bus) { Utils.showToast(context, app.canNotUseFeature); return; } - } else if (route is LeavePageRoute) { + } else if (page is LeavePage) { bool leave = Preferences.getBool(Constants.PREF_BUS_ENABLE, true); if (!leave) { Utils.showToast(context, app.canNotUseFeature); @@ -288,7 +290,7 @@ class DrawerBodyState extends State { } } Navigator.of(context).pop(); - Navigator.of(context).push(route); + Utils.pushCupertinoStyle(context, page); }, ); From a58d121e442151aeab60b5dec3d593db336b68fa Mon Sep 17 00:00:00 2001 From: RainVisitor Date: Wed, 14 Aug 2019 00:36:26 +0800 Subject: [PATCH 19/24] Remove all page custom route class --- lib/pages/home/about/about_us_page.dart | 11 ----------- lib/pages/home/about/open_source_page.dart | 11 ----------- lib/pages/home/bus/bus_reservations_page.dart | 12 ------------ lib/pages/home/bus/bus_reserve_page.dart | 11 ----------- lib/pages/home/bus/bus_rule_page.dart | 11 ----------- lib/pages/home/bus_page.dart | 16 ---------------- lib/pages/home/calculate_units_page.dart | 12 ------------ lib/pages/home/course_page.dart | 10 ---------- lib/pages/home/leave_page.dart | 16 ---------------- lib/pages/home/leaves/leave_apply_page.dart | 11 ----------- lib/pages/home/leaves/leave_record_page.dart | 11 ----------- lib/pages/home/score_page.dart | 10 ---------- lib/pages/home/setting_page.dart | 16 ---------------- lib/pages/home/shcool_info_page.dart | 11 ----------- lib/pages/home/user_info_page.dart | 16 ---------------- lib/pages/home_page.dart | 16 ---------------- 16 files changed, 201 deletions(-) diff --git a/lib/pages/home/about/about_us_page.dart b/lib/pages/home/about/about_us_page.dart index 0aea92db..c3e6f19a 100644 --- a/lib/pages/home/about/about_us_page.dart +++ b/lib/pages/home/about/about_us_page.dart @@ -6,17 +6,6 @@ import 'package:nkust_ap/res/assets.dart'; import 'package:nkust_ap/res/resource.dart' as Resource; import 'package:nkust_ap/utils/global.dart'; -class AboutUsPageRoute extends MaterialPageRoute { - AboutUsPageRoute() - : super(builder: (BuildContext context) => new AboutUsPage()); - - @override - Widget buildPage(BuildContext context, Animation animation, - Animation secondaryAnimation) { - return new FadeTransition(opacity: animation, child: new AboutUsPage()); - } -} - class AboutUsPage extends StatefulWidget { static const String routerName = "/aboutUs"; diff --git a/lib/pages/home/about/open_source_page.dart b/lib/pages/home/about/open_source_page.dart index 645663cc..e35f2f0a 100644 --- a/lib/pages/home/about/open_source_page.dart +++ b/lib/pages/home/about/open_source_page.dart @@ -2,17 +2,6 @@ import 'package:flutter/material.dart'; import 'package:nkust_ap/res/resource.dart' as Resource; import 'package:nkust_ap/utils/global.dart'; -class OpenSourcePageRoute extends MaterialPageRoute { - OpenSourcePageRoute() - : super(builder: (BuildContext context) => new OpenSourcePage()); - - @override - Widget buildPage(BuildContext context, Animation animation, - Animation secondaryAnimation) { - return new FadeTransition(opacity: animation, child: new OpenSourcePage()); - } -} - class OpenSourcePage extends StatefulWidget { static const String routerName = "/openSource"; diff --git a/lib/pages/home/bus/bus_reservations_page.dart b/lib/pages/home/bus/bus_reservations_page.dart index f1326d6f..11ebd9ab 100644 --- a/lib/pages/home/bus/bus_reservations_page.dart +++ b/lib/pages/home/bus/bus_reservations_page.dart @@ -13,18 +13,6 @@ import 'package:nkust_ap/widgets/yes_no_dialog.dart'; enum _State { loading, finish, error, empty, offlineEmpty } -class BusReservationsPageRoute extends MaterialPageRoute { - BusReservationsPageRoute() - : super(builder: (BuildContext context) => new BusReservationsPage()); - - @override - Widget buildPage(BuildContext context, Animation animation, - Animation secondaryAnimation) { - return new FadeTransition( - opacity: animation, child: new BusReservationsPage()); - } -} - class BusReservationsPage extends StatefulWidget { static const String routerName = "/bus/reservations"; diff --git a/lib/pages/home/bus/bus_reserve_page.dart b/lib/pages/home/bus/bus_reserve_page.dart index c638deaa..461e92f3 100644 --- a/lib/pages/home/bus/bus_reserve_page.dart +++ b/lib/pages/home/bus/bus_reserve_page.dart @@ -15,17 +15,6 @@ import 'package:nkust_ap/widgets/yes_no_dialog.dart'; enum _State { loading, finish, error, empty, offline } enum Station { janGong, yanchao } -class BusReservePageRoute extends MaterialPageRoute { - BusReservePageRoute() - : super(builder: (BuildContext context) => BusReservePage()); - - @override - Widget buildPage(BuildContext context, Animation animation, - Animation secondaryAnimation) { - return FadeTransition(opacity: animation, child: BusReservePage()); - } -} - class BusReservePage extends StatefulWidget { static const String routerName = "/bus/reserve"; diff --git a/lib/pages/home/bus/bus_rule_page.dart b/lib/pages/home/bus/bus_rule_page.dart index 44b6c2b6..fe71e41a 100644 --- a/lib/pages/home/bus/bus_rule_page.dart +++ b/lib/pages/home/bus/bus_rule_page.dart @@ -3,17 +3,6 @@ import 'package:flutter/material.dart'; import 'package:nkust_ap/res/resource.dart' as Resource; import 'package:nkust_ap/utils/global.dart'; -class BusRulePageRoute extends MaterialPageRoute { - BusRulePageRoute() - : super(builder: (BuildContext context) => new BusRulePage()); - - @override - Widget buildPage(BuildContext context, Animation animation, - Animation secondaryAnimation) { - return new FadeTransition(opacity: animation, child: new BusRulePage()); - } -} - class BusRulePage extends StatefulWidget { static const String routerName = "/bus/rule"; diff --git a/lib/pages/home/bus_page.dart b/lib/pages/home/bus_page.dart index 8d0151c0..3d330fae 100644 --- a/lib/pages/home/bus_page.dart +++ b/lib/pages/home/bus_page.dart @@ -4,22 +4,6 @@ import 'package:nkust_ap/res/app_icon.dart'; import 'package:nkust_ap/res/resource.dart' as Resource; import 'package:nkust_ap/utils/global.dart'; -class BusPageRoute extends MaterialPageRoute { - BusPageRoute({this.initIndex = 0}) - : super( - builder: (BuildContext context) => - new BusPage(initIndex: initIndex)); - - final int initIndex; - - @override - Widget buildPage(BuildContext context, Animation animation, - Animation secondaryAnimation) { - return new FadeTransition( - opacity: animation, child: new BusPage(initIndex: initIndex)); - } -} - class BusPage extends StatefulWidget { static const String routerName = "/bus"; final List _children = [ diff --git a/lib/pages/home/calculate_units_page.dart b/lib/pages/home/calculate_units_page.dart index 21a3aef4..43cd5f30 100644 --- a/lib/pages/home/calculate_units_page.dart +++ b/lib/pages/home/calculate_units_page.dart @@ -9,18 +9,6 @@ import 'package:shared_preferences/shared_preferences.dart'; enum _State { ready, loading, finish, error, empty, offline } -class CalculateUnitsPageRoute extends MaterialPageRoute { - CalculateUnitsPageRoute() - : super(builder: (BuildContext context) => new CalculateUnitsPage()); - - @override - Widget buildPage(BuildContext context, Animation animation, - Animation secondaryAnimation) { - return new FadeTransition( - opacity: animation, child: new CalculateUnitsPage()); - } -} - class CalculateUnitsPage extends StatefulWidget { static const String routerName = "/calculateUnits"; diff --git a/lib/pages/home/course_page.dart b/lib/pages/home/course_page.dart index b41570e3..4549e5a8 100644 --- a/lib/pages/home/course_page.dart +++ b/lib/pages/home/course_page.dart @@ -12,16 +12,6 @@ import 'package:nkust_ap/widgets/semester_picker.dart'; enum _State { loading, finish, error, empty, offlineEmpty } -class CoursePageRoute extends MaterialPageRoute { - CoursePageRoute() : super(builder: (BuildContext context) => CoursePage()); - - @override - Widget buildPage(BuildContext context, Animation animation, - Animation secondaryAnimation) { - return FadeTransition(opacity: animation, child: CoursePage()); - } -} - class CoursePage extends StatefulWidget { static const String routerName = '/course'; diff --git a/lib/pages/home/leave_page.dart b/lib/pages/home/leave_page.dart index 81b545a9..8257dba2 100644 --- a/lib/pages/home/leave_page.dart +++ b/lib/pages/home/leave_page.dart @@ -5,22 +5,6 @@ import 'package:nkust_ap/res/app_icon.dart'; import 'package:nkust_ap/res/resource.dart' as Resource; import 'package:nkust_ap/utils/global.dart'; -class LeavePageRoute extends MaterialPageRoute { - LeavePageRoute({this.initIndex = 0}) - : super( - builder: (BuildContext context) => - new LeavePage(initIndex: initIndex)); - - final int initIndex; - - @override - Widget buildPage(BuildContext context, Animation animation, - Animation secondaryAnimation) { - return new FadeTransition( - opacity: animation, child: new LeavePage(initIndex: initIndex)); - } -} - class LeavePage extends StatefulWidget { static const String routerName = "/leave"; final List _children = [ diff --git a/lib/pages/home/leaves/leave_apply_page.dart b/lib/pages/home/leaves/leave_apply_page.dart index 81c896fb..0abee2ac 100644 --- a/lib/pages/home/leaves/leave_apply_page.dart +++ b/lib/pages/home/leaves/leave_apply_page.dart @@ -9,17 +9,6 @@ import 'package:nkust_ap/widgets/hint_content.dart'; enum _State { loading, finish, error, empty } enum Leave { normal, sick, official, funeral, maternity } -class LeaveApplyPageRoute extends MaterialPageRoute { - LeaveApplyPageRoute() - : super(builder: (BuildContext context) => new LeaveApplyPage()); - - @override - Widget buildPage(BuildContext context, Animation animation, - Animation secondaryAnimation) { - return new FadeTransition(opacity: animation, child: new LeaveApplyPage()); - } -} - class LeaveApplyPage extends StatefulWidget { static const String routerName = "/leave/apply"; diff --git a/lib/pages/home/leaves/leave_record_page.dart b/lib/pages/home/leaves/leave_record_page.dart index 9c419549..79df7240 100644 --- a/lib/pages/home/leaves/leave_record_page.dart +++ b/lib/pages/home/leaves/leave_record_page.dart @@ -13,17 +13,6 @@ import 'package:nkust_ap/widgets/semester_picker.dart'; enum _State { loading, finish, error, empty, offlineEmpty } -class LeaveRecordPageRoute extends MaterialPageRoute { - LeaveRecordPageRoute() - : super(builder: (BuildContext context) => LeaveRecordPage()); - - @override - Widget buildPage(BuildContext context, Animation animation, - Animation secondaryAnimation) { - return FadeTransition(opacity: animation, child: LeaveRecordPage()); - } -} - class LeaveRecordPage extends StatefulWidget { static const String routerName = '/leave/record'; diff --git a/lib/pages/home/score_page.dart b/lib/pages/home/score_page.dart index 85ba9d82..a1d79c35 100644 --- a/lib/pages/home/score_page.dart +++ b/lib/pages/home/score_page.dart @@ -11,16 +11,6 @@ import 'package:nkust_ap/widgets/semester_picker.dart'; enum _State { loading, finish, error, empty, offlineEmpty } -class ScorePageRoute extends MaterialPageRoute { - ScorePageRoute() : super(builder: (BuildContext context) => ScorePage()); - - @override - Widget buildPage(BuildContext context, Animation animation, - Animation secondaryAnimation) { - return FadeTransition(opacity: animation, child: ScorePage()); - } -} - class ScorePage extends StatefulWidget { static const String routerName = '/score'; diff --git a/lib/pages/home/setting_page.dart b/lib/pages/home/setting_page.dart index e0923829..5a014ad9 100644 --- a/lib/pages/home/setting_page.dart +++ b/lib/pages/home/setting_page.dart @@ -18,22 +18,6 @@ import 'package:nkust_ap/widgets/progress_dialog.dart'; import 'package:nkust_ap/widgets/share_data_widget.dart'; import 'package:package_info/package_info.dart'; -class SettingPageRoute extends MaterialPageRoute { - SettingPageRoute() - : super( - builder: (BuildContext context) => SettingPage(), - ); - - @override - Widget buildPage(BuildContext context, Animation animation, - Animation secondaryAnimation) { - return FadeTransition( - opacity: animation, - child: SettingPage(), - ); - } -} - class SettingPage extends StatefulWidget { static const String routerName = "/setting"; diff --git a/lib/pages/home/shcool_info_page.dart b/lib/pages/home/shcool_info_page.dart index 7ece7934..4f813e89 100644 --- a/lib/pages/home/shcool_info_page.dart +++ b/lib/pages/home/shcool_info_page.dart @@ -3,17 +3,6 @@ import 'package:nkust_ap/res/app_icon.dart'; import 'package:nkust_ap/res/resource.dart' as Resource; import 'package:nkust_ap/utils/global.dart'; -class SchoolInfoPageRoute extends MaterialPageRoute { - SchoolInfoPageRoute() - : super(builder: (BuildContext context) => SchoolInfoPage()); - - @override - Widget buildPage(BuildContext context, Animation animation, - Animation secondaryAnimation) { - return FadeTransition(opacity: animation, child: SchoolInfoPage()); - } -} - class SchoolInfoPage extends StatefulWidget { static const String routerName = "/ShcoolInfo"; diff --git a/lib/pages/home/user_info_page.dart b/lib/pages/home/user_info_page.dart index 1e5c1c06..1ae0f16a 100644 --- a/lib/pages/home/user_info_page.dart +++ b/lib/pages/home/user_info_page.dart @@ -10,22 +10,6 @@ import 'package:nkust_ap/widgets/drawer_body.dart'; enum _Status { loading, finish, error, empty } -class UserInfoPageRoute extends MaterialPageRoute { - final UserInfo userInfo; - - UserInfoPageRoute(this.userInfo) - : super( - builder: (BuildContext context) => - new UserInfoPage(userInfo: userInfo)); - - @override - Widget buildPage(BuildContext context, Animation animation, - Animation secondaryAnimation) { - return new FadeTransition( - opacity: animation, child: new UserInfoPage(userInfo: userInfo)); - } -} - class UserInfoPage extends StatefulWidget { static const String routerName = "/widget.userInfo"; final UserInfo userInfo; diff --git a/lib/pages/home_page.dart b/lib/pages/home_page.dart index e5328123..be81f6d2 100644 --- a/lib/pages/home_page.dart +++ b/lib/pages/home_page.dart @@ -15,22 +15,6 @@ import 'package:nkust_ap/widgets/yes_no_dialog.dart'; enum _State { loading, finish, error, empty, offline } -class HomePageRoute extends MaterialPageRoute { - HomePageRoute() - : super( - builder: (BuildContext context) => HomePage(), - ); - - @override - Widget buildPage(BuildContext context, Animation animation, - Animation secondaryAnimation) { - return FadeTransition( - opacity: animation, - child: HomePage(), - ); - } -} - class HomePage extends StatefulWidget { static const String routerName = "/home"; From 89d884ee3b78e66e7efa85e4c915e9f95208d4a5 Mon Sep 17 00:00:00 2001 From: RainVisitor Date: Wed, 14 Aug 2019 00:42:58 +0800 Subject: [PATCH 20/24] Code tune about_us_page and open_source_page --- lib/pages/home/about/about_us_page.dart | 11 +- lib/pages/home/about/open_source_page.dart | 686 +++++++++++---------- 2 files changed, 353 insertions(+), 344 deletions(-) diff --git a/lib/pages/home/about/about_us_page.dart b/lib/pages/home/about/about_us_page.dart index c3e6f19a..03d2b975 100644 --- a/lib/pages/home/about/about_us_page.dart +++ b/lib/pages/home/about/about_us_page.dart @@ -10,17 +10,16 @@ class AboutUsPage extends StatefulWidget { static const String routerName = "/aboutUs"; @override - AboutUsPageState createState() => new AboutUsPageState(); + AboutUsPageState createState() => AboutUsPageState(); } -class AboutUsPageState extends State - with SingleTickerProviderStateMixin { +class AboutUsPageState extends State { AppLocalizations app; @override void initState() { - super.initState(); FA.setCurrentScreen("AboutUsPage", "about_us_page.dart"); + super.initState(); } @override @@ -32,7 +31,7 @@ class AboutUsPageState extends State Widget build(BuildContext context) { app = AppLocalizations.of(context); var expandedHeight = MediaQuery.of(context).size.height * 0.25; - return new Scaffold( + return Scaffold( body: NestedScrollView( headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) { return [ @@ -40,7 +39,7 @@ class AboutUsPageState extends State expandedHeight: expandedHeight, floating: false, pinned: true, - title: new Text(app.about), + title: Text(app.about), actions: [ IconButton( icon: Icon(AppIcon.codeIcon), diff --git a/lib/pages/home/about/open_source_page.dart b/lib/pages/home/about/open_source_page.dart index e35f2f0a..327f5793 100644 --- a/lib/pages/home/about/open_source_page.dart +++ b/lib/pages/home/about/open_source_page.dart @@ -6,17 +6,319 @@ class OpenSourcePage extends StatefulWidget { static const String routerName = "/openSource"; @override - OpenSourcePageState createState() => new OpenSourcePageState(); + OpenSourcePageState createState() => OpenSourcePageState(); } -class OpenSourcePageState extends State - with SingleTickerProviderStateMixin { +class OpenSourcePageState extends State { + final List<_Item> items = [ + _Item( + "KUAS-AP-Material", + "The MIT License (MIT)\n" + + "\n" + + "Copyright (c) 2015 HearSilent\n" + + "\n" + + "Permission is hereby granted, free of charge, to any person obtaining a copy\n" + + "of this software and associated documentation files (the \"Software\"), to deal\n" + + "in the Software without restriction, including without limitation the rights\n" + + "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n" + + "copies of the Software, and to permit persons to whom the Software is\n" + + "furnished to do so, subject to the following conditions:\n" + + "\n" + + "The above copyright notice and this permission notice shall be included in all\n" + + "copies or substantial portions of the Software.\n" + + "\n" + + "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n" + + "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n" + + "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n" + + "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n" + + "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n" + + "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n" + + "SOFTWARE.\n"), + _Item( + "flutter", + "Copyright 2014 The Chromium Authors. All rights reserved.\n\n" + "Redistribution and use in source and binary forms, with or without" + "modification, are permitted provided that the following conditions are" + "met:\n" + "* Redistributions of source code must retain the above copyright" + " notice, this list of conditions and the following disclaimer.\n" + "* Redistributions in binary form must reproduce the above" + " copyright notice, this list of conditions and the following" + " disclaimer in the documentation and/or other materials provided" + " with the distribution.\n" + "* Neither the name of Google Inc. nor the names of its" + " contributors may be used to endorse or promote products derived" + " from this software without specific prior written permission.\n\n" + "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS" + "\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT" + "LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR" + "A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT" + "OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL," + "SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT" + "LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE," + "DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY" + "THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT" + "(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE" + "OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."), + _Item( + "flutter plugin", + " Copyright 2017 The Chromium Authors. All rights reserved.\n\n" + " Redistribution and use in source and binary forms, with or without" + " modification, are permitted provided that the following conditions are" + " met:\n\n" + " * Redistributions of source code must retain the above copyright" + " notice, this list of conditions and the following disclaimer.\n" + " * Redistributions in binary form must reproduce the above" + " copyright notice, this list of conditions and the following disclaimer" + " in the documentation and/or other materials provided with the" + " distribution.\n" + " * Neither the name of Google Inc. nor the names of its" + " contributors may be used to endorse or promote products derived from" + " this software without specific prior written permission.\n\n" + " THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS" + " \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT" + " LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR" + " A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT" + " OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL," + " SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT" + " LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE," + " DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY" + " THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT" + " (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE" + " OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."), + _Item( + "dio", + "MIT License\n\n" + "Copyright (c) 2018 wendux\n\n" + "Permission is hereby granted, free of charge, to any person obtaining a copy" + "of this software and associated documentation files (the \"Software\"), to deal" + "in the Software without restriction, including without limitation the rights" + "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell" + "copies of the Software, and to permit persons to whom the Software is" + "furnished to do so, subject to the following conditions:\n\n" + "The above copyright notice and this permission notice shall be included in all" + "copies or substantial portions of the Software.\n\n" + "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR" + "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY," + "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE" + "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER" + "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM," + "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE" + "SOFTWARE."), + _Item( + "FlutterToast", + "MIT License\n" + + "\n" + + "Copyright (c) 2018 YM\n" + + "\n" + + "Permission is hereby granted, free of charge, to any person obtaining a copy\n" + + "of this software and associated documentation files (the \"Software\"), to deal\n" + + "in the Software without restriction, including without limitation the rights\n" + + "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n" + + "copies of the Software, and to permit persons to whom the Software is\n" + + "furnished to do so, subject to the following conditions:\n" + + "\n" + + "The above copyright notice and this permission notice shall be included in all\n" + + "copies or substantial portions of the Software.\n" + + "\n" + + "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n" + + "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n" + + "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n" + + "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n" + + "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n" + + "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n" + + "SOFTWARE.", + ), + _Item( + "flutter_calendar", + "Copyright 2018 AppTree SoftWare\n" + + "\n" + + "Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n" + + "\n" + + "Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n" + + "\n" + + "Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n" + + "\n" + + "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."), + _Item( + "flutter_carousel_slider", + "MIT License\n" + + "\n" + + "Copyright (c) 2017 serenader\n" + + "\n" + + "Permission is hereby granted, free of charge, to any person obtaining a copy\n" + + "of this software and associated documentation files (the \"Software\"), to deal\n" + + "in the Software without restriction, including without limitation the rights\n" + + "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n" + + "copies of the Software, and to permit persons to whom the Software is\n" + + "furnished to do so, subject to the following conditions:\n" + + "\n" + + "The above copyright notice and this permission notice shall be included in all\n" + + "copies or substantial portions of the Software.\n" + + "\n" + + "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n" + + "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n" + + "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n" + + "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n" + + "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n" + + "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n" + + "SOFTWARE."), + _Item( + "flutter_crashlytics", + "BSD 2-Clause License\n" + + "\n" + + "Copyright (c) 2018, KiWi\n" + + "All rights reserved.\n" + + "\n" + + "Redistribution and use in source and binary forms, with or without\n" + + "modification, are permitted provided that the following conditions are met:\n" + + "\n" + + "* Redistributions of source code must retain the above copyright notice, this\n" + + " list of conditions and the following disclaimer.\n" + + "\n" + + "* Redistributions in binary form must reproduce the above copyright notice,\n" + + " this list of conditions and the following disclaimer in the documentation\n" + + " and/or other materials provided with the distribution.\n" + + "\n" + + "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n" + + "AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n" + + "IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n" + + "DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n" + + "FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n" + + "DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n" + + "SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n" + + "CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n" + + "OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n" + + "OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"), + _Item( + "encrypt", + "BSD 3-Clause License\n" + "Copyright (c) 2018, Leo Cavalcante\n" + "All rights reserved.\n" + "\n" + "Redistribution and use in source and binary forms, with or without\n" + "modification, are permitted provided that the following conditions are met:\n" + "\n" + "* Redistributions of source code must retain the above copyright notice, this\n" + "list of conditions and the following disclaimer.\n" + "\n" + "* Redistributions in binary form must reproduce the above copyright notice,\n" + "this list of conditions and the following disclaimer in the documentation\n" + "and/or other materials provided with the distribution.\n" + "\n" + "* Neither the name of the copyright holder nor the names of its\n" + "contributors may be used to endorse or promote products derived from\n" + "this software without specific prior written permission.\n" + "\n" + " THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n" + "AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n" + "IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n" + "DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n" + "FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n" + "DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR" + " SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n" + "CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n" + "OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n" + "OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n" + ")\n"), + _Item( + 'flutter_local_notifications', + "// Copyright 2018 Michael Bui. All rights reserved.\n" + + "//\n" + + "// Redistribution and use in source and binary forms, with or without\n" + + "// modification, are permitted provided that the following conditions are\n" + + "// met:\n" + + "//\n" + + "// * Redistributions of source code must retain the above copyright\n" + + "// notice, this list of conditions and the following disclaimer.\n" + + "// * Redistributions in binary form must reproduce the above\n" + + "// copyright notice, this list of conditions and the following disclaimer\n" + + "// in the documentation and/or other materials provided with the\n" + + "// distribution.\n" + + "// * Neither the name of the copyright holder nor the names of its\n" + + "// contributors may be used to endorse or promote products derived from\n" + + "// this software without specific prior written permission.\n" + + "//\n" + + "// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n" + + "// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n" + + "// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n" + + "// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n" + + "// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n" + + "// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n" + + "// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n" + + "// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n" + + "// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n" + + "// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n" + + "// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."), + _Item( + 'sprintf', + "Copyright (c) 2012, Richard Eames All rights reserved.\n" + + "\n" + + "Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n" + + "\n" + + "Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n" + + "Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n" + + "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."), + _Item('add_2_calendar', + 'MIT License\n\nCopyright (c) 2018 Javi Hurtado\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the "Software"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.'), + _Item( + 'flutter_cached_network_image', + "The MIT License (MIT)\n" + + "\n" + + "Copyright (c) 2018 Rene Floor\n" + + "\n" + + "Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n" + + "\n" + + "The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n" + + "\n" + + "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."), + _Item( + 'app_review', + "MIT License\n" + + "\n" + + "Copyright (c) 2018 Rody Davis\n" + + "\n" + + "Permission is hereby granted, free of charge, to any person obtaining a copy\n" + + "of this software and associated documentation files (the \"Software\"), to deal\n" + + "in the Software without restriction, including without limitation the rights\n" + + "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n" + + "copies of the Software, and to permit persons to whom the Software is\n" + + "furnished to do so, subject to the following conditions:\n" + + "\n" + + "The above copyright notice and this permission notice shall be included in all\n" + + "copies or substantial portions of the Software.\n" + + "\n" + + "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n" + + "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n" + + "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n" + + "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n" + + "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n" + + "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n" + + "SOFTWARE."), + _Item( + 'outline_material_icons', + "Copyright 2018 Lucas Levin\n" + + "\n" + + "Licensed under the Apache License, Version 2.0 (the \"License\");\n" + + "you may not use this file except in compliance with the License.\n" + + "You may obtain a copy of the License at\n" + + "\n" + + " http://www.apache.org/licenses/LICENSE-2.0\n" + + "\n" + + "Unless required by applicable law or agreed to in writing, software\n" + + "distributed under the License is distributed on an \"AS IS\" BASIS,\n" + + "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" + + "See the License for the specific language governing permissions and\n" + + "limitations under the License.", + ) + ]; + AppLocalizations app; @override void initState() { - super.initState(); FA.setCurrentScreen("OpenSourcePage", "open_source_page.dart"); + super.initState(); } @override @@ -27,344 +329,52 @@ class OpenSourcePageState extends State @override Widget build(BuildContext context) { app = AppLocalizations.of(context); - return new Scaffold( - appBar: new AppBar( - title: new Text(app.aboutOpenSourceTitle), + return Scaffold( + appBar: AppBar( + title: Text(app.aboutOpenSourceTitle), backgroundColor: Resource.Colors.blue, ), - body: ListView( - children: [ - _item( - "KUAS-AP-Material", - "The MIT License (MIT)\n" + - "\n" + - "Copyright (c) 2015 HearSilent\n" + - "\n" + - "Permission is hereby granted, free of charge, to any person obtaining a copy\n" + - "of this software and associated documentation files (the \"Software\"), to deal\n" + - "in the Software without restriction, including without limitation the rights\n" + - "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n" + - "copies of the Software, and to permit persons to whom the Software is\n" + - "furnished to do so, subject to the following conditions:\n" + - "\n" + - "The above copyright notice and this permission notice shall be included in all\n" + - "copies or substantial portions of the Software.\n" + - "\n" + - "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n" + - "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n" + - "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n" + - "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n" + - "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n" + - "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n" + - "SOFTWARE.\n"), - _item( - "flutter", - "Copyright 2014 The Chromium Authors. All rights reserved.\n\n" - "Redistribution and use in source and binary forms, with or without" - "modification, are permitted provided that the following conditions are" - "met:\n" - "* Redistributions of source code must retain the above copyright" - " notice, this list of conditions and the following disclaimer.\n" - "* Redistributions in binary form must reproduce the above" - " copyright notice, this list of conditions and the following" - " disclaimer in the documentation and/or other materials provided" - " with the distribution.\n" - "* Neither the name of Google Inc. nor the names of its" - " contributors may be used to endorse or promote products derived" - " from this software without specific prior written permission.\n\n" - "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS" - "\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT" - "LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR" - "A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT" - "OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL," - "SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT" - "LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE," - "DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY" - "THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT" - "(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE" - "OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."), - _item( - "flutter plugin", - " Copyright 2017 The Chromium Authors. All rights reserved.\n\n" - " Redistribution and use in source and binary forms, with or without" - " modification, are permitted provided that the following conditions are" - " met:\n\n" - " * Redistributions of source code must retain the above copyright" - " notice, this list of conditions and the following disclaimer.\n" - " * Redistributions in binary form must reproduce the above" - " copyright notice, this list of conditions and the following disclaimer" - " in the documentation and/or other materials provided with the" - " distribution.\n" - " * Neither the name of Google Inc. nor the names of its" - " contributors may be used to endorse or promote products derived from" - " this software without specific prior written permission.\n\n" - " THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS" - " \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT" - " LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR" - " A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT" - " OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL," - " SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT" - " LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE," - " DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY" - " THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT" - " (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE" - " OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."), - _item( - "dio", - "MIT License\n\n" - "Copyright (c) 2018 wendux\n\n" - "Permission is hereby granted, free of charge, to any person obtaining a copy" - "of this software and associated documentation files (the \"Software\"), to deal" - "in the Software without restriction, including without limitation the rights" - "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell" - "copies of the Software, and to permit persons to whom the Software is" - "furnished to do so, subject to the following conditions:\n\n" - "The above copyright notice and this permission notice shall be included in all" - "copies or substantial portions of the Software.\n\n" - "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR" - "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY," - "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE" - "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER" - "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM," - "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE" - "SOFTWARE."), - _item( - "FlutterToast", - "MIT License\n" + - "\n" + - "Copyright (c) 2018 YM\n" + - "\n" + - "Permission is hereby granted, free of charge, to any person obtaining a copy\n" + - "of this software and associated documentation files (the \"Software\"), to deal\n" + - "in the Software without restriction, including without limitation the rights\n" + - "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n" + - "copies of the Software, and to permit persons to whom the Software is\n" + - "furnished to do so, subject to the following conditions:\n" + - "\n" + - "The above copyright notice and this permission notice shall be included in all\n" + - "copies or substantial portions of the Software.\n" + - "\n" + - "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n" + - "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n" + - "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n" + - "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n" + - "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n" + - "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n" + - "SOFTWARE.", - ), - _item( - "flutter_calendar", - "Copyright 2018 AppTree SoftWare\n" + - "\n" + - "Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n" + - "\n" + - "Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n" + - "\n" + - "Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n" + - "\n" + - "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."), - _item( - "flutter_carousel_slider", - "MIT License\n" + - "\n" + - "Copyright (c) 2017 serenader\n" + - "\n" + - "Permission is hereby granted, free of charge, to any person obtaining a copy\n" + - "of this software and associated documentation files (the \"Software\"), to deal\n" + - "in the Software without restriction, including without limitation the rights\n" + - "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n" + - "copies of the Software, and to permit persons to whom the Software is\n" + - "furnished to do so, subject to the following conditions:\n" + - "\n" + - "The above copyright notice and this permission notice shall be included in all\n" + - "copies or substantial portions of the Software.\n" + - "\n" + - "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n" + - "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n" + - "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n" + - "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n" + - "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n" + - "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n" + - "SOFTWARE."), - _item( - "flutter_crashlytics", - "BSD 2-Clause License\n" + - "\n" + - "Copyright (c) 2018, KiWi\n" + - "All rights reserved.\n" + - "\n" + - "Redistribution and use in source and binary forms, with or without\n" + - "modification, are permitted provided that the following conditions are met:\n" + - "\n" + - "* Redistributions of source code must retain the above copyright notice, this\n" + - " list of conditions and the following disclaimer.\n" + - "\n" + - "* Redistributions in binary form must reproduce the above copyright notice,\n" + - " this list of conditions and the following disclaimer in the documentation\n" + - " and/or other materials provided with the distribution.\n" + - "\n" + - "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n" + - "AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n" + - "IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n" + - "DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n" + - "FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n" + - "DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n" + - "SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n" + - "CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n" + - "OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n" + - "OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"), - _item( - "encrypt", - "BSD 3-Clause License\n" - "Copyright (c) 2018, Leo Cavalcante\n" - "All rights reserved.\n" - "\n" - "Redistribution and use in source and binary forms, with or without\n" - "modification, are permitted provided that the following conditions are met:\n" - "\n" - "* Redistributions of source code must retain the above copyright notice, this\n" - "list of conditions and the following disclaimer.\n" - "\n" - "* Redistributions in binary form must reproduce the above copyright notice,\n" - "this list of conditions and the following disclaimer in the documentation\n" - "and/or other materials provided with the distribution.\n" - "\n" - "* Neither the name of the copyright holder nor the names of its\n" - "contributors may be used to endorse or promote products derived from\n" - "this software without specific prior written permission.\n" - "\n" - " THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n" - "AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n" - "IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n" - "DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n" - "FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n" - "DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR" - " SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n" - "CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n" - "OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n" - "OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n" - ")\n"), - _item( - 'flutter_local_notifications', - "// Copyright 2018 Michael Bui. All rights reserved.\n" + - "//\n" + - "// Redistribution and use in source and binary forms, with or without\n" + - "// modification, are permitted provided that the following conditions are\n" + - "// met:\n" + - "//\n" + - "// * Redistributions of source code must retain the above copyright\n" + - "// notice, this list of conditions and the following disclaimer.\n" + - "// * Redistributions in binary form must reproduce the above\n" + - "// copyright notice, this list of conditions and the following disclaimer\n" + - "// in the documentation and/or other materials provided with the\n" + - "// distribution.\n" + - "// * Neither the name of the copyright holder nor the names of its\n" + - "// contributors may be used to endorse or promote products derived from\n" + - "// this software without specific prior written permission.\n" + - "//\n" + - "// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n" + - "// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n" + - "// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n" + - "// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n" + - "// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n" + - "// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n" + - "// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n" + - "// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n" + - "// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n" + - "// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n" + - "// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."), - _item( - 'sprintf', - "Copyright (c) 2012, Richard Eames All rights reserved.\n" + - "\n" + - "Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n" + - "\n" + - "Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n" + - "Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n" + - "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."), - _item('add_2_calendar', - 'MIT License\n\nCopyright (c) 2018 Javi Hurtado\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the "Software"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.'), - _item( - 'flutter_cached_network_image', - "The MIT License (MIT)\n" + - "\n" + - "Copyright (c) 2018 Rene Floor\n" + - "\n" + - "Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n" + - "\n" + - "The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n" + - "\n" + - "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."), - _item( - 'app_review', - "MIT License\n" + - "\n" + - "Copyright (c) 2018 Rody Davis\n" + - "\n" + - "Permission is hereby granted, free of charge, to any person obtaining a copy\n" + - "of this software and associated documentation files (the \"Software\"), to deal\n" + - "in the Software without restriction, including without limitation the rights\n" + - "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n" + - "copies of the Software, and to permit persons to whom the Software is\n" + - "furnished to do so, subject to the following conditions:\n" + - "\n" + - "The above copyright notice and this permission notice shall be included in all\n" + - "copies or substantial portions of the Software.\n" + - "\n" + - "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n" + - "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n" + - "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n" + - "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n" + - "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n" + - "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n" + - "SOFTWARE."), - _item( - 'outline_material_icons', - "Copyright 2018 Lucas Levin\n" + - "\n" + - "Licensed under the Apache License, Version 2.0 (the \"License\");\n" + - "you may not use this file except in compliance with the License.\n" + - "You may obtain a copy of the License at\n" + - "\n" + - " http://www.apache.org/licenses/LICENSE-2.0\n" + - "\n" + - "Unless required by applicable law or agreed to in writing, software\n" + - "distributed under the License is distributed on an \"AS IS\" BASIS,\n" + - "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" + - "See the License for the specific language governing permissions and\n" + - "limitations under the License.", - ) - ], + body: ListView.builder( + itemCount: items.length, + itemBuilder: (_, index) { + return Card( + margin: EdgeInsets.symmetric(vertical: 8.0, horizontal: 16.0), + elevation: 4.0, + child: Container( + padding: EdgeInsets.only( + top: 24.0, left: 16.0, bottom: 16.0, right: 16.0), + width: double.infinity, + child: Column( + mainAxisSize: MainAxisSize.max, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + items[index].text, + style: TextStyle(fontSize: 18.0), + ), + SizedBox( + height: 4.0, + ), + RichText( + text: TextSpan( + style: TextStyle( + fontSize: 14.0, color: Resource.Colors.grey), + text: items[index].subText, + ), + ), + ], + ), + ), + ); + }, ), ); } +} - _item(String text, String subText) => Card( - margin: EdgeInsets.symmetric(vertical: 8.0, horizontal: 16.0), - elevation: 4.0, - child: Container( - padding: - EdgeInsets.only(top: 24.0, left: 16.0, bottom: 16.0, right: 16.0), - width: double.infinity, - child: Column( - mainAxisSize: MainAxisSize.max, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - text, - style: TextStyle(fontSize: 18.0), - ), - SizedBox( - height: 4.0, - ), - RichText( - text: TextSpan( - style: TextStyle(fontSize: 14.0, color: Resource.Colors.grey), - text: subText, - ), - ), - ], - ), - ), - ); +class _Item { + final String text; + final String subText; + + _Item(this.text, this.subText); } From f48b817fb819423a4cb438f81b1b7bf93f167d54 Mon Sep 17 00:00:00 2001 From: RainVisitor Date: Wed, 14 Aug 2019 00:47:16 +0800 Subject: [PATCH 21/24] Code tune bus_page --- lib/pages/home/bus/bus_reservations_page.dart | 3 ++- lib/pages/home/bus/bus_reserve_page.dart | 10 ++++++---- lib/pages/home/bus/bus_rule_page.dart | 5 ++--- lib/pages/home/bus_page.dart | 14 +++++--------- 4 files changed, 15 insertions(+), 17 deletions(-) diff --git a/lib/pages/home/bus/bus_reservations_page.dart b/lib/pages/home/bus/bus_reservations_page.dart index 11ebd9ab..6e60e651 100644 --- a/lib/pages/home/bus/bus_reservations_page.dart +++ b/lib/pages/home/bus/bus_reservations_page.dart @@ -35,9 +35,9 @@ class BusReservationsPageState extends State @override void initState() { - super.initState(); FA.setCurrentScreen("BusReservationsPage", "bus_reservations_page.dart"); _getBusReservations(); + super.initState(); } @override @@ -47,6 +47,7 @@ class BusReservationsPageState extends State @override Widget build(BuildContext context) { + super.build(context); app = AppLocalizations.of(context); return Column( children: [ diff --git a/lib/pages/home/bus/bus_reserve_page.dart b/lib/pages/home/bus/bus_reserve_page.dart index 461e92f3..74c26148 100644 --- a/lib/pages/home/bus/bus_reserve_page.dart +++ b/lib/pages/home/bus/bus_reserve_page.dart @@ -27,21 +27,22 @@ class BusReservePageState extends State @override bool get wantKeepAlive => true; - double top = 0.0; + AppLocalizations app; _State state = _State.loading; - BusData busData; Station selectStartStation = Station.janGong; DateTime dateTime = DateTime.now(); - AppLocalizations app; + BusData busData; + + double top = 0.0; @override void initState() { - super.initState(); FA.setCurrentScreen("BusReservePage", "bus_reserve_page.dart"); _getBusTimeTables(); + super.initState(); } @override @@ -51,6 +52,7 @@ class BusReservePageState extends State @override Widget build(BuildContext context) { + super.build(context); app = AppLocalizations.of(context); return Scaffold( body: OrientationBuilder(builder: (_, orientation) { diff --git a/lib/pages/home/bus/bus_rule_page.dart b/lib/pages/home/bus/bus_rule_page.dart index fe71e41a..b7bf27b6 100644 --- a/lib/pages/home/bus/bus_rule_page.dart +++ b/lib/pages/home/bus/bus_rule_page.dart @@ -12,14 +12,13 @@ class BusRulePage extends StatefulWidget { BusRulePageState createState() => new BusRulePageState(); } -class BusRulePageState extends State - with SingleTickerProviderStateMixin { +class BusRulePageState extends State { AppLocalizations app; @override void initState() { - super.initState(); FA.setCurrentScreen("BusRulePage", "bus_rule_page.dart"); + super.initState(); } @override diff --git a/lib/pages/home/bus_page.dart b/lib/pages/home/bus_page.dart index 3d330fae..21bc1b8b 100644 --- a/lib/pages/home/bus_page.dart +++ b/lib/pages/home/bus_page.dart @@ -15,25 +15,21 @@ class BusPage extends StatefulWidget { BusPage({this.initIndex = 0}); @override - BusPageState createState() => new BusPageState(_children, initIndex); + BusPageState createState() => new BusPageState(); } class BusPageState extends State with SingleTickerProviderStateMixin { - final List _children; - final int initIndex; - int _currentIndex = 0; AppLocalizations app; TabController controller; - BusPageState(this._children, this.initIndex) { - _currentIndex = initIndex; - } + int _currentIndex = 0; @override void initState() { + controller = + TabController(length: 2, initialIndex: widget.initIndex, vsync: this); super.initState(); - controller = TabController(length: 2, initialIndex: initIndex, vsync: this); } @override @@ -61,7 +57,7 @@ class BusPageState extends State with SingleTickerProviderStateMixin { ], ), body: TabBarView( - children: _children, + children: widget._children, controller: controller, physics: NeverScrollableScrollPhysics()), bottomNavigationBar: BottomNavigationBar( From 5a593c21abe95a31c9e17725066f04724f1e9cae Mon Sep 17 00:00:00 2001 From: RainVisitor Date: Wed, 14 Aug 2019 00:49:38 +0800 Subject: [PATCH 22/24] Code tune leave_page --- lib/pages/home/leave_page.dart | 14 +++++--------- lib/pages/home/leaves/leave_apply_page.dart | 11 ++++------- 2 files changed, 9 insertions(+), 16 deletions(-) diff --git a/lib/pages/home/leave_page.dart b/lib/pages/home/leave_page.dart index 8257dba2..a81331fd 100644 --- a/lib/pages/home/leave_page.dart +++ b/lib/pages/home/leave_page.dart @@ -16,26 +16,22 @@ class LeavePage extends StatefulWidget { LeavePage({this.initIndex = 0}); @override - LeavePageState createState() => new LeavePageState(_children, initIndex); + LeavePageState createState() => LeavePageState(); } class LeavePageState extends State with SingleTickerProviderStateMixin { - final List _children; - final int initIndex; - int _currentIndex = 0; AppLocalizations app; TabController controller; - LeavePageState(this._children, this.initIndex) { - _currentIndex = initIndex; - } + int _currentIndex = 0; @override void initState() { super.initState(); - controller = TabController(length: 2, initialIndex: initIndex, vsync: this); + controller = + TabController(length: 2, initialIndex: widget.initIndex, vsync: this); } @override @@ -53,7 +49,7 @@ class LeavePageState extends State backgroundColor: Resource.Colors.blue, ), body: TabBarView( - children: _children, + children: widget._children, controller: controller, physics: NeverScrollableScrollPhysics()), bottomNavigationBar: BottomNavigationBar( diff --git a/lib/pages/home/leaves/leave_apply_page.dart b/lib/pages/home/leaves/leave_apply_page.dart index 0abee2ac..aa2c7794 100644 --- a/lib/pages/home/leaves/leave_apply_page.dart +++ b/lib/pages/home/leaves/leave_apply_page.dart @@ -1,6 +1,5 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:nkust_ap/models/models.dart'; import 'package:nkust_ap/res/app_icon.dart'; import 'package:nkust_ap/res/resource.dart' as Resource; import 'package:nkust_ap/utils/global.dart'; @@ -21,19 +20,17 @@ class LeaveApplyPageState extends State @override bool get wantKeepAlive => true; - _State state = _State.empty; - BusReservationsData busReservationsData; - List busReservationWeights = []; - DateTime dateTime = DateTime.now(); - AppLocalizations app; + _State state = _State.empty; + + DateTime dateTime = DateTime.now(); Leave _leave = Leave.normal; @override void initState() { - super.initState(); FA.setCurrentScreen("LeaveApplyPage", "leave_apply_page.dart"); + super.initState(); } @override From 8f85483f675d97ed6651a5f8cc7db987c94c5e57 Mon Sep 17 00:00:00 2001 From: RainVisitor Date: Wed, 14 Aug 2019 01:23:48 +0800 Subject: [PATCH 23/24] Update all section picture to about_us_page --- assets/images/section_first1.webp | Bin 0 -> 63174 bytes assets/images/section_first2.webp | Bin 0 -> 75436 bytes assets/images/section_jiangong.webp | Bin 0 -> 90258 bytes assets/images/section_nanzi.webp | Bin 0 -> 65612 bytes assets/images/section_qijin.webp | Bin 0 -> 71978 bytes assets/images/section_yanchao.webp | Bin 0 -> 61282 bytes lib/main.dart | 3 +++ lib/pages/home/about/about_us_page.dart | 24 +++++++++++++++++++++++- lib/pages/home_page.dart | 2 ++ lib/res/assets.dart | 7 +++++++ 10 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 assets/images/section_first1.webp create mode 100644 assets/images/section_first2.webp create mode 100644 assets/images/section_jiangong.webp create mode 100644 assets/images/section_nanzi.webp create mode 100644 assets/images/section_qijin.webp create mode 100644 assets/images/section_yanchao.webp diff --git a/assets/images/section_first1.webp b/assets/images/section_first1.webp new file mode 100644 index 0000000000000000000000000000000000000000..28166fabbb4c625a9499f66dc873b6d9ed1370a5 GIT binary patch literal 63174 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 literal 0 HcmV?d00001 diff --git a/assets/images/section_first2.webp b/assets/images/section_first2.webp new file mode 100644 index 0000000000000000000000000000000000000000..f4a049be4e79527cdb7b2d349a9361d35fbc675f GIT binary patch literal 75436 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�t|!XSzK^NH?urS=K%tvz_pNm&2BF)zGi>dRZ9| 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 WUj?>Y>ylTS-yIZ>RCQEwOaK5##r*^T literal 0 HcmV?d00001 diff --git a/lib/main.dart b/lib/main.dart index 4fad63a9..0a44beaa 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -21,6 +21,8 @@ import 'package:nkust_ap/utils/preferences.dart'; import 'package:nkust_ap/utils/utils.dart'; import 'package:nkust_ap/widgets/share_data_widget.dart'; +import 'models/user_info.dart'; + void main() async { bool isInDebugMode = Constants.isInDebugMode; await Preferences.init(); @@ -87,6 +89,7 @@ class MyAppState extends State { FirebaseAnalytics analytics; FirebaseMessaging firebaseMessaging; ThemeData themeData; + UserInfo userInfo; bool isLogin = false, offlineLogin = false; setThemeData(ThemeData themeData) { diff --git a/lib/pages/home/about/about_us_page.dart b/lib/pages/home/about/about_us_page.dart index 03d2b975..f2935520 100644 --- a/lib/pages/home/about/about_us_page.dart +++ b/lib/pages/home/about/about_us_page.dart @@ -1,10 +1,12 @@ import 'dart:io'; +import 'dart:math'; import 'package:flutter/material.dart'; import 'package:nkust_ap/res/app_icon.dart'; import 'package:nkust_ap/res/assets.dart'; import 'package:nkust_ap/res/resource.dart' as Resource; import 'package:nkust_ap/utils/global.dart'; +import 'package:nkust_ap/widgets/share_data_widget.dart'; class AboutUsPage extends StatefulWidget { static const String routerName = "/aboutUs"; @@ -27,6 +29,26 @@ class AboutUsPageState extends State { super.dispose(); } + String get sectionImage { + final department = ShareDataWidget.of(context).data.userInfo.department; + Random random = Random(); + bool halfSnapFingerChance = random.nextInt(2000) % 2 == 0; + if (department.contains('建工') || department.contains('燕巢')) + return halfSnapFingerChance + ? ImageAssets.sectionJiangong + : ImageAssets.sectionYanchao; + else if (department.contains('第一')) + return halfSnapFingerChance + ? ImageAssets.sectionFirst1 + : ImageAssets.sectionFirst2; + else if (department.contains('旗津') || department.contains('楠梓')) + return halfSnapFingerChance + ? ImageAssets.sectionQijin + : ImageAssets.sectionNanzi; + else + return ImageAssets.kuasap2; + } + @override Widget build(BuildContext context) { app = AppLocalizations.of(context); @@ -52,7 +74,7 @@ class AboutUsPageState extends State { backgroundColor: Resource.Colors.blue, flexibleSpace: FlexibleSpaceBar( background: Image.asset( - ImageAssets.kuasap2, + sectionImage, fit: BoxFit.cover, ), ), diff --git a/lib/pages/home_page.dart b/lib/pages/home_page.dart index be81f6d2..250907c1 100644 --- a/lib/pages/home_page.dart +++ b/lib/pages/home_page.dart @@ -11,6 +11,7 @@ import 'package:nkust_ap/utils/global.dart'; import 'package:nkust_ap/utils/preferences.dart'; import 'package:nkust_ap/widgets/drawer_body.dart'; import 'package:nkust_ap/widgets/hint_content.dart'; +import 'package:nkust_ap/widgets/share_data_widget.dart'; import 'package:nkust_ap/widgets/yes_no_dialog.dart'; enum _State { loading, finish, error, empty, offline } @@ -308,6 +309,7 @@ class HomePageState extends State { FA.setUserProperty('student_id', userInfo.studentId); FA.setUserId(userInfo.studentId); FA.logUserInfo(userInfo.department); + ShareDataWidget.of(context).data.userInfo = userInfo; CacheUtils.saveUserInfo(userInfo); } }).catchError((e) { diff --git a/lib/res/assets.dart b/lib/res/assets.dart index 9cacb54c..82483614 100644 --- a/lib/res/assets.dart +++ b/lib/res/assets.dart @@ -20,6 +20,13 @@ class ImageAssets { static const String dashLineLight = '$basePath/dash_line.webp'; static const String dashLineDarkTheme = '$basePath/dash_line_dark_theme.webp'; + static String sectionJiangong = '$basePath/section_jiangong.webp'; + static String sectionYanchao = '$basePath/section_yanchao.webp'; + static String sectionFirst1 = '$basePath/section_first1.webp'; + static String sectionFirst2 = '$basePath/section_first2.webp'; + static String sectionNanzi = '$basePath/section_nanzi.webp'; + static String sectionQijin = '$basePath/section_qijin.webp'; + static String get dashLine { switch (AppTheme.code) { case AppTheme.DARK: From c0a15d635a0f9f95535c3747d6d917de297945c3 Mon Sep 17 00:00:00 2001 From: RainVisitor Date: Wed, 14 Aug 2019 01:28:43 +0800 Subject: [PATCH 24/24] Update to v3.2.1 --- lib/utils/app_localizations.dart | 4 ++-- pubspec.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/utils/app_localizations.dart b/lib/utils/app_localizations.dart index 109ef0ce..52f549e2 100644 --- a/lib/utils/app_localizations.dart +++ b/lib/utils/app_localizations.dart @@ -64,7 +64,7 @@ class AppLocalizations { 'app_name': 'NKUST AP', 'update_note_title': 'Update Notes', 'update_note_content': - '1.Add dark theme(switch in setting).\n2.Add new icon style(switch in setting).\n3.Imporve pick semester dialog UI.\n4.Fix some error.', + '1.Add search student id page.\n2.Page can swipe to back(Android).\n3.Add other section picture\n4.Fix some error.', 'splash_content': '我們全都包了\n只剩下學校不包我們', 'share': 'Share', 'teacher_confirm_title': 'Are you a teacher?', @@ -366,7 +366,7 @@ class AppLocalizations { 'app_name': '高科校務通', 'update_note_title': '更新日誌', 'update_note_content': - '1.新增深色主題(可至設定切換)\n2.推出新風格圖案(可至設定切換)\n3.優化選擇學期列表對話框\n4.修正部分錯誤', + '1.新增查詢學號頁面\n2.可滑動返回上一頁(Android)\n3.新增其他校區照片\n4.修正部分錯誤', 'splash_content': '我們全都包了\n只剩下學校不包我們', 'share': '分享', 'teacher_confirm_title': '您是老師嗎?', diff --git a/pubspec.yaml b/pubspec.yaml index cb12cb87..94ba362c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: nkust_ap description: A new Flutter application. -version: 3.2.0+30200 +version: 3.2.1+30201 environment: sdk: ">=2.2.2 <3.0.0"

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 O@tv=O_l7)h0000=9-Arv literal 0 HcmV?d00001 diff --git a/assets/images/section_jiangong.webp b/assets/images/section_jiangong.webp new file mode 100644 index 0000000000000000000000000000000000000000..6cc56de84da1470c66d8df2e0fa7f22f7d642301 GIT binary patch literal 90258 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 VXdNYBgbbpqKvp)BQ<57%004F5@819b literal 0 HcmV?d00001 diff --git a/assets/images/section_nanzi.webp b/assets/images/section_nanzi.webp new file mode 100644 index 0000000000000000000000000000000000000000..9dae5bd81d11ef4bae17b8988dc848d197a8a8ff GIT binary patch literal 65612 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 literal 0 HcmV?d00001 diff --git a/assets/images/section_yanchao.webp b/assets/images/section_yanchao.webp new file mode 100644 index 0000000000000000000000000000000000000000..0fbd02462a9a9fb0fde8318a1b82dd6dcd30b358 GIT binary patch literal 61282 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