iOS version build.

This commit is contained in:
Stonegate 2021-01-17 23:02:30 +08:00
parent dea320c7ae
commit af89f43469
11 changed files with 1111 additions and 1178 deletions

View File

@ -0,0 +1 @@
38b8679cdfc02dedbe8c0756185e2330

View File

@ -1,9 +1,8 @@
# Uncomment this line to define a global platform for your project # Uncomment this line to define a global platform for your project
platform :ios, '11.0' # platform :ios, '9.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency. # CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true' ENV['COCOAPODS_DISABLE_STATS'] = 'true'
source 'https://cdn.cocoapods.org/'
project 'Runner', { project 'Runner', {
'Debug' => :debug, 'Debug' => :debug,
@ -11,78 +10,36 @@ project 'Runner', {
'Release' => :release, 'Release' => :release,
} }
def parse_KV_file(file, separator='=') def flutter_root
file_abs_path = File.expand_path(file) generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
if !File.exists? file_abs_path unless File.exist?(generated_xcode_build_settings_path)
return []; raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
end end
generated_key_values = {}
skip_line_start_symbols = ["#", "/"] File.foreach(generated_xcode_build_settings_path) do |line|
File.foreach(file_abs_path) do |line| matches = line.match(/FLUTTER_ROOT\=(.*)/)
next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } return matches[1].strip if matches
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)
generated_key_values[podname] = podpath
else
puts "Invalid plugin specification: #{line}"
end
end end
generated_key_values raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
end end
require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
flutter_ios_podfile_setup
target 'Runner' do target 'Runner' do
use_frameworks! use_frameworks!
use_modular_headers! use_modular_headers!
# Flutter Pod flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
copied_flutter_dir = File.join(__dir__, 'Flutter')
copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework')
copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec')
unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path)
# Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet.
# That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration.
# CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist.
generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig')
unless File.exist?(generated_xcode_build_settings_path)
raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first"
end
generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path)
cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR'];
unless File.exist?(copied_framework_path)
FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir)
end
unless File.exist?(copied_podspec_path)
FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir)
end
end
# Keep pod path relative so it can be checked into Podfile.lock.
pod 'Flutter', :path => 'Flutter'
# Plugin Pods
# Prepare symlinks folder. We use symlinks to avoid having Podfile.lock
# referring to absolute paths on developers' machines.
system('rm -rf .symlinks')
system('mkdir -p .symlinks/plugins')
plugin_pods = parse_KV_file('../.flutter-plugins')
plugin_pods.each do |name, path|
symlink = File.join('.symlinks', 'plugins', name)
File.symlink(path, symlink)
pod name, :path => File.join(symlink, 'ios')
end
end end
post_install do |installer| post_install do |installer|
installer.pods_project.targets.each do |target| installer.pods_project.targets.each do |target|
target.build_configurations.each do |config| target.build_configurations.each do |config|
config.build_settings['ENABLE_BITCODE'] = 'NO' config.build_settings['ENABLE_BITCODE'] = 'NO'
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11.0'
end end
flutter_additional_ios_build_settings(target)
end end
end end

View File

@ -1,46 +1,47 @@
PODS: PODS:
- audio_service (0.0.1): - audio_service (0.0.1):
- Flutter - Flutter
- audio_session (0.0.1):
- Flutter
- connectivity (0.0.1): - connectivity (0.0.1):
- Flutter - Flutter
- Reachability - Reachability
- connectivity_macos (0.0.1): - device_info (0.0.1):
- Flutter - Flutter
- DKImagePickerController/Core (4.2.2): - DKImagePickerController/Core (4.3.2):
- DKImagePickerController/ImageDataManager - DKImagePickerController/ImageDataManager
- DKImagePickerController/Resource - DKImagePickerController/Resource
- DKImagePickerController/ImageDataManager (4.2.2) - DKImagePickerController/ImageDataManager (4.3.2)
- DKImagePickerController/PhotoGallery (4.2.2): - DKImagePickerController/PhotoGallery (4.3.2):
- DKImagePickerController/Core - DKImagePickerController/Core
- DKPhotoGallery - DKPhotoGallery
- DKImagePickerController/Resource (4.2.2) - DKImagePickerController/Resource (4.3.2)
- DKPhotoGallery (0.0.14): - DKPhotoGallery (0.0.17):
- DKPhotoGallery/Core (= 0.0.14) - DKPhotoGallery/Core (= 0.0.17)
- DKPhotoGallery/Model (= 0.0.14) - DKPhotoGallery/Model (= 0.0.17)
- DKPhotoGallery/Preview (= 0.0.14) - DKPhotoGallery/Preview (= 0.0.17)
- DKPhotoGallery/Resource (= 0.0.14) - DKPhotoGallery/Resource (= 0.0.17)
- SDWebImage - SDWebImage
- SDWebImageFLPlugin - SwiftyGif
- DKPhotoGallery/Core (0.0.14): - DKPhotoGallery/Core (0.0.17):
- DKPhotoGallery/Model - DKPhotoGallery/Model
- DKPhotoGallery/Preview - DKPhotoGallery/Preview
- SDWebImage - SDWebImage
- SDWebImageFLPlugin - SwiftyGif
- DKPhotoGallery/Model (0.0.14): - DKPhotoGallery/Model (0.0.17):
- SDWebImage - SDWebImage
- SDWebImageFLPlugin - SwiftyGif
- DKPhotoGallery/Preview (0.0.14): - DKPhotoGallery/Preview (0.0.17):
- DKPhotoGallery/Model - DKPhotoGallery/Model
- DKPhotoGallery/Resource - DKPhotoGallery/Resource
- SDWebImage - SDWebImage
- SDWebImageFLPlugin - SwiftyGif
- DKPhotoGallery/Resource (0.0.14): - DKPhotoGallery/Resource (0.0.17):
- SDWebImage - SDWebImage
- SDWebImageFLPlugin - SwiftyGif
- file_picker (0.0.1): - file_picker (0.0.1):
- DKImagePickerController/PhotoGallery - DKImagePickerController/PhotoGallery
- Flutter - Flutter
- FLAnimatedImage (1.0.12)
- Flutter (1.0.0) - Flutter (1.0.0)
- flutter_downloader (0.0.1): - flutter_downloader (0.0.1):
- Flutter - Flutter
@ -48,8 +49,6 @@ PODS:
- Flutter - Flutter
- flutter_isolate (0.0.1): - flutter_isolate (0.0.1):
- Flutter - Flutter
- flutter_plugin_android_lifecycle (0.0.1):
- Flutter
- fluttertoast (0.0.2): - fluttertoast (0.0.2):
- Flutter - Flutter
- FMDB (2.7.5): - FMDB (2.7.5):
@ -59,76 +58,60 @@ PODS:
- Flutter - Flutter
- path_provider (0.0.1): - path_provider (0.0.1):
- Flutter - Flutter
- path_provider_macos (0.0.1): - "permission_handler (5.0.1+1)":
- Flutter
- "permission_handler (5.0.0+hotfix.5)":
- Flutter - Flutter
- Reachability (3.2) - Reachability (3.2)
- SDWebImage (5.7.4): - SDWebImage (5.10.2):
- SDWebImage/Core (= 5.7.4) - SDWebImage/Core (= 5.10.2)
- SDWebImage/Core (5.7.4) - SDWebImage/Core (5.10.2)
- SDWebImageFLPlugin (0.4.0):
- FLAnimatedImage (>= 1.0.11)
- SDWebImage/Core (~> 5.6)
- shared_preferences (0.0.1): - shared_preferences (0.0.1):
- Flutter - Flutter
- shared_preferences_macos (0.0.1): - sqflite (0.0.2):
- Flutter - Flutter
- shared_preferences_web (0.0.1): - FMDB (>= 2.7.5)
- Flutter - SwiftyGif (5.3.0)
- sqflite (0.0.1):
- Flutter
- FMDB (~> 2.7.2)
- url_launcher (0.0.1): - url_launcher (0.0.1):
- Flutter - Flutter
- url_launcher_macos (0.0.1): - wc_flutter_share (0.0.1):
- Flutter
- url_launcher_web (0.0.1):
- Flutter
- workmanager (0.0.1):
- Flutter - Flutter
DEPENDENCIES: DEPENDENCIES:
- audio_service (from `.symlinks/plugins/audio_service/ios`) - audio_service (from `.symlinks/plugins/audio_service/ios`)
- audio_session (from `.symlinks/plugins/audio_session/ios`)
- connectivity (from `.symlinks/plugins/connectivity/ios`) - connectivity (from `.symlinks/plugins/connectivity/ios`)
- connectivity_macos (from `.symlinks/plugins/connectivity_macos/ios`) - device_info (from `.symlinks/plugins/device_info/ios`)
- file_picker (from `.symlinks/plugins/file_picker/ios`) - file_picker (from `.symlinks/plugins/file_picker/ios`)
- Flutter (from `Flutter`) - Flutter (from `Flutter`)
- flutter_downloader (from `.symlinks/plugins/flutter_downloader/ios`) - flutter_downloader (from `.symlinks/plugins/flutter_downloader/ios`)
- flutter_file_dialog (from `.symlinks/plugins/flutter_file_dialog/ios`) - flutter_file_dialog (from `.symlinks/plugins/flutter_file_dialog/ios`)
- flutter_isolate (from `.symlinks/plugins/flutter_isolate/ios`) - flutter_isolate (from `.symlinks/plugins/flutter_isolate/ios`)
- flutter_plugin_android_lifecycle (from `.symlinks/plugins/flutter_plugin_android_lifecycle/ios`)
- fluttertoast (from `.symlinks/plugins/fluttertoast/ios`) - fluttertoast (from `.symlinks/plugins/fluttertoast/ios`)
- just_audio (from `.symlinks/plugins/just_audio/ios`) - just_audio (from `.symlinks/plugins/just_audio/ios`)
- path_provider (from `.symlinks/plugins/path_provider/ios`) - path_provider (from `.symlinks/plugins/path_provider/ios`)
- path_provider_macos (from `.symlinks/plugins/path_provider_macos/ios`)
- permission_handler (from `.symlinks/plugins/permission_handler/ios`) - permission_handler (from `.symlinks/plugins/permission_handler/ios`)
- shared_preferences (from `.symlinks/plugins/shared_preferences/ios`) - shared_preferences (from `.symlinks/plugins/shared_preferences/ios`)
- shared_preferences_macos (from `.symlinks/plugins/shared_preferences_macos/ios`)
- shared_preferences_web (from `.symlinks/plugins/shared_preferences_web/ios`)
- sqflite (from `.symlinks/plugins/sqflite/ios`) - sqflite (from `.symlinks/plugins/sqflite/ios`)
- url_launcher (from `.symlinks/plugins/url_launcher/ios`) - url_launcher (from `.symlinks/plugins/url_launcher/ios`)
- url_launcher_macos (from `.symlinks/plugins/url_launcher_macos/ios`) - wc_flutter_share (from `.symlinks/plugins/wc_flutter_share/ios`)
- url_launcher_web (from `.symlinks/plugins/url_launcher_web/ios`)
- workmanager (from `.symlinks/plugins/workmanager/ios`)
SPEC REPOS: SPEC REPOS:
trunk: trunk:
- DKImagePickerController - DKImagePickerController
- DKPhotoGallery - DKPhotoGallery
- FLAnimatedImage
- FMDB - FMDB
- Reachability - Reachability
- SDWebImage - SDWebImage
- SDWebImageFLPlugin - SwiftyGif
EXTERNAL SOURCES: EXTERNAL SOURCES:
audio_service: audio_service:
:path: ".symlinks/plugins/audio_service/ios" :path: ".symlinks/plugins/audio_service/ios"
audio_session:
:path: ".symlinks/plugins/audio_session/ios"
connectivity: connectivity:
:path: ".symlinks/plugins/connectivity/ios" :path: ".symlinks/plugins/connectivity/ios"
connectivity_macos: device_info:
:path: ".symlinks/plugins/connectivity_macos/ios" :path: ".symlinks/plugins/device_info/ios"
file_picker: file_picker:
:path: ".symlinks/plugins/file_picker/ios" :path: ".symlinks/plugins/file_picker/ios"
Flutter: Flutter:
@ -139,66 +122,48 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/flutter_file_dialog/ios" :path: ".symlinks/plugins/flutter_file_dialog/ios"
flutter_isolate: flutter_isolate:
:path: ".symlinks/plugins/flutter_isolate/ios" :path: ".symlinks/plugins/flutter_isolate/ios"
flutter_plugin_android_lifecycle:
:path: ".symlinks/plugins/flutter_plugin_android_lifecycle/ios"
fluttertoast: fluttertoast:
:path: ".symlinks/plugins/fluttertoast/ios" :path: ".symlinks/plugins/fluttertoast/ios"
just_audio: just_audio:
:path: ".symlinks/plugins/just_audio/ios" :path: ".symlinks/plugins/just_audio/ios"
path_provider: path_provider:
:path: ".symlinks/plugins/path_provider/ios" :path: ".symlinks/plugins/path_provider/ios"
path_provider_macos:
:path: ".symlinks/plugins/path_provider_macos/ios"
permission_handler: permission_handler:
:path: ".symlinks/plugins/permission_handler/ios" :path: ".symlinks/plugins/permission_handler/ios"
shared_preferences: shared_preferences:
:path: ".symlinks/plugins/shared_preferences/ios" :path: ".symlinks/plugins/shared_preferences/ios"
shared_preferences_macos:
:path: ".symlinks/plugins/shared_preferences_macos/ios"
shared_preferences_web:
:path: ".symlinks/plugins/shared_preferences_web/ios"
sqflite: sqflite:
:path: ".symlinks/plugins/sqflite/ios" :path: ".symlinks/plugins/sqflite/ios"
url_launcher: url_launcher:
:path: ".symlinks/plugins/url_launcher/ios" :path: ".symlinks/plugins/url_launcher/ios"
url_launcher_macos: wc_flutter_share:
:path: ".symlinks/plugins/url_launcher_macos/ios" :path: ".symlinks/plugins/wc_flutter_share/ios"
url_launcher_web:
:path: ".symlinks/plugins/url_launcher_web/ios"
workmanager:
:path: ".symlinks/plugins/workmanager/ios"
SPEC CHECKSUMS: SPEC CHECKSUMS:
audio_service: f509d65da41b9521a61f1c404dd58651f265a567 audio_service: f509d65da41b9521a61f1c404dd58651f265a567
audio_session: 4f3e461722055d21515cf3261b64c973c062f345
connectivity: c4130b2985d4ef6fd26f9702e886bd5260681467 connectivity: c4130b2985d4ef6fd26f9702e886bd5260681467
connectivity_macos: e2e9731b6b22dda39eb1b128f6969d574460e191 device_info: d7d233b645a32c40dfdc212de5cf646ca482f175
DKImagePickerController: 4a3e7948a848c4348e600b3fe5ce41478835fa10 DKImagePickerController: b5eb7f7a388e4643264105d648d01f727110fc3d
DKPhotoGallery: 0290d32343574f06eaa4c26f8f2f8a1035e916be DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179
file_picker: 3e6c3790de664ccf9b882732d9db5eaf6b8d4eb1 file_picker: 3e6c3790de664ccf9b882732d9db5eaf6b8d4eb1
FLAnimatedImage: 4a0b56255d9b05f18b6dd7ee06871be5d3b89e31
Flutter: 0e3d915762c693b495b44d77113d4970485de6ec Flutter: 0e3d915762c693b495b44d77113d4970485de6ec
flutter_downloader: 058b9c41564a90500f67f3e432e3524613a7fd83 flutter_downloader: 058b9c41564a90500f67f3e432e3524613a7fd83
flutter_file_dialog: 34ab8c55c460c69cb70e75a8d74bfe8b5c852824 flutter_file_dialog: 34ab8c55c460c69cb70e75a8d74bfe8b5c852824
flutter_isolate: 0edf5081826d071adf21759d1eb10ff5c24503b5 flutter_isolate: 0edf5081826d071adf21759d1eb10ff5c24503b5
flutter_plugin_android_lifecycle: dc0b544e129eebb77a6bfb1239d4d1c673a60a35
fluttertoast: b644586ef3b16f67fae9a1f8754cef6b2d6b634b fluttertoast: b644586ef3b16f67fae9a1f8754cef6b2d6b634b
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
just_audio: c695d6e7e37f9e96672dd84039d7530e7fd5c205 just_audio: c695d6e7e37f9e96672dd84039d7530e7fd5c205
path_provider: abfe2b5c733d04e238b0d8691db0cfd63a27a93c path_provider: abfe2b5c733d04e238b0d8691db0cfd63a27a93c
path_provider_macos: f760a3c5b04357c380e2fddb6f9db6f3015897e0 permission_handler: eac8e15b4a1a3fba55b761d19f3f4e6b005d15b6
permission_handler: 6226fcb78b97c7c7458a95c7346a11d5184fec12
Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96 Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96
SDWebImage: 48b88379b798fd1e4298f95bb25d2cdabbf4deb3 SDWebImage: b969dcfc02c40a5da71eac0b03b8f1a0c794a86f
SDWebImageFLPlugin: 6c2295fb1242d44467c6c87dc5db6b0a13228fd8
shared_preferences: af6bfa751691cdc24be3045c43ec037377ada40d shared_preferences: af6bfa751691cdc24be3045c43ec037377ada40d
shared_preferences_macos: f3f29b71ccbb56bf40c9dd6396c9acf15e214087 sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904
shared_preferences_web: 141cce0c3ed1a1c5bf2a0e44f52d31eeb66e5ea9 SwiftyGif: e466e86c660d343357ab944a819a101c4127cb40
sqflite: 4001a31ff81d210346b500c55b17f4d6c7589dd0
url_launcher: 6fef411d543ceb26efce54b05a0a40bfd74cbbef url_launcher: 6fef411d543ceb26efce54b05a0a40bfd74cbbef
url_launcher_macos: fd7894421cd39320dce5f292fc99ea9270b2a313 wc_flutter_share: 4f17b4e14f1c34b1427495583af99a21c07fccf7
url_launcher_web: e5527357f037c87560776e36436bf2b0288b965c
workmanager: ffff78bf18495e2bc5b8c955ead94a81db340681
PODFILE CHECKSUM: 7a493bdf8e8fed20acf4793e6605bdc446895cf3 PODFILE CHECKSUM: 5c91de82f174f8b2d99a661163650879bd2a5f0b
COCOAPODS: 1.9.1 COCOAPODS: 1.9.1

View File

@ -11,6 +11,7 @@
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
8CF9779B9A79168FBFA6066E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 06AA1B089A6D985A4089F4BD /* Pods_Runner.framework */; }; 8CF9779B9A79168FBFA6066E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 06AA1B089A6D985A4089F4BD /* Pods_Runner.framework */; };
8EFABE4625ADBC8C0008EA57 /* libsqlite3.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E4DBAFB2467BE8D00105DDB /* libsqlite3.tbd */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
@ -55,6 +56,7 @@
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
8EFABE4625ADBC8C0008EA57 /* libsqlite3.tbd in Frameworks */,
8CF9779B9A79168FBFA6066E /* Pods_Runner.framework in Frameworks */, 8CF9779B9A79168FBFA6066E /* Pods_Runner.framework in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
@ -253,51 +255,51 @@
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh", "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh",
"${BUILT_PRODUCTS_DIR}/DKImagePickerController/DKImagePickerController.framework", "${BUILT_PRODUCTS_DIR}/DKImagePickerController/DKImagePickerController.framework",
"${BUILT_PRODUCTS_DIR}/DKPhotoGallery/DKPhotoGallery.framework", "${BUILT_PRODUCTS_DIR}/DKPhotoGallery/DKPhotoGallery.framework",
"${BUILT_PRODUCTS_DIR}/FLAnimatedImage/FLAnimatedImage.framework",
"${BUILT_PRODUCTS_DIR}/FMDB/FMDB.framework", "${BUILT_PRODUCTS_DIR}/FMDB/FMDB.framework",
"${PODS_ROOT}/../Flutter/Flutter.framework", "${PODS_ROOT}/../Flutter/Flutter.framework",
"${BUILT_PRODUCTS_DIR}/Reachability/Reachability.framework", "${BUILT_PRODUCTS_DIR}/Reachability/Reachability.framework",
"${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework", "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework",
"${BUILT_PRODUCTS_DIR}/SDWebImageFLPlugin/SDWebImageFLPlugin.framework", "${BUILT_PRODUCTS_DIR}/SwiftyGif/SwiftyGif.framework",
"${BUILT_PRODUCTS_DIR}/audio_service/audio_service.framework", "${BUILT_PRODUCTS_DIR}/audio_service/audio_service.framework",
"${BUILT_PRODUCTS_DIR}/audio_session/audio_session.framework",
"${BUILT_PRODUCTS_DIR}/connectivity/connectivity.framework", "${BUILT_PRODUCTS_DIR}/connectivity/connectivity.framework",
"${BUILT_PRODUCTS_DIR}/device_info/device_info.framework",
"${BUILT_PRODUCTS_DIR}/file_picker/file_picker.framework", "${BUILT_PRODUCTS_DIR}/file_picker/file_picker.framework",
"${BUILT_PRODUCTS_DIR}/flutter_downloader/flutter_downloader.framework", "${BUILT_PRODUCTS_DIR}/flutter_downloader/flutter_downloader.framework",
"${BUILT_PRODUCTS_DIR}/flutter_file_dialog/flutter_file_dialog.framework", "${BUILT_PRODUCTS_DIR}/flutter_file_dialog/flutter_file_dialog.framework",
"${BUILT_PRODUCTS_DIR}/flutter_isolate/flutter_isolate.framework", "${BUILT_PRODUCTS_DIR}/flutter_isolate/flutter_isolate.framework",
"${BUILT_PRODUCTS_DIR}/flutter_plugin_android_lifecycle/flutter_plugin_android_lifecycle.framework",
"${BUILT_PRODUCTS_DIR}/fluttertoast/fluttertoast.framework", "${BUILT_PRODUCTS_DIR}/fluttertoast/fluttertoast.framework",
"${BUILT_PRODUCTS_DIR}/just_audio/just_audio.framework", "${BUILT_PRODUCTS_DIR}/just_audio/just_audio.framework",
"${BUILT_PRODUCTS_DIR}/path_provider/path_provider.framework", "${BUILT_PRODUCTS_DIR}/path_provider/path_provider.framework",
"${BUILT_PRODUCTS_DIR}/shared_preferences/shared_preferences.framework", "${BUILT_PRODUCTS_DIR}/shared_preferences/shared_preferences.framework",
"${BUILT_PRODUCTS_DIR}/sqflite/sqflite.framework", "${BUILT_PRODUCTS_DIR}/sqflite/sqflite.framework",
"${BUILT_PRODUCTS_DIR}/url_launcher/url_launcher.framework", "${BUILT_PRODUCTS_DIR}/url_launcher/url_launcher.framework",
"${BUILT_PRODUCTS_DIR}/workmanager/workmanager.framework", "${BUILT_PRODUCTS_DIR}/wc_flutter_share/wc_flutter_share.framework",
); );
name = "[CP] Embed Pods Frameworks"; name = "[CP] Embed Pods Frameworks";
outputPaths = ( outputPaths = (
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DKImagePickerController.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DKImagePickerController.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DKPhotoGallery.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DKPhotoGallery.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FLAnimatedImage.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FMDB.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FMDB.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Flutter.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Flutter.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Reachability.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Reachability.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImageFLPlugin.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyGif.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/audio_service.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/audio_service.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/audio_session.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/connectivity.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/connectivity.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/device_info.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/file_picker.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/file_picker.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_downloader.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_downloader.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_file_dialog.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_file_dialog.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_isolate.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_isolate.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_plugin_android_lifecycle.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/fluttertoast.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/fluttertoast.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/just_audio.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/just_audio.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/path_provider.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/path_provider.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/shared_preferences.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/shared_preferences.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/sqflite.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/sqflite.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/url_launcher.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/url_launcher.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/workmanager.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/wc_flutter_share.framework",
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh; shellPath = /bin/sh;
@ -354,7 +356,6 @@
/* Begin XCBuildConfiguration section */ /* Begin XCBuildConfiguration section */
249021D3217E4FDB00AE95B9 /* Profile */ = { 249021D3217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NONNULL = YES;
@ -394,7 +395,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0; IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = NO; MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos; SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos; SUPPORTED_PLATFORMS = iphoneos;
@ -435,7 +436,6 @@
}; };
97C147031CF9000F007C117D /* Debug */ = { 97C147031CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NONNULL = YES;
@ -481,7 +481,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0; IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = YES; MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES; ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos; SDKROOT = iphoneos;
@ -491,7 +491,6 @@
}; };
97C147041CF9000F007C117D /* Release */ = { 97C147041CF9000F007C117D /* Release */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NONNULL = YES;
@ -531,7 +530,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0; IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = NO; MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos; SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos; SUPPORTED_PLATFORMS = iphoneos;

View File

@ -17,7 +17,7 @@ import flutter_downloader
private func registerPlugins(registry: FlutterPluginRegistry) { private func registerPlugins(registry: FlutterPluginRegistry) {
if (!registry.hasPlugin("FlutterDownloaderPlugin")) { if (!registry.hasPlugin("FlutterDownloaderPlugin")) {
FlutterDownloaderPlugin.register(with: registry.registrar(forPlugin: "FlutterDownloaderPlugin")) FlutterDownloaderPlugin.register(with: registry.registrar(forPlugin: "FlutterDownloaderPlugin")!)
} }
} }

View File

@ -1,8 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r"> <document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="17701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
<device id="retina6_1" orientation="portrait" appearance="light"/>
<dependencies> <dependencies>
<deployment identifier="iOS"/> <deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="17703"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies> </dependencies>
<scenes> <scenes>
<!--Flutter View Controller--> <!--Flutter View Controller-->
@ -14,13 +16,14 @@
<viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/> <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
</layoutGuides> </layoutGuides>
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC"> <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/> <rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</view> </view>
</viewController> </viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/> <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects> </objects>
<point key="canvasLocation" x="131" y="-21"/>
</scene> </scene>
</scenes> </scenes>
</document> </document>

View File

@ -1,58 +1,60 @@
<?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"> <plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
<string>Tsacdop</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>tsacdop_player</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>$(FLUTTER_BUILD_NAME)</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>$(FLUTTER_BUILD_NUMBER)</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSAppTransportSecurity</key>
<dict> <dict>
<key>CFBundleDevelopmentRegion</key> <key>NSAllowsArbitraryLoads</key>
<string>$(DEVELOPMENT_LANGUAGE)</string> <true/>
<key>CFBundleExecutable</key> <key>NSAllowsArbitraryLoadsForMedia</key>
<string>$(EXECUTABLE_NAME)</string> <true/>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>tsacdop_player</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>$(FLUTTER_BUILD_NAME)</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>$(FLUTTER_BUILD_NUMBER)</string>
<key>LSRequiresIPhoneOS</key>
<true />
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true />
<key>NSAllowsArbitraryLoadsForMedia</key>
<true />
</dict>
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
<string>fetch</string>
<string>remote-notification</string>
</array>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false />
</dict> </dict>
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
<string>fetch</string>
<string>remote-notification</string>
</array>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
</dict>
</plist> </plist>

View File

@ -173,55 +173,74 @@ class _EpisodeDetailState extends State<EpisodeDetail> {
// ), // ),
//], //],
), ),
body: Stack( body: SafeArea(
children: <Widget>[ child: Stack(
Container( children: <Widget>[
color: context.primaryColor, Container(
child: SingleChildScrollView( color: context.primaryColor,
scrollDirection: Axis.vertical, child: SingleChildScrollView(
controller: _controller, scrollDirection: Axis.vertical,
child: Column( controller: _controller,
crossAxisAlignment: CrossAxisAlignment.start, child: Column(
children: [ crossAxisAlignment: CrossAxisAlignment.start,
Padding( children: [
padding: EdgeInsets.symmetric(horizontal: 20.0), Padding(
child: Align( padding: EdgeInsets.symmetric(horizontal: 20.0),
alignment: Alignment.centerLeft, child: Align(
child: Text( alignment: Alignment.centerLeft,
widget.episodeItem.title, child: Text(
textAlign: TextAlign.left, widget.episodeItem.title,
style: Theme.of(context).textTheme.headline5, textAlign: TextAlign.left,
style: Theme.of(context).textTheme.headline5,
),
), ),
), ),
), Padding(
Padding( padding: EdgeInsets.fromLTRB(20, 10, 20, 10),
padding: EdgeInsets.fromLTRB(20, 10, 20, 10), child: Row(
child: Row( children: [
children: [ Text(
Text( s.published(DateFormat.yMMMd().format(
s.published(DateFormat.yMMMd().format( DateTime.fromMillisecondsSinceEpoch(
DateTime.fromMillisecondsSinceEpoch( widget.episodeItem.pubDate))),
widget.episodeItem.pubDate))), style: TextStyle(color: context.accentColor)),
style: TextStyle(color: context.accentColor)), SizedBox(width: 10),
SizedBox(width: 10), if (widget.episodeItem.explicit == 1)
if (widget.episodeItem.explicit == 1) Text('E',
Text('E', style: TextStyle(
style: TextStyle( fontWeight: FontWeight.bold,
fontWeight: FontWeight.bold, color: Colors.red)),
color: Colors.red)), Spacer(),
Spacer(), ],
], ),
), ),
), Padding(
Padding( padding:
padding: EdgeInsets.symmetric(horizontal: 20, vertical: 5),
EdgeInsets.symmetric(horizontal: 20, vertical: 5), child: Row(
child: Row( children: <Widget>[
children: <Widget>[ if (widget.episodeItem.duration != 0)
if (widget.episodeItem.duration != 0) Container(
Container( decoration: BoxDecoration(
color: Colors.cyan[300],
borderRadius: BorderRadius.all(
Radius.circular(16.0))),
height: 28.0,
margin: EdgeInsets.only(right: 10.0),
padding:
EdgeInsets.symmetric(horizontal: 10.0),
alignment: Alignment.center,
child: Text(
s.minsCount(
widget.episodeItem.duration ~/ 60,
),
style: TextStyle(color: Colors.black),
)),
if (widget.episodeItem.enclosureLength != null &&
widget.episodeItem.enclosureLength != 0)
Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.cyan[300], color: Colors.lightBlue[300],
borderRadius: BorderRadius.all( borderRadius: BorderRadius.all(
Radius.circular(16.0))), Radius.circular(16.0))),
height: 28.0, height: 28.0,
@ -230,123 +249,109 @@ class _EpisodeDetailState extends State<EpisodeDetail> {
EdgeInsets.symmetric(horizontal: 10.0), EdgeInsets.symmetric(horizontal: 10.0),
alignment: Alignment.center, alignment: Alignment.center,
child: Text( child: Text(
s.minsCount( '${(widget.episodeItem.enclosureLength) ~/ 1000000}MB',
widget.episodeItem.duration ~/ 60,
),
style: TextStyle(color: Colors.black), style: TextStyle(color: Colors.black),
)), ),
if (widget.episodeItem.enclosureLength != null &&
widget.episodeItem.enclosureLength != 0)
Container(
decoration: BoxDecoration(
color: Colors.lightBlue[300],
borderRadius: BorderRadius.all(
Radius.circular(16.0))),
height: 28.0,
margin: EdgeInsets.only(right: 10.0),
padding: EdgeInsets.symmetric(horizontal: 10.0),
alignment: Alignment.center,
child: Text(
'${(widget.episodeItem.enclosureLength) ~/ 1000000}MB',
style: TextStyle(color: Colors.black),
), ),
), FutureBuilder<PlayHistory>(
FutureBuilder<PlayHistory>( future: _getPosition(widget.episodeItem),
future: _getPosition(widget.episodeItem), builder: (context, snapshot) {
builder: (context, snapshot) { if (snapshot.hasError) {
if (snapshot.hasError) { developer.log(snapshot.error);
developer.log(snapshot.error); }
} if (snapshot.hasData &&
if (snapshot.hasData && snapshot.data.seekValue < 0.9 &&
snapshot.data.seekValue < 0.9 && snapshot.data.seconds > 10) {
snapshot.data.seconds > 10) { return ButtonTheme(
return ButtonTheme( height: 28,
height: 28, padding:
padding: EdgeInsets.symmetric(horizontal: 0),
EdgeInsets.symmetric(horizontal: 0), child: OutlineButton(
child: OutlineButton( shape: RoundedRectangleBorder(
shape: RoundedRectangleBorder( borderRadius:
borderRadius: BorderRadius.circular(100.0),
BorderRadius.circular(100.0), side: BorderSide(
side: BorderSide( color: context.accentColor)),
color: context.accentColor)), highlightedBorderColor:
highlightedBorderColor: Colors.green[700],
Colors.green[700], onPressed: () => audio.episodeLoad(
onPressed: () => audio.episodeLoad( widget.episodeItem,
widget.episodeItem, startPosition:
startPosition: (snapshot.data.seconds * 1000)
(snapshot.data.seconds * 1000) .toInt()),
.toInt()), child: Row(
child: Row( children: [
children: [ SizedBox(
SizedBox( width: 20,
width: 20, height: 20,
height: 20, child: CustomPaint(
child: CustomPaint( painter: ListenedPainter(
painter: ListenedPainter( context.textColor,
context.textColor, stroke: 2.0),
stroke: 2.0), ),
), ),
), SizedBox(width: 5),
SizedBox(width: 5), Text(
Text( snapshot.data.seconds.toTime,
snapshot.data.seconds.toTime, style: TextStyle(
style: TextStyle( color: Colors.black),
color: Colors.black), ),
), ],
], ),
), ),
), );
); } else {
} else { return Center();
return Center(); }
} }),
}), ],
], ),
), ),
), _ShowNote(episode: widget.episodeItem),
_ShowNote(episode: widget.episodeItem), Selector<AudioPlayerNotifier,
Selector<AudioPlayerNotifier, Tuple2<bool, PlayerHeight>>( Tuple2<bool, PlayerHeight>>(
selector: (_, audio) => selector: (_, audio) =>
Tuple2(audio.playerRunning, audio.playerHeight), Tuple2(audio.playerRunning, audio.playerHeight),
builder: (_, data, __) { builder: (_, data, __) {
var height = kMinPlayerHeight[data.item2.index]; var height = kMinPlayerHeight[data.item2.index];
return SizedBox( return SizedBox(
height: data.item1 ? height : 0, height: data.item1 ? height : 0,
); );
}), }),
], ],
),
), ),
), ),
), Selector<AudioPlayerNotifier, Tuple2<bool, PlayerHeight>>(
Selector<AudioPlayerNotifier, Tuple2<bool, PlayerHeight>>( selector: (_, audio) =>
selector: (_, audio) => Tuple2(audio.playerRunning, audio.playerHeight),
Tuple2(audio.playerRunning, audio.playerHeight), builder: (_, data, __) {
builder: (_, data, __) { var height = kMinPlayerHeight[data.item2.index];
var height = kMinPlayerHeight[data.item2.index]; return Container(
return Container( alignment: Alignment.bottomCenter,
alignment: Alignment.bottomCenter, padding:
padding: EdgeInsets.only(bottom: data.item1 ? height : 0), EdgeInsets.only(bottom: data.item1 ? height : 0),
child: AnimatedContainer( child: AnimatedContainer(
duration: Duration(milliseconds: 400), duration: Duration(milliseconds: 400),
height: _showMenu ? 50 : 0, height: _showMenu ? 50 : 0,
child: SingleChildScrollView( child: SingleChildScrollView(
scrollDirection: Axis.vertical, scrollDirection: Axis.vertical,
child: _MenuBar( child: _MenuBar(
episodeItem: widget.episodeItem, episodeItem: widget.episodeItem,
heroTag: widget.heroTag, heroTag: widget.heroTag,
hide: widget.hide), hide: widget.hide),
),
), ),
), );
); }),
}), Selector<AudioPlayerNotifier, EpisodeBrief>(
Selector<AudioPlayerNotifier, EpisodeBrief>( selector: (_, audio) => audio.episode,
selector: (_, audio) => audio.episode, builder: (_, data, __) => Container(
builder: (_, data, __) => Container( child: PlayerWidget(
child: PlayerWidget( playerKey: _playerKey,
playerKey: _playerKey, isPlayingPage: data == widget.episodeItem))),
isPlayingPage: data == widget.episodeItem))), ],
], ),
), ),
), ),
), ),

View File

@ -1,6 +1,3 @@
import 'dart:io';
import 'dart:math' as math;
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';

View File

@ -16,6 +16,7 @@ import 'package:path_provider/path_provider.dart';
import 'package:uuid/uuid.dart'; import 'package:uuid/uuid.dart';
import 'package:webfeed/webfeed.dart'; import 'package:webfeed/webfeed.dart';
import 'package:workmanager/workmanager.dart'; import 'package:workmanager/workmanager.dart';
import 'package:path/path.dart' as path;
import '../local_storage/key_value_storage.dart'; import '../local_storage/key_value_storage.dart';
import '../local_storage/sqflite_localpodcast.dart'; import '../local_storage/sqflite_localpodcast.dart';
@ -655,11 +656,14 @@ Future<void> subIsolateEntryPoint(SendPort sendPort) async {
} }
} }
var uuid = Uuid().v4(); var uuid = Uuid().v4();
File("${dir.path}/$uuid.png") var imagePath = path.join(dir.path, 'uuid.png');
..writeAsBytesSync(img.encodePng(thumbnail)); try {
File(imagePath).writeAsBytesSync(img.encodePng(thumbnail));
var imagePath = "${dir.path}/$uuid.png"; } catch (e) {
var primaryColor = await _getColor(File("${dir.path}/$uuid.png")); print(e);
}
//var imagePath = "${dir.path}/$uuid.png";
var primaryColor = await _getColor(File(imagePath));
var author = p.itunes.author ?? p.author ?? ''; var author = p.itunes.author ?? p.author ?? '';
var provider = p.generator ?? ''; var provider = p.generator ?? '';
var link = p.link ?? ''; var link = p.link ?? '';

View File

@ -18,7 +18,6 @@ import '../type/settings_backup.dart';
import 'download_state.dart'; import 'download_state.dart';
void callbackDispatcher() { void callbackDispatcher() {
if (Platform.isAndroid) {
Workmanager.executeTask((task, inputData) async { Workmanager.executeTask((task, inputData) async {
var dbHelper = DBHelper(); var dbHelper = DBHelper();
var podcastList = await dbHelper.getPodcastLocalAll(updateOnly: true); var podcastList = await dbHelper.getPodcastLocalAll(updateOnly: true);
@ -56,7 +55,6 @@ void callbackDispatcher() {
await refreshstorage.saveInt(DateTime.now().millisecondsSinceEpoch); await refreshstorage.saveInt(DateTime.now().millisecondsSinceEpoch);
return Future.value(true); return Future.value(true);
}); });
}
} }
final showNotesFontStyles = <TextStyle>[ final showNotesFontStyles = <TextStyle>[
@ -192,12 +190,14 @@ class SettingState extends ChangeNotifier {
callbackDispatcher, callbackDispatcher,
isInDebugMode: false, isInDebugMode: false,
); );
Workmanager.registerPeriodicTask("1", "update_podcasts", if (Platform.isAndroid) {
frequency: Duration(hours: hour), Workmanager.registerPeriodicTask("1", "update_podcasts",
initialDelay: Duration(seconds: 10), frequency: Duration(hours: hour),
constraints: Constraints( initialDelay: Duration(seconds: 10),
networkType: NetworkType.connected, constraints: Constraints(
)); networkType: NetworkType.connected,
));
}
developer.log('work manager init done + '); developer.log('work manager init done + ');
} }