mirror of
https://github.com/dstark5/Openlib.git
synced 2025-09-18 20:54:10 +08:00
Compare commits
12 Commits
v1.0.7-bet
...
v1.0.10-be
Author | SHA1 | Date | |
---|---|---|---|
659b3426e8 | |||
7b6394f6ad | |||
2df0d1f655 | |||
18723e1d78 | |||
7316c64685 | |||
43aba47453 | |||
e79042ebc1 | |||
1e84848d39 | |||
78a50e28ff | |||
fda962a46f | |||
a7ca206b10 | |||
6be9927b26 |
@ -1,75 +1,49 @@
|
|||||||
def localProperties = new Properties()
|
plugins {
|
||||||
def localPropertiesFile = rootProject.file('local.properties')
|
id "com.android.application"
|
||||||
if (localPropertiesFile.exists()) {
|
id "kotlin-android"
|
||||||
localPropertiesFile.withReader('UTF-8') { reader ->
|
// The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
|
||||||
localProperties.load(reader)
|
id "dev.flutter.flutter-gradle-plugin"
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def flutterRoot = localProperties.getProperty('flutter.sdk')
|
|
||||||
if (flutterRoot == null) {
|
|
||||||
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
|
|
||||||
}
|
|
||||||
|
|
||||||
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
|
|
||||||
if (flutterVersionCode == null) {
|
|
||||||
flutterVersionCode = '1'
|
|
||||||
}
|
|
||||||
|
|
||||||
def flutterVersionName = localProperties.getProperty('flutter.versionName')
|
|
||||||
if (flutterVersionName == null) {
|
|
||||||
flutterVersionName = '1.0'
|
|
||||||
}
|
|
||||||
|
|
||||||
apply plugin: 'com.android.application'
|
|
||||||
apply plugin: 'kotlin-android'
|
|
||||||
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
|
|
||||||
|
|
||||||
|
|
||||||
def keystoreProperties = new Properties()
|
def keystoreProperties = new Properties()
|
||||||
def keystorePropertiesFile = rootProject.file('key.properties')
|
def keystorePropertiesFile = rootProject.file('key.properties')
|
||||||
if (keystorePropertiesFile.exists()) {
|
if (keystorePropertiesFile.exists()) {
|
||||||
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
|
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
android {
|
android {
|
||||||
namespace "com.app.openlib"
|
namespace = "com.app.openlib"
|
||||||
compileSdkVersion flutter.compileSdkVersion
|
compileSdk = flutter.compileSdkVersion
|
||||||
ndkVersion flutter.ndkVersion
|
ndkVersion = flutter.ndkVersion
|
||||||
|
|
||||||
compileOptions {
|
compileOptions {
|
||||||
sourceCompatibility JavaVersion.VERSION_1_8
|
sourceCompatibility = JavaVersion.VERSION_17
|
||||||
targetCompatibility JavaVersion.VERSION_1_8
|
targetCompatibility = JavaVersion.VERSION_17
|
||||||
}
|
}
|
||||||
|
|
||||||
kotlinOptions {
|
kotlinOptions {
|
||||||
jvmTarget = '1.8'
|
jvmTarget = JavaVersion.VERSION_17
|
||||||
}
|
|
||||||
|
|
||||||
sourceSets {
|
|
||||||
main.java.srcDirs += 'src/main/kotlin'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
|
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
|
||||||
applicationId "com.app.openlib"
|
applicationId = "com.app.openlib"
|
||||||
// You can update the following values to match your application needs.
|
// You can update the following values to match your application needs.
|
||||||
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
|
// For more information, see: https://flutter.dev/to/review-gradle-config.
|
||||||
minSdkVersion localProperties.getProperty('flutter.minSdkVersion').toInteger()
|
minSdk = flutter.minSdkVersion
|
||||||
targetSdkVersion flutter.targetSdkVersion
|
targetSdk = flutter.targetSdkVersion
|
||||||
versionCode flutterVersionCode.toInteger()
|
versionCode = flutter.versionCode
|
||||||
versionName flutterVersionName
|
versionName = flutter.versionName
|
||||||
}
|
}
|
||||||
|
|
||||||
signingConfigs {
|
signingConfigs {
|
||||||
release {
|
release {
|
||||||
keyAlias keystoreProperties['keyAlias']
|
keyAlias = keystoreProperties['keyAlias']
|
||||||
keyPassword keystoreProperties['keyPassword']
|
keyPassword = keystoreProperties['keyPassword']
|
||||||
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
|
storeFile = keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
|
||||||
storePassword keystoreProperties['storePassword']
|
storePassword = keystoreProperties['storePassword']
|
||||||
v1SigningEnabled true
|
v1SigningEnabled = true
|
||||||
v2SigningEnabled true
|
v2SigningEnabled = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -77,18 +51,13 @@ android {
|
|||||||
release {
|
release {
|
||||||
// TODO: Add your own signing config for the release build.
|
// TODO: Add your own signing config for the release build.
|
||||||
// Signing with the debug keys for now, so `flutter run --release` works.
|
// Signing with the debug keys for now, so `flutter run --release` works.
|
||||||
// replace with "debug" when running on debug version
|
signingConfig = signingConfigs.release
|
||||||
signingConfig signingConfigs.release
|
minifyEnabled = false
|
||||||
minifyEnabled false
|
shrinkResources = false
|
||||||
shrinkResources false
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
flutter {
|
flutter {
|
||||||
source '../..'
|
source = "../.."
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
|
||||||
}
|
}
|
@ -1,16 +1,3 @@
|
|||||||
buildscript {
|
|
||||||
ext.kotlin_version = '1.7.10'
|
|
||||||
repositories {
|
|
||||||
google()
|
|
||||||
mavenCentral()
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
classpath 'com.android.tools.build:gradle:7.3.0'
|
|
||||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
allprojects {
|
allprojects {
|
||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
@ -18,14 +5,14 @@ allprojects {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rootProject.buildDir = '../build'
|
rootProject.buildDir = "../build"
|
||||||
subprojects {
|
subprojects {
|
||||||
project.buildDir = "${rootProject.buildDir}/${project.name}"
|
project.buildDir = "${rootProject.buildDir}/${project.name}"
|
||||||
}
|
}
|
||||||
subprojects {
|
subprojects {
|
||||||
project.evaluationDependsOn(':app')
|
project.evaluationDependsOn(":app")
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.register("clean", Delete) {
|
tasks.register("clean", Delete) {
|
||||||
delete rootProject.buildDir
|
delete rootProject.buildDir
|
||||||
}
|
}
|
@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
|
|||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-all.zip
|
@ -1,11 +1,25 @@
|
|||||||
include ':app'
|
pluginManagement {
|
||||||
|
def flutterSdkPath = {
|
||||||
|
def properties = new Properties()
|
||||||
|
file("local.properties").withInputStream { properties.load(it) }
|
||||||
|
def flutterSdkPath = properties.getProperty("flutter.sdk")
|
||||||
|
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
|
||||||
|
return flutterSdkPath
|
||||||
|
}()
|
||||||
|
|
||||||
def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
|
includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")
|
||||||
def properties = new Properties()
|
|
||||||
|
|
||||||
assert localPropertiesFile.exists()
|
repositories {
|
||||||
localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
|
google()
|
||||||
|
mavenCentral()
|
||||||
|
gradlePluginPortal()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
def flutterSdkPath = properties.getProperty("flutter.sdk")
|
plugins {
|
||||||
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
|
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
|
||||||
apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
|
id "com.android.application" version "8.0.0" apply false
|
||||||
|
id "org.jetbrains.kotlin.android" version "1.8.0" apply false
|
||||||
|
}
|
||||||
|
|
||||||
|
include ":app"
|
@ -21,6 +21,6 @@
|
|||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>1.0</string>
|
<string>1.0</string>
|
||||||
<key>MinimumOSVersion</key>
|
<key>MinimumOSVersion</key>
|
||||||
<string>11.0</string>
|
<string>12.0</string>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# Uncomment this line to define a global platform for your project
|
# Uncomment this line to define a global platform for your project
|
||||||
# platform :ios, '12.0'
|
platform :ios, '17.5'
|
||||||
|
|
||||||
# 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'
|
||||||
|
@ -8,12 +8,14 @@
|
|||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
|
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
|
||||||
|
331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; };
|
||||||
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 */; };
|
||||||
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 */; };
|
||||||
331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; };
|
99F2EC05C18FD14DB9B78A3C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92BCBB6C991B9E7E482BC7E7 /* Pods_RunnerTests.framework */; };
|
||||||
|
F7A920F49894E8110281C91E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9508DF1D557B53054087AA54 /* Pods_Runner.framework */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXContainerItemProxy section */
|
/* Begin PBXContainerItemProxy section */
|
||||||
@ -40,12 +42,20 @@
|
|||||||
/* End PBXCopyFilesBuildPhase section */
|
/* End PBXCopyFilesBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
|
04DC994617040B23FC529786 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
|
||||||
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
|
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
|
||||||
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
|
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
|
||||||
|
174C5E8BD4E5C1060E857A18 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = "<group>"; };
|
||||||
|
331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = "<group>"; };
|
||||||
|
331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
|
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
|
||||||
|
4CDDAA3FD6EA8176EA604F15 /* 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 = "<group>"; };
|
||||||
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
|
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
|
||||||
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||||
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
|
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
|
||||||
|
92BCBB6C991B9E7E482BC7E7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
9427EBEA20C8F5217BB45B75 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = "<group>"; };
|
||||||
|
9508DF1D557B53054087AA54 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
|
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
|
||||||
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
|
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
|
||||||
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
@ -53,21 +63,47 @@
|
|||||||
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||||
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
||||||
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = "<group>"; };
|
A9A04AD6D8CB2C21763ACD37 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = "<group>"; };
|
||||||
331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
AD0519E0F1BE5DC9B0769918 /* 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 = "<group>"; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
|
880098128544877A82294A2B /* Frameworks */ = {
|
||||||
|
isa = PBXFrameworksBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
99F2EC05C18FD14DB9B78A3C /* Pods_RunnerTests.framework in Frameworks */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
97C146EB1CF9000F007C117D /* Frameworks */ = {
|
97C146EB1CF9000F007C117D /* Frameworks */ = {
|
||||||
isa = PBXFrameworksBuildPhase;
|
isa = PBXFrameworksBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
F7A920F49894E8110281C91E /* Pods_Runner.framework in Frameworks */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
/* End PBXFrameworksBuildPhase section */
|
/* End PBXFrameworksBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXGroup section */
|
/* Begin PBXGroup section */
|
||||||
|
331C8082294A63A400263BE5 /* RunnerTests */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
331C807B294A618700263BE5 /* RunnerTests.swift */,
|
||||||
|
);
|
||||||
|
path = RunnerTests;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
38B0FC331CEB9CEE8EE8FB26 /* Frameworks */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
9508DF1D557B53054087AA54 /* Pods_Runner.framework */,
|
||||||
|
92BCBB6C991B9E7E482BC7E7 /* Pods_RunnerTests.framework */,
|
||||||
|
);
|
||||||
|
name = Frameworks;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
9740EEB11CF90186004384FC /* Flutter */ = {
|
9740EEB11CF90186004384FC /* Flutter */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
@ -79,14 +115,6 @@
|
|||||||
name = Flutter;
|
name = Flutter;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
331C8082294A63A400263BE5 /* RunnerTests */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
331C807B294A618700263BE5 /* RunnerTests.swift */,
|
|
||||||
);
|
|
||||||
path = RunnerTests;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
97C146E51CF9000F007C117D = {
|
97C146E51CF9000F007C117D = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
@ -94,6 +122,8 @@
|
|||||||
97C146F01CF9000F007C117D /* Runner */,
|
97C146F01CF9000F007C117D /* Runner */,
|
||||||
97C146EF1CF9000F007C117D /* Products */,
|
97C146EF1CF9000F007C117D /* Products */,
|
||||||
331C8082294A63A400263BE5 /* RunnerTests */,
|
331C8082294A63A400263BE5 /* RunnerTests */,
|
||||||
|
FFF5F42F3FF5E81E78DBDB29 /* Pods */,
|
||||||
|
38B0FC331CEB9CEE8EE8FB26 /* Frameworks */,
|
||||||
);
|
);
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
@ -121,6 +151,20 @@
|
|||||||
path = Runner;
|
path = Runner;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
FFF5F42F3FF5E81E78DBDB29 /* Pods */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
4CDDAA3FD6EA8176EA604F15 /* Pods-Runner.debug.xcconfig */,
|
||||||
|
AD0519E0F1BE5DC9B0769918 /* Pods-Runner.release.xcconfig */,
|
||||||
|
04DC994617040B23FC529786 /* Pods-Runner.profile.xcconfig */,
|
||||||
|
174C5E8BD4E5C1060E857A18 /* Pods-RunnerTests.debug.xcconfig */,
|
||||||
|
A9A04AD6D8CB2C21763ACD37 /* Pods-RunnerTests.release.xcconfig */,
|
||||||
|
9427EBEA20C8F5217BB45B75 /* Pods-RunnerTests.profile.xcconfig */,
|
||||||
|
);
|
||||||
|
name = Pods;
|
||||||
|
path = Pods;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
/* End PBXGroup section */
|
/* End PBXGroup section */
|
||||||
|
|
||||||
/* Begin PBXNativeTarget section */
|
/* Begin PBXNativeTarget section */
|
||||||
@ -128,9 +172,10 @@
|
|||||||
isa = PBXNativeTarget;
|
isa = PBXNativeTarget;
|
||||||
buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
|
buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
|
||||||
buildPhases = (
|
buildPhases = (
|
||||||
|
49BEA72170219CCC4D9C1F17 /* [CP] Check Pods Manifest.lock */,
|
||||||
331C807D294A63A400263BE5 /* Sources */,
|
331C807D294A63A400263BE5 /* Sources */,
|
||||||
331C807E294A63A400263BE5 /* Frameworks */,
|
|
||||||
331C807F294A63A400263BE5 /* Resources */,
|
331C807F294A63A400263BE5 /* Resources */,
|
||||||
|
880098128544877A82294A2B /* Frameworks */,
|
||||||
);
|
);
|
||||||
buildRules = (
|
buildRules = (
|
||||||
);
|
);
|
||||||
@ -146,12 +191,15 @@
|
|||||||
isa = PBXNativeTarget;
|
isa = PBXNativeTarget;
|
||||||
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
|
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
|
||||||
buildPhases = (
|
buildPhases = (
|
||||||
|
A43F89B6CC892B4CB7855C7C /* [CP] Check Pods Manifest.lock */,
|
||||||
9740EEB61CF901F6004384FC /* Run Script */,
|
9740EEB61CF901F6004384FC /* Run Script */,
|
||||||
97C146EA1CF9000F007C117D /* Sources */,
|
97C146EA1CF9000F007C117D /* Sources */,
|
||||||
97C146EB1CF9000F007C117D /* Frameworks */,
|
97C146EB1CF9000F007C117D /* Frameworks */,
|
||||||
97C146EC1CF9000F007C117D /* Resources */,
|
97C146EC1CF9000F007C117D /* Resources */,
|
||||||
9705A1C41CF9048500538489 /* Embed Frameworks */,
|
9705A1C41CF9048500538489 /* Embed Frameworks */,
|
||||||
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
|
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
|
||||||
|
3EF15D019E8D6678261BD001 /* [CP] Embed Pods Frameworks */,
|
||||||
|
A2C021D5FEBCC83DD3A3B38A /* [CP] Copy Pods Resources */,
|
||||||
);
|
);
|
||||||
buildRules = (
|
buildRules = (
|
||||||
);
|
);
|
||||||
@ -168,7 +216,7 @@
|
|||||||
97C146E61CF9000F007C117D /* Project object */ = {
|
97C146E61CF9000F007C117D /* Project object */ = {
|
||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
LastUpgradeCheck = 1300;
|
LastUpgradeCheck = 1510;
|
||||||
ORGANIZATIONNAME = "";
|
ORGANIZATIONNAME = "";
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
331C8080294A63A400263BE5 = {
|
331C8080294A63A400263BE5 = {
|
||||||
@ -238,6 +286,45 @@
|
|||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
|
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
|
||||||
};
|
};
|
||||||
|
3EF15D019E8D6678261BD001 /* [CP] Embed Pods Frameworks */ = {
|
||||||
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
inputFileListPaths = (
|
||||||
|
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
|
||||||
|
);
|
||||||
|
name = "[CP] Embed Pods Frameworks";
|
||||||
|
outputFileListPaths = (
|
||||||
|
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
shellPath = /bin/sh;
|
||||||
|
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
|
||||||
|
showEnvVarsInLog = 0;
|
||||||
|
};
|
||||||
|
49BEA72170219CCC4D9C1F17 /* [CP] Check Pods Manifest.lock */ = {
|
||||||
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
inputFileListPaths = (
|
||||||
|
);
|
||||||
|
inputPaths = (
|
||||||
|
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
|
||||||
|
"${PODS_ROOT}/Manifest.lock",
|
||||||
|
);
|
||||||
|
name = "[CP] Check Pods Manifest.lock";
|
||||||
|
outputFileListPaths = (
|
||||||
|
);
|
||||||
|
outputPaths = (
|
||||||
|
"$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt",
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
shellPath = /bin/sh;
|
||||||
|
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
|
||||||
|
showEnvVarsInLog = 0;
|
||||||
|
};
|
||||||
9740EEB61CF901F6004384FC /* Run Script */ = {
|
9740EEB61CF901F6004384FC /* Run Script */ = {
|
||||||
isa = PBXShellScriptBuildPhase;
|
isa = PBXShellScriptBuildPhase;
|
||||||
alwaysOutOfDate = 1;
|
alwaysOutOfDate = 1;
|
||||||
@ -253,6 +340,45 @@
|
|||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
|
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
|
||||||
};
|
};
|
||||||
|
A2C021D5FEBCC83DD3A3B38A /* [CP] Copy Pods Resources */ = {
|
||||||
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
inputFileListPaths = (
|
||||||
|
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
|
||||||
|
);
|
||||||
|
name = "[CP] Copy Pods Resources";
|
||||||
|
outputFileListPaths = (
|
||||||
|
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
shellPath = /bin/sh;
|
||||||
|
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
|
||||||
|
showEnvVarsInLog = 0;
|
||||||
|
};
|
||||||
|
A43F89B6CC892B4CB7855C7C /* [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 */
|
/* End PBXShellScriptBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXSourcesBuildPhase section */
|
/* Begin PBXSourcesBuildPhase section */
|
||||||
@ -344,7 +470,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 = 11.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
SUPPORTED_PLATFORMS = iphoneos;
|
SUPPORTED_PLATFORMS = iphoneos;
|
||||||
@ -376,7 +502,7 @@
|
|||||||
};
|
};
|
||||||
331C8088294A63A400263BE5 /* Debug */ = {
|
331C8088294A63A400263BE5 /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
baseConfigurationReference = AE0B7B92F70575B8D7E0D07E /* Pods-RunnerTests.debug.xcconfig */;
|
baseConfigurationReference = 174C5E8BD4E5C1060E857A18 /* Pods-RunnerTests.debug.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
@ -394,7 +520,7 @@
|
|||||||
};
|
};
|
||||||
331C8089294A63A400263BE5 /* Release */ = {
|
331C8089294A63A400263BE5 /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
baseConfigurationReference = 89B67EB44CE7B6631473024E /* Pods-RunnerTests.release.xcconfig */;
|
baseConfigurationReference = A9A04AD6D8CB2C21763ACD37 /* Pods-RunnerTests.release.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
@ -410,7 +536,7 @@
|
|||||||
};
|
};
|
||||||
331C808A294A63A400263BE5 /* Profile */ = {
|
331C808A294A63A400263BE5 /* Profile */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
baseConfigurationReference = 640959BDD8F10B91D80A66BE /* Pods-RunnerTests.profile.xcconfig */;
|
baseConfigurationReference = 9427EBEA20C8F5217BB45B75 /* Pods-RunnerTests.profile.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
@ -471,7 +597,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 = 11.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||||
MTL_ENABLE_DEBUG_INFO = YES;
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
@ -520,7 +646,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 = 11.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
SUPPORTED_PLATFORMS = iphoneos;
|
SUPPORTED_PLATFORMS = iphoneos;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "1300"
|
LastUpgradeVersion = "1510"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
|
3
ios/Runner.xcworkspace/contents.xcworkspacedata
generated
3
ios/Runner.xcworkspace/contents.xcworkspacedata
generated
@ -4,4 +4,7 @@
|
|||||||
<FileRef
|
<FileRef
|
||||||
location = "group:Runner.xcodeproj">
|
location = "group:Runner.xcodeproj">
|
||||||
</FileRef>
|
</FileRef>
|
||||||
|
<FileRef
|
||||||
|
location = "group:Pods/Pods.xcodeproj">
|
||||||
|
</FileRef>
|
||||||
</Workspace>
|
</Workspace>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import UIKit
|
import UIKit
|
||||||
import Flutter
|
import Flutter
|
||||||
|
|
||||||
@UIApplicationMain
|
@main
|
||||||
@objc class AppDelegate: FlutterAppDelegate {
|
@objc class AppDelegate: FlutterAppDelegate {
|
||||||
override func application(
|
override func application(
|
||||||
_ application: UIApplication,
|
_ application: UIApplication,
|
||||||
|
@ -8,6 +8,7 @@ import 'package:flutter/services.dart';
|
|||||||
// Package imports:
|
// Package imports:
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
import 'package:google_nav_bar/google_nav_bar.dart';
|
import 'package:google_nav_bar/google_nav_bar.dart';
|
||||||
|
import 'package:openlib/ui/home_page.dart';
|
||||||
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
|
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
|
||||||
|
|
||||||
// Project imports:
|
// Project imports:
|
||||||
@ -16,7 +17,6 @@ import 'package:openlib/ui/mylibrary_page.dart';
|
|||||||
import 'package:openlib/ui/search_page.dart';
|
import 'package:openlib/ui/search_page.dart';
|
||||||
import 'package:openlib/ui/settings_page.dart';
|
import 'package:openlib/ui/settings_page.dart';
|
||||||
import 'package:openlib/ui/themes.dart';
|
import 'package:openlib/ui/themes.dart';
|
||||||
import 'package:openlib/ui/trending_page.dart';
|
|
||||||
|
|
||||||
import 'package:openlib/services/files.dart'
|
import 'package:openlib/services/files.dart'
|
||||||
show moveFilesToAndroidInternalStorage;
|
show moveFilesToAndroidInternalStorage;
|
||||||
@ -100,21 +100,21 @@ class MyApp extends ConsumerWidget {
|
|||||||
theme: lightTheme,
|
theme: lightTheme,
|
||||||
darkTheme: darkTheme,
|
darkTheme: darkTheme,
|
||||||
themeMode: ref.watch(themeModeProvider),
|
themeMode: ref.watch(themeModeProvider),
|
||||||
home: const HomePage(),
|
home: const MainScreen(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class HomePage extends ConsumerStatefulWidget {
|
class MainScreen extends ConsumerStatefulWidget {
|
||||||
const HomePage({super.key});
|
const MainScreen({super.key});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
ConsumerState<ConsumerStatefulWidget> createState() => _HomePageState();
|
ConsumerState<ConsumerStatefulWidget> createState() => _MainScreenState();
|
||||||
}
|
}
|
||||||
|
|
||||||
class _HomePageState extends ConsumerState<HomePage> {
|
class _MainScreenState extends ConsumerState<MainScreen> {
|
||||||
static const List<Widget> _widgetOptions = <Widget>[
|
static const List<Widget> _widgetOptions = <Widget>[
|
||||||
TrendingPage(),
|
HomePage(),
|
||||||
SearchPage(),
|
SearchPage(),
|
||||||
MyLibraryPage(),
|
MyLibraryPage(),
|
||||||
SettingsPage()
|
SettingsPage()
|
||||||
@ -128,7 +128,7 @@ class _HomePageState extends ConsumerState<HomePage> {
|
|||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
backgroundColor: Theme.of(context).colorScheme.background,
|
backgroundColor: Theme.of(context).colorScheme.surface,
|
||||||
title: const Text("Openlib"),
|
title: const Text("Openlib"),
|
||||||
titleTextStyle: Theme.of(context).textTheme.displayLarge,
|
titleTextStyle: Theme.of(context).textTheme.displayLarge,
|
||||||
),
|
),
|
||||||
@ -153,7 +153,7 @@ class _HomePageState extends ConsumerState<HomePage> {
|
|||||||
tabs: [
|
tabs: [
|
||||||
GButton(
|
GButton(
|
||||||
icon: Icons.trending_up,
|
icon: Icons.trending_up,
|
||||||
text: 'Trending',
|
text: 'Home',
|
||||||
iconColor: isDarkMode ? Colors.white : Colors.black,
|
iconColor: isDarkMode ? Colors.white : Colors.black,
|
||||||
textStyle: const TextStyle(
|
textStyle: const TextStyle(
|
||||||
fontWeight: FontWeight.w900,
|
fontWeight: FontWeight.w900,
|
||||||
|
@ -219,8 +219,7 @@ class AnnasArchieve {
|
|||||||
'info':
|
'info':
|
||||||
main?.querySelector('div[class="text-sm text-gray-500"]')?.text ?? '',
|
main?.querySelector('div[class="text-sm text-gray-500"]')?.text ?? '',
|
||||||
'description': main
|
'description': main
|
||||||
?.querySelector(
|
?.querySelector('div[class="mb-1"]')
|
||||||
'div[class="mt-4 line-clamp-[8] js-md5-top-box-description"]')
|
|
||||||
?.text
|
?.text
|
||||||
.replaceFirst("description", '') ??
|
.replaceFirst("description", '') ??
|
||||||
" "
|
" "
|
||||||
|
77
lib/services/goodreads.dart
Normal file
77
lib/services/goodreads.dart
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
// Package imports:
|
||||||
|
import 'package:dio/dio.dart';
|
||||||
|
import 'package:html/parser.dart' show parse;
|
||||||
|
|
||||||
|
class CategoryBookData {
|
||||||
|
final String? title;
|
||||||
|
final String? thumbnail;
|
||||||
|
final String? link;
|
||||||
|
CategoryBookData({this.title, this.thumbnail, this.link});
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
if (identical(this, other)) return true;
|
||||||
|
return other is CategoryBookData &&
|
||||||
|
other.title == title &&
|
||||||
|
other.thumbnail == thumbnail &&
|
||||||
|
other.link == link;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode {
|
||||||
|
return title.hashCode ^ thumbnail.hashCode ^ link.hashCode; // Using XOR to combine hash codes
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
String baseUrl = "https://www.goodreads.com/";
|
||||||
|
|
||||||
|
class SubCategoriesTypeList {
|
||||||
|
List<CategoryBookData>_parser(data) {
|
||||||
|
var document = parse(data.toString());
|
||||||
|
var categoryList = document.querySelectorAll('.listImgs a');
|
||||||
|
List<CategoryBookData> categoriesBooks = [];
|
||||||
|
for (var element in categoryList) {
|
||||||
|
if (element.querySelector('img"]')?.attributes['title'] != null &&
|
||||||
|
element.querySelector('img')?.attributes['src'] != null) {
|
||||||
|
String? title = element.querySelector('img')?.attributes['title'];
|
||||||
|
String? thumbnail = element.querySelector('img')?.attributes['src'];
|
||||||
|
String? link = element.querySelector('a')?.attributes['herf']!;
|
||||||
|
categoriesBooks.add( CategoryBookData(
|
||||||
|
title: title
|
||||||
|
.toString()
|
||||||
|
.trim(),
|
||||||
|
thumbnail: thumbnail
|
||||||
|
.toString()
|
||||||
|
.replaceAll("._SY75_.", "._SY225_.")
|
||||||
|
.replaceAll("._SX50_.", "._SX148_."),
|
||||||
|
link : link
|
||||||
|
.toString(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return categoriesBooks;
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<CategoryBookData>> categoriesBooks({required String url}) async {
|
||||||
|
try {
|
||||||
|
final dio = Dio();
|
||||||
|
final response = await dio.get('$baseUrl$url',
|
||||||
|
options: Options(
|
||||||
|
sendTimeout: const Duration(seconds: 20),
|
||||||
|
receiveTimeout: const Duration(seconds: 20)));
|
||||||
|
final response1 = await dio.get('$baseUrl$url?page=2',
|
||||||
|
options: Options(
|
||||||
|
sendTimeout: const Duration(seconds: 20),
|
||||||
|
receiveTimeout: const Duration(seconds: 20)));
|
||||||
|
return _parser('${response.data.toString()}${response1.data.toString()}');
|
||||||
|
} on DioException catch (e) {
|
||||||
|
if (e.type == DioExceptionType.unknown) {
|
||||||
|
throw "socketException";
|
||||||
|
}
|
||||||
|
rethrow;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -8,12 +8,35 @@ class TrendingBookData {
|
|||||||
TrendingBookData({this.title, this.thumbnail});
|
TrendingBookData({this.title, this.thumbnail});
|
||||||
}
|
}
|
||||||
|
|
||||||
class OpenLibrary {
|
abstract class TrendingBooksImpl {
|
||||||
String url = "https://openlibrary.org/trending/daily";
|
String url = '';
|
||||||
|
int timeOutDuration = 20;
|
||||||
|
List<TrendingBookData> _parser(dynamic data);
|
||||||
|
|
||||||
|
Future<List<TrendingBookData>> trendingBooks() async {
|
||||||
|
try {
|
||||||
|
final dio = Dio();
|
||||||
|
final response = await dio.get(url,
|
||||||
|
options: Options(
|
||||||
|
sendTimeout: Duration(seconds: timeOutDuration),
|
||||||
|
receiveTimeout: Duration(seconds: timeOutDuration)));
|
||||||
|
return _parser(response.data.toString());
|
||||||
|
} on DioException catch (e) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class OpenLibrary extends TrendingBooksImpl {
|
||||||
|
OpenLibrary() {
|
||||||
|
super.url = "https://openlibrary.org/trending/daily";
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
List<TrendingBookData> _parser(data) {
|
List<TrendingBookData> _parser(data) {
|
||||||
var document = parse(data.toString());
|
var document = parse(data.toString());
|
||||||
var bookList = document.querySelectorAll('li[class="searchResultItem"]');
|
var bookList =
|
||||||
|
document.querySelectorAll('li[class="searchResultItem sri--w-main"]');
|
||||||
List<TrendingBookData> trendingBooks = [];
|
List<TrendingBookData> trendingBooks = [];
|
||||||
for (var element in bookList) {
|
for (var element in bookList) {
|
||||||
if (element.querySelector('h3[class="booktitle"]')?.text != null &&
|
if (element.querySelector('h3[class="booktitle"]')?.text != null &&
|
||||||
@ -32,31 +55,33 @@ class OpenLibrary {
|
|||||||
return trendingBooks;
|
return trendingBooks;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
Future<List<TrendingBookData>> trendingBooks() async {
|
Future<List<TrendingBookData>> trendingBooks() async {
|
||||||
try {
|
try {
|
||||||
final dio = Dio();
|
final dio = Dio();
|
||||||
|
const timeOutDuration = 5;
|
||||||
final response = await dio.get(url,
|
final response = await dio.get(url,
|
||||||
options: Options(
|
options: Options(
|
||||||
sendTimeout: const Duration(seconds: 20),
|
sendTimeout: const Duration(seconds: timeOutDuration),
|
||||||
receiveTimeout: const Duration(seconds: 20)));
|
receiveTimeout: const Duration(seconds: timeOutDuration)));
|
||||||
final response2 = await dio.get(
|
final response2 = await dio.get(
|
||||||
"https://openlibrary.org/trending/daily?page=2",
|
"https://openlibrary.org/trending/daily?page=2",
|
||||||
options: Options(
|
options: Options(
|
||||||
sendTimeout: const Duration(seconds: 20),
|
sendTimeout: const Duration(seconds: timeOutDuration),
|
||||||
receiveTimeout: const Duration(seconds: 20)));
|
receiveTimeout: const Duration(seconds: timeOutDuration)));
|
||||||
return _parser('${response.data.toString()}${response2.data.toString()}');
|
return _parser('${response.data.toString()}${response2.data.toString()}');
|
||||||
} on DioException catch (e) {
|
} on DioException catch (e) {
|
||||||
if (e.type == DioExceptionType.unknown) {
|
return [];
|
||||||
throw "socketException";
|
|
||||||
}
|
|
||||||
rethrow;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class GoodReads {
|
class GoodReads extends TrendingBooksImpl {
|
||||||
String url = "https://www.goodreads.com/shelf/show/trending";
|
GoodReads() {
|
||||||
|
super.url = "https://www.goodreads.com/shelf/show/trending";
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
List<TrendingBookData> _parser(data) {
|
List<TrendingBookData> _parser(data) {
|
||||||
var document = parse(data.toString());
|
var document = parse(data.toString());
|
||||||
var bookList = document.querySelectorAll('div[class="elementList"]');
|
var bookList = document.querySelectorAll('div[class="elementList"]');
|
||||||
@ -84,28 +109,15 @@ class GoodReads {
|
|||||||
}
|
}
|
||||||
return trendingBooks;
|
return trendingBooks;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<List<TrendingBookData>> trendingBooks() async {
|
|
||||||
try {
|
|
||||||
final dio = Dio();
|
|
||||||
final response = await dio.get(url,
|
|
||||||
options: Options(
|
|
||||||
sendTimeout: const Duration(seconds: 20),
|
|
||||||
receiveTimeout: const Duration(seconds: 20)));
|
|
||||||
return _parser(response.data.toString());
|
|
||||||
} on DioException catch (e) {
|
|
||||||
if (e.type == DioExceptionType.unknown) {
|
|
||||||
throw "socketException";
|
|
||||||
}
|
|
||||||
rethrow;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class PenguinRandomHouse {
|
class PenguinRandomHouse extends TrendingBooksImpl {
|
||||||
String url =
|
PenguinRandomHouse() {
|
||||||
"https://www.penguinrandomhouse.com/ajaxc/categories/books/?from=0&to=50&contentId=&elClass=book&dataType=html&catFilter=best-sellers";
|
super.url =
|
||||||
|
"https://www.penguinrandomhouse.com/ajaxc/categories/books/?from=0&to=50&contentId=&elClass=book&dataType=html&catFilter=best-sellers";
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
List<TrendingBookData> _parser(data) {
|
List<TrendingBookData> _parser(data) {
|
||||||
var document = parse(data.toString());
|
var document = parse(data.toString());
|
||||||
var bookList = document.querySelectorAll('div[class="book"]');
|
var bookList = document.querySelectorAll('div[class="book"]');
|
||||||
@ -132,20 +144,34 @@ class PenguinRandomHouse {
|
|||||||
}
|
}
|
||||||
return trendingBooks;
|
return trendingBooks;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Future<List<TrendingBookData>> trendingBooks() async {
|
class BookDigits extends TrendingBooksImpl {
|
||||||
try {
|
BookDigits() {
|
||||||
final dio = Dio();
|
super.url = "https://bookdigits.com/fresh";
|
||||||
final response = await dio.get(url,
|
}
|
||||||
options: Options(
|
|
||||||
sendTimeout: const Duration(seconds: 20),
|
@override
|
||||||
receiveTimeout: const Duration(seconds: 20)));
|
List<TrendingBookData> _parser(data) {
|
||||||
return _parser(response.data.toString());
|
var document = parse(data.toString());
|
||||||
} on DioException catch (e) {
|
var bookList = document.querySelectorAll('div[class="list-row"]');
|
||||||
if (e.type == DioExceptionType.unknown) {
|
List<TrendingBookData> trendingBooks = [];
|
||||||
throw "socketException";
|
for (var element in bookList) {
|
||||||
|
if (element.querySelector('div[class="list-title link-reg"]')?.text !=
|
||||||
|
null &&
|
||||||
|
element.querySelector('img')?.attributes['src'] != null) {
|
||||||
|
String? thumbnail = element.querySelector('img')?.attributes['src'];
|
||||||
|
trendingBooks.add(
|
||||||
|
TrendingBookData(
|
||||||
|
title: element
|
||||||
|
.querySelector('div[class="list-title link-reg"]')
|
||||||
|
?.text
|
||||||
|
.toString()
|
||||||
|
.trim(),
|
||||||
|
thumbnail: thumbnail.toString()),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
rethrow;
|
|
||||||
}
|
}
|
||||||
|
return trendingBooks;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
67
lib/services/share_book.dart
Normal file
67
lib/services/share_book.dart
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
import 'dart:async';
|
||||||
|
import 'dart:io';
|
||||||
|
import 'dart:typed_data';
|
||||||
|
import 'dart:ui';
|
||||||
|
import 'package:cached_network_image/cached_network_image.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:path_provider/path_provider.dart';
|
||||||
|
import 'package:share_plus/share_plus.dart';
|
||||||
|
|
||||||
|
Future<void> shareBook(String title, String link, String path) async {
|
||||||
|
try {
|
||||||
|
String imagePath = await saveAndGetImagePath(path);
|
||||||
|
String message = 'Discover this amazing book: "$title"\nRead more : $link';
|
||||||
|
if (imagePath.isNotEmpty) {
|
||||||
|
await Share.shareXFiles([XFile(imagePath)], text: message);
|
||||||
|
} else {
|
||||||
|
await Share.share(message);
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
debugPrint('Error sharing the book: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<String> saveAndGetImagePath(String url) async {
|
||||||
|
if (url != null && url.isNotEmpty) {
|
||||||
|
try {
|
||||||
|
final imageProvider = CachedNetworkImageProvider(url);
|
||||||
|
final imageStream = imageProvider.resolve(const ImageConfiguration());
|
||||||
|
String? localFilePath;
|
||||||
|
|
||||||
|
final Completer<ByteData> completer = Completer();
|
||||||
|
|
||||||
|
imageStream.addListener(
|
||||||
|
ImageStreamListener(
|
||||||
|
(ImageInfo info, bool _) async {
|
||||||
|
try {
|
||||||
|
final ByteData? byteData =
|
||||||
|
await info.image.toByteData(format: ImageByteFormat.png);
|
||||||
|
if (byteData != null) {
|
||||||
|
final Uint8List imageBytes = byteData.buffer.asUint8List();
|
||||||
|
final Directory tempDir = await getTemporaryDirectory();
|
||||||
|
final File imageFile = File('${tempDir.path}/image.jpg');
|
||||||
|
|
||||||
|
await imageFile.writeAsBytes(imageBytes);
|
||||||
|
localFilePath = imageFile.path;
|
||||||
|
completer.complete(byteData);
|
||||||
|
} else {
|
||||||
|
completer.completeError('Failed to get image bytes');
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
completer.completeError(e);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onError: (exception, stackTrace) {
|
||||||
|
completer.completeError('Failed to get image bytes');
|
||||||
|
},
|
||||||
|
),
|
||||||
|
);
|
||||||
|
await completer.future;
|
||||||
|
return localFilePath ?? "";
|
||||||
|
} catch (e) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
@ -13,6 +13,7 @@ import 'package:openlib/services/annas_archieve.dart';
|
|||||||
import 'package:openlib/services/database.dart';
|
import 'package:openlib/services/database.dart';
|
||||||
import 'package:openlib/services/files.dart';
|
import 'package:openlib/services/files.dart';
|
||||||
import 'package:openlib/services/open_library.dart';
|
import 'package:openlib/services/open_library.dart';
|
||||||
|
import 'package:openlib/services/goodreads.dart';
|
||||||
|
|
||||||
MyLibraryDb dataBase = MyLibraryDb.instance;
|
MyLibraryDb dataBase = MyLibraryDb.instance;
|
||||||
|
|
||||||
@ -41,6 +42,7 @@ Map<String, String> sortValues = {
|
|||||||
List<String> fileType = ["All", "PDF", "Epub", "Cbr", "Cbz"];
|
List<String> fileType = ["All", "PDF", "Epub", "Cbr", "Cbz"];
|
||||||
|
|
||||||
final selectedIndexProvider = StateProvider<int>((ref) => 0);
|
final selectedIndexProvider = StateProvider<int>((ref) => 0);
|
||||||
|
final homePageSelectedIndexProvider = StateProvider<int>((ref) => 0);
|
||||||
|
|
||||||
final themeModeProvider = StateProvider<ThemeMode>((ref) => ThemeMode.light);
|
final themeModeProvider = StateProvider<ThemeMode>((ref) => ThemeMode.light);
|
||||||
|
|
||||||
@ -69,20 +71,37 @@ final getFileTypeValue = Provider.autoDispose<String>((ref) {
|
|||||||
|
|
||||||
final searchQueryProvider = StateProvider<String>((ref) => "");
|
final searchQueryProvider = StateProvider<String>((ref) => "");
|
||||||
|
|
||||||
|
// Sub category type list providers
|
||||||
|
|
||||||
|
final getSubCategoryTypeList = FutureProvider.family
|
||||||
|
.autoDispose<List<CategoryBookData>, String>((ref, url) async {
|
||||||
|
SubCategoriesTypeList subCategoriesTypeList = SubCategoriesTypeList();
|
||||||
|
List<CategoryBookData> subCategories =
|
||||||
|
await subCategoriesTypeList.categoriesBooks(url: url);
|
||||||
|
List<CategoryBookData> uniqueArray = subCategories.toSet().toList();
|
||||||
|
uniqueArray.shuffle();
|
||||||
|
return uniqueArray;
|
||||||
|
});
|
||||||
|
|
||||||
//Provider for Trending Books
|
//Provider for Trending Books
|
||||||
|
|
||||||
final getTrendingBooks = FutureProvider<List<TrendingBookData>>((ref) async {
|
final getTrendingBooks = FutureProvider<List<TrendingBookData>>((ref) async {
|
||||||
OpenLibrary openLibrary = OpenLibrary();
|
// OpenLibrary openLibrary = OpenLibrary();
|
||||||
GoodReads goodReads = GoodReads();
|
GoodReads goodReads = GoodReads();
|
||||||
PenguinRandomHouse penguinTrending = PenguinRandomHouse();
|
PenguinRandomHouse penguinTrending = PenguinRandomHouse();
|
||||||
|
BookDigits bookDigits = BookDigits();
|
||||||
List<TrendingBookData> trendingBooks =
|
List<TrendingBookData> trendingBooks =
|
||||||
await Future.wait<List<TrendingBookData>>([
|
await Future.wait<List<TrendingBookData>>([
|
||||||
openLibrary.trendingBooks(),
|
|
||||||
goodReads.trendingBooks(),
|
goodReads.trendingBooks(),
|
||||||
penguinTrending.trendingBooks()
|
penguinTrending.trendingBooks(),
|
||||||
|
// openLibrary.trendingBooks(),
|
||||||
|
bookDigits.trendingBooks(),
|
||||||
]).then((List<List<TrendingBookData>> listOfData) =>
|
]).then((List<List<TrendingBookData>> listOfData) =>
|
||||||
listOfData.expand((element) => element).toList());
|
listOfData.expand((element) => element).toList());
|
||||||
|
|
||||||
|
if (trendingBooks.isEmpty) {
|
||||||
|
throw 'Nothing Trending Today :(';
|
||||||
|
}
|
||||||
trendingBooks.shuffle();
|
trendingBooks.shuffle();
|
||||||
return trendingBooks;
|
return trendingBooks;
|
||||||
});
|
});
|
||||||
|
@ -13,9 +13,11 @@ class AboutPage extends StatelessWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
const version = "1.0.10";
|
||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
backgroundColor: Theme.of(context).colorScheme.background,
|
backgroundColor: Theme.of(context).colorScheme.surface,
|
||||||
title: const Text("Openlib"),
|
title: const Text("Openlib"),
|
||||||
titleTextStyle: Theme.of(context).textTheme.displayLarge,
|
titleTextStyle: Theme.of(context).textTheme.displayLarge,
|
||||||
),
|
),
|
||||||
@ -47,7 +49,7 @@ class AboutPage extends StatelessWidget {
|
|||||||
Padding(
|
Padding(
|
||||||
padding: EdgeInsets.only(left: 7, right: 7, top: 5),
|
padding: EdgeInsets.only(left: 7, right: 7, top: 5),
|
||||||
child: Text(
|
child: Text(
|
||||||
"1.0.7",
|
version,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 15,
|
fontSize: 15,
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
|
@ -8,6 +8,7 @@ import 'package:flutter/material.dart';
|
|||||||
// Package imports:
|
// Package imports:
|
||||||
import 'package:dio/dio.dart' show CancelToken;
|
import 'package:dio/dio.dart' show CancelToken;
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
|
import 'package:openlib/services/share_book.dart';
|
||||||
// import 'package:flutter_svg/svg.dart';
|
// import 'package:flutter_svg/svg.dart';
|
||||||
|
|
||||||
// Project imports:
|
// Project imports:
|
||||||
@ -47,9 +48,25 @@ class BookInfoPage extends ConsumerWidget {
|
|||||||
final bookInfo = ref.watch(bookInfoProvider(url));
|
final bookInfo = ref.watch(bookInfoProvider(url));
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
backgroundColor: Theme.of(context).colorScheme.background,
|
backgroundColor: Theme.of(context).colorScheme.surface,
|
||||||
title: const Text("Openlib"),
|
title: const Text("Openlib"),
|
||||||
titleTextStyle: Theme.of(context).textTheme.displayLarge,
|
titleTextStyle: Theme.of(context).textTheme.displayLarge,
|
||||||
|
actions: [
|
||||||
|
bookInfo.maybeWhen(data: (data) {
|
||||||
|
return IconButton(
|
||||||
|
icon: Icon(
|
||||||
|
Icons.share_sharp,
|
||||||
|
color: Theme.of(context).colorScheme.tertiary,
|
||||||
|
),
|
||||||
|
iconSize: 19.0,
|
||||||
|
onPressed: () async {
|
||||||
|
await shareBook(data.title, data.link, data.thumbnail ?? '');
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}, orElse: () {
|
||||||
|
return const SizedBox.shrink();
|
||||||
|
})
|
||||||
|
],
|
||||||
),
|
),
|
||||||
body: bookInfo.when(
|
body: bookInfo.when(
|
||||||
skipLoadingOnRefresh: false,
|
skipLoadingOnRefresh: false,
|
||||||
@ -189,31 +206,36 @@ class _ActionButtonWidgetState extends ConsumerState<ActionButtonWidget> {
|
|||||||
} else {
|
} else {
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.only(top: 21, bottom: 21),
|
padding: const EdgeInsets.only(top: 21, bottom: 21),
|
||||||
child: TextButton(
|
child: Row(
|
||||||
style: TextButton.styleFrom(
|
mainAxisAlignment:
|
||||||
backgroundColor: Theme.of(context).colorScheme.secondary,
|
MainAxisAlignment.start, // Aligns buttons properly
|
||||||
textStyle: const TextStyle(
|
children: [
|
||||||
fontSize: 13,
|
// Button for "Add To My Library"
|
||||||
fontWeight: FontWeight.w900,
|
TextButton(
|
||||||
color: Colors.white,
|
style: TextButton.styleFrom(
|
||||||
)),
|
backgroundColor: Theme.of(context).colorScheme.secondary,
|
||||||
onPressed: () async {
|
padding:
|
||||||
final result = await Navigator.push(context,
|
const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
|
||||||
MaterialPageRoute(builder: (BuildContext context) {
|
textStyle: const TextStyle(
|
||||||
return Webview(url: widget.data.mirror ?? '');
|
fontSize: 13,
|
||||||
}));
|
fontWeight: FontWeight.w900,
|
||||||
|
color: Colors.white,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
onPressed: () async {
|
||||||
|
final result = await Navigator.push(context,
|
||||||
|
MaterialPageRoute(builder: (BuildContext context) {
|
||||||
|
return Webview(url: widget.data.mirror ?? '');
|
||||||
|
}));
|
||||||
|
|
||||||
if (result != null) {
|
if (result != null) {
|
||||||
// ignore: use_build_context_synchronously
|
widget.data.mirror = result;
|
||||||
widget.data.mirror = result;
|
await downloadFileWidget(ref, context, widget.data);
|
||||||
// ignore: use_build_context_synchronously
|
}
|
||||||
await downloadFileWidget(ref, context, widget.data);
|
},
|
||||||
}
|
child: const Text('Add To My Library'),
|
||||||
},
|
)
|
||||||
child: const Padding(
|
],
|
||||||
padding: EdgeInsets.all(8.0),
|
|
||||||
child: Text('Add To My Library'),
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -241,7 +263,7 @@ Future<void> downloadFileWidget(
|
|||||||
});
|
});
|
||||||
|
|
||||||
List<String> mirrors = [data.mirror!];
|
List<String> mirrors = [data.mirror!];
|
||||||
print(mirrors);
|
// print(mirrors);
|
||||||
downloadFile(
|
downloadFile(
|
||||||
mirrors: mirrors,
|
mirrors: mirrors,
|
||||||
md5: data.md5,
|
md5: data.md5,
|
||||||
|
530
lib/ui/categories_page.dart
Normal file
530
lib/ui/categories_page.dart
Normal file
@ -0,0 +1,530 @@
|
|||||||
|
// Flutter imports:
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:cached_network_image/cached_network_image.dart';
|
||||||
|
|
||||||
|
// Package imports:
|
||||||
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
|
|
||||||
|
// Project imports:
|
||||||
|
import 'package:openlib/ui/components/page_title_widget.dart';
|
||||||
|
import 'package:openlib/ui/extensions.dart';
|
||||||
|
import 'package:openlib/ui/results_page.dart';
|
||||||
|
import 'package:openlib/ui/components/error_widget.dart';
|
||||||
|
import 'package:openlib/state/state.dart'
|
||||||
|
show getSubCategoryTypeList, enableFiltersState;
|
||||||
|
|
||||||
|
class CategoryBook {
|
||||||
|
final String title;
|
||||||
|
final String thumbnail;
|
||||||
|
final String tag;
|
||||||
|
final String info;
|
||||||
|
CategoryBook(
|
||||||
|
{required this.title,
|
||||||
|
required this.thumbnail,
|
||||||
|
required this.tag,
|
||||||
|
required this.info});
|
||||||
|
}
|
||||||
|
|
||||||
|
List<CategoryBook> categoriesTypeValues = [
|
||||||
|
CategoryBook(
|
||||||
|
info:
|
||||||
|
"Timeless literary works often revered for their artistic merit and cultural significance.",
|
||||||
|
thumbnail:
|
||||||
|
"https://raw.githubusercontent.com/Nav-jangra/images/refs/heads/main/1%20classic.jpeg",
|
||||||
|
title: "Classics",
|
||||||
|
tag: "list/tag/classics"),
|
||||||
|
CategoryBook(
|
||||||
|
info:
|
||||||
|
"Stories focused on romantic relationships, exploring love, passion, and emotional connections.",
|
||||||
|
thumbnail:
|
||||||
|
"https://raw.githubusercontent.com/Nav-jangra/images/refs/heads/main/2%20romance.jpeg",
|
||||||
|
title: "Romance",
|
||||||
|
tag: "list/tag/romance"),
|
||||||
|
CategoryBook(
|
||||||
|
info:
|
||||||
|
"Narrative literature created from the imagination, not based on real events.",
|
||||||
|
thumbnail:
|
||||||
|
"https://raw.githubusercontent.com/Nav-jangra/images/refs/heads/main/3%20fiction.jpeg",
|
||||||
|
title: "Fiction",
|
||||||
|
tag: "list/tag/fiction"),
|
||||||
|
CategoryBook(
|
||||||
|
info:
|
||||||
|
"Books targeted at teenage readers, addressing themes relevant to adolescence.",
|
||||||
|
thumbnail:
|
||||||
|
"https://raw.githubusercontent.com/Nav-jangra/images/refs/heads/main/4%20young%20adult.jpeg",
|
||||||
|
title: "Young Adult",
|
||||||
|
tag: "list/tag/young-adult"),
|
||||||
|
CategoryBook(
|
||||||
|
info:
|
||||||
|
"A genre featuring magical elements, mythical creatures, and fantastical worlds.",
|
||||||
|
thumbnail:
|
||||||
|
"https://raw.githubusercontent.com/Nav-jangra/images/refs/heads/main/5%20fantasy%20book.jpeg",
|
||||||
|
title: "Fantasy",
|
||||||
|
tag: "list/tag/fantasy"),
|
||||||
|
CategoryBook(
|
||||||
|
info:
|
||||||
|
"Literature that explores futuristic concepts, advanced technology, and space exploration.",
|
||||||
|
thumbnail:
|
||||||
|
"https://raw.githubusercontent.com/Nav-jangra/images/refs/heads/main/6%20science%20fiction.jpeg",
|
||||||
|
title: "Science Fiction",
|
||||||
|
tag: "list/tag/science-fiction"),
|
||||||
|
CategoryBook(
|
||||||
|
info:
|
||||||
|
"Works based on factual information, including essays, biographies, and documentaries.",
|
||||||
|
thumbnail:
|
||||||
|
"https://raw.githubusercontent.com/Nav-jangra/images/refs/heads/main/7%20non%20fiction.jpeg",
|
||||||
|
title: "Nonfiction",
|
||||||
|
tag: "list/tag/non-fiction"),
|
||||||
|
CategoryBook(
|
||||||
|
info:
|
||||||
|
"Books aimed at young readers, often with illustrations and simple narratives.",
|
||||||
|
thumbnail:
|
||||||
|
"https://raw.githubusercontent.com/Nav-jangra/images/refs/heads/main/8%20children.jpeg",
|
||||||
|
title: "Children",
|
||||||
|
tag: "list/tag/children"),
|
||||||
|
CategoryBook(
|
||||||
|
info:
|
||||||
|
"Literature that examines past events, cultures, and significant historical figures.",
|
||||||
|
thumbnail:
|
||||||
|
"https://raw.githubusercontent.com/Nav-jangra/images/refs/heads/main/9%20history.jpeg",
|
||||||
|
title: "History",
|
||||||
|
tag: "list/tag/history"),
|
||||||
|
CategoryBook(
|
||||||
|
info:
|
||||||
|
"Stories centered around suspenseful plots, often involving crime or puzzles to solve.",
|
||||||
|
thumbnail:
|
||||||
|
"https://raw.githubusercontent.com/Nav-jangra/images/refs/heads/main/10%20mystery.jpeg",
|
||||||
|
title: "Mystery",
|
||||||
|
tag: "list/tag/mystery"),
|
||||||
|
CategoryBook(
|
||||||
|
info:
|
||||||
|
"Refers to the artwork and design that visually represents a book, influencing reader interest.",
|
||||||
|
thumbnail:
|
||||||
|
"https://raw.githubusercontent.com/Nav-jangra/images/refs/heads/main/11%20covers.jpeg",
|
||||||
|
title: "Covers",
|
||||||
|
tag: "list/tag/covers"),
|
||||||
|
CategoryBook(
|
||||||
|
info:
|
||||||
|
"A genre designed to evoke fear, dread, or terror in the reader through suspenseful storytelling.",
|
||||||
|
thumbnail:
|
||||||
|
"https://raw.githubusercontent.com/Nav-jangra/images/refs/heads/main/12%20horror.jpeg",
|
||||||
|
title: "Horror",
|
||||||
|
tag: "list/tag/horror"),
|
||||||
|
CategoryBook(
|
||||||
|
info:
|
||||||
|
"Novels set in a specific historical period, blending factual events with fictional characters.",
|
||||||
|
thumbnail:
|
||||||
|
"https://raw.githubusercontent.com/Nav-jangra/images/refs/heads/main/13%20historical%20fiction.jpeg",
|
||||||
|
title: "Historical Fiction",
|
||||||
|
tag: "list/tag/historical-fiction"),
|
||||||
|
CategoryBook(
|
||||||
|
info:
|
||||||
|
"Often refers to critically acclaimed or popular books, usually categorized by rankings or awards.",
|
||||||
|
thumbnail:
|
||||||
|
"https://raw.githubusercontent.com/Nav-jangra/images/refs/heads/main/15%20best%20.jpeg",
|
||||||
|
title: "Best",
|
||||||
|
tag: "list/tag/best"),
|
||||||
|
CategoryBook(
|
||||||
|
info:
|
||||||
|
"Refers to the names of books, which often reflect their themes or subject matter.",
|
||||||
|
thumbnail:
|
||||||
|
"https://raw.githubusercontent.com/Nav-jangra/images/refs/heads/main/16%20titles.jpeg",
|
||||||
|
title: "Titles",
|
||||||
|
tag: "list/tag/titles"),
|
||||||
|
CategoryBook(
|
||||||
|
info:
|
||||||
|
"Books intended for readers aged 8-12, featuring age-appropriate themes and characters.",
|
||||||
|
thumbnail:
|
||||||
|
"https://raw.githubusercontent.com/Nav-jangra/images/refs/heads/main/17%20middle%20grade.jpeg",
|
||||||
|
title: "Middle Grade",
|
||||||
|
tag: "list/tag/middle-grade"),
|
||||||
|
CategoryBook(
|
||||||
|
info:
|
||||||
|
"Stories that incorporate supernatural elements, including ghosts, vampires, and otherworldly beings.",
|
||||||
|
thumbnail:
|
||||||
|
"https://raw.githubusercontent.com/Nav-jangra/images/refs/heads/main/18%20paranormal.jpeg",
|
||||||
|
title: "Paranormal",
|
||||||
|
tag: "list/tag/paranormal"),
|
||||||
|
CategoryBook(
|
||||||
|
info:
|
||||||
|
"A theme exploring the complexities and nuances of love in various forms and relationships.",
|
||||||
|
thumbnail:
|
||||||
|
"https://raw.githubusercontent.com/Nav-jangra/images/refs/heads/main/19%20love.jpeg",
|
||||||
|
title: "Love",
|
||||||
|
tag: "list/tag/love"),
|
||||||
|
CategoryBook(
|
||||||
|
info:
|
||||||
|
"Literature that represents diverse sexual orientations and gender identities within the LGBTQ+ spectrum.",
|
||||||
|
thumbnail:
|
||||||
|
"https://raw.githubusercontent.com/Nav-jangra/images/refs/heads/main/20%20queer.jpeg",
|
||||||
|
title: "Queer",
|
||||||
|
tag: "list/tag/queer"),
|
||||||
|
CategoryBook(
|
||||||
|
info:
|
||||||
|
"Works based on factual information, including essays, biographies, and documentaries.",
|
||||||
|
thumbnail:
|
||||||
|
"https://raw.githubusercontent.com/Nav-jangra/images/refs/heads/main/21%20nonfictino.jpeg",
|
||||||
|
title: "Nonfiction",
|
||||||
|
tag: "list/tag/nonfiction"),
|
||||||
|
CategoryBook(
|
||||||
|
info:
|
||||||
|
"Novels combining romantic plots set against a historical backdrop.",
|
||||||
|
thumbnail:
|
||||||
|
"https://raw.githubusercontent.com/Nav-jangra/images/refs/heads/main/22%20historical%20romance.jpeg",
|
||||||
|
title: "Historical Romance",
|
||||||
|
tag: "list/tag/historical-romance"),
|
||||||
|
CategoryBook(
|
||||||
|
info:
|
||||||
|
"Works set in modern times, often addressing current social issues and relatable characters.",
|
||||||
|
thumbnail:
|
||||||
|
"https://raw.githubusercontent.com/Nav-jangra/images/refs/heads/main/24%20contemporary.jpeg",
|
||||||
|
title: "Contemporary",
|
||||||
|
tag: "list/tag/contemporary"),
|
||||||
|
CategoryBook(
|
||||||
|
info:
|
||||||
|
"A suspenseful genre focused on excitement, tension, and unexpected twists.",
|
||||||
|
thumbnail:
|
||||||
|
"https://raw.githubusercontent.com/Nav-jangra/images/refs/heads/main/25%20thriller.jpeg",
|
||||||
|
title: "Thriller",
|
||||||
|
tag: "list/tag/thriller"),
|
||||||
|
CategoryBook(
|
||||||
|
info:
|
||||||
|
"Literature that explores women's experiences, perspectives, and empowerment.",
|
||||||
|
thumbnail:
|
||||||
|
"https://raw.githubusercontent.com/Nav-jangra/images/refs/heads/main/26%20women.jpeg",
|
||||||
|
title: "Women",
|
||||||
|
tag: "list/tag/women"),
|
||||||
|
CategoryBook(
|
||||||
|
info:
|
||||||
|
"Nonfiction works detailing the life story of an individual, highlighting their achievements and challenges.",
|
||||||
|
thumbnail:
|
||||||
|
"https://raw.githubusercontent.com/Nav-jangra/images/refs/heads/main/27%20biography.jpeg",
|
||||||
|
title: "Biography",
|
||||||
|
tag: "list/tag/biography"),
|
||||||
|
CategoryBook(
|
||||||
|
info:
|
||||||
|
"Inclusive literature representing the experiences of the lesbian, gay, bisexual, transgender, and queer community.",
|
||||||
|
thumbnail:
|
||||||
|
"https://raw.githubusercontent.com/Nav-jangra/images/refs/heads/main/28%20lgbtq.jpeg",
|
||||||
|
title: "LGBTQ",
|
||||||
|
tag: "list/tag/lgbtq"),
|
||||||
|
CategoryBook(
|
||||||
|
info:
|
||||||
|
"A collection of related books that follow a common storyline or set of characters.",
|
||||||
|
thumbnail:
|
||||||
|
"https://raw.githubusercontent.com/Nav-jangra/images/refs/heads/main/29%20series%20.jpeg",
|
||||||
|
title: "Series",
|
||||||
|
tag: "list/tag/series"),
|
||||||
|
CategoryBook(
|
||||||
|
info:
|
||||||
|
"Refers to prompts or contests encouraging creative thinking about book titles.",
|
||||||
|
thumbnail:
|
||||||
|
"https://raw.githubusercontent.com/Nav-jangra/images/refs/heads/main/30%20title%20chhallenge.jpeg",
|
||||||
|
title: "Title Challenge",
|
||||||
|
tag: "list/tag/title-challenge"),
|
||||||
|
];
|
||||||
|
|
||||||
|
class GenresPage extends ConsumerWidget {
|
||||||
|
const GenresPage({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
|
final categories = categoriesTypeValues;
|
||||||
|
return Scaffold(
|
||||||
|
body: Padding(
|
||||||
|
padding: const EdgeInsets.only(left: 5, right: 5, top: 10),
|
||||||
|
child: CustomScrollView(
|
||||||
|
slivers: <Widget>[
|
||||||
|
SliverPadding(
|
||||||
|
padding: const EdgeInsets.only(left: 5, right: 5, top: 10),
|
||||||
|
sliver: SliverList(
|
||||||
|
delegate: SliverChildBuilderDelegate(
|
||||||
|
(BuildContext context, int index) {
|
||||||
|
final category = categories[index];
|
||||||
|
return BookInfoCard(
|
||||||
|
title: category.title,
|
||||||
|
thumbnail: category.thumbnail,
|
||||||
|
info: category.info,
|
||||||
|
onClick: () {
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: (BuildContext context) {
|
||||||
|
return CategoryListingPage(
|
||||||
|
url: category.tag,
|
||||||
|
title: category.title,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
},
|
||||||
|
childCount: categories.length,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class BookInfoCard extends StatelessWidget {
|
||||||
|
const BookInfoCard(
|
||||||
|
{super.key,
|
||||||
|
required this.title,
|
||||||
|
required this.thumbnail,
|
||||||
|
required this.info,
|
||||||
|
required this.onClick});
|
||||||
|
|
||||||
|
final String title;
|
||||||
|
final String thumbnail;
|
||||||
|
final String info;
|
||||||
|
final VoidCallback onClick;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return InkWell(
|
||||||
|
onTap: onClick,
|
||||||
|
child: Container(
|
||||||
|
width: double.infinity,
|
||||||
|
height: 120,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(5),
|
||||||
|
),
|
||||||
|
margin: const EdgeInsets.only(bottom: 10),
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
CachedNetworkImage(
|
||||||
|
height: 120,
|
||||||
|
width: 90,
|
||||||
|
imageUrl: thumbnail,
|
||||||
|
imageBuilder: (context, imageProvider) => Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: const BorderRadius.all(Radius.circular(5)),
|
||||||
|
image: DecorationImage(
|
||||||
|
image: imageProvider,
|
||||||
|
fit: BoxFit.fill,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
placeholder: (context, url) => Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(5),
|
||||||
|
color: "#F8C0C8".toColor(),
|
||||||
|
),
|
||||||
|
height: 120,
|
||||||
|
width: 90,
|
||||||
|
),
|
||||||
|
errorWidget: (context, url, error) {
|
||||||
|
return Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(5),
|
||||||
|
color: "#F8C0C8".toColor(),
|
||||||
|
),
|
||||||
|
height: 120,
|
||||||
|
width: 90,
|
||||||
|
child: const Center(
|
||||||
|
child: Icon(Icons.image_rounded),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.all(5),
|
||||||
|
child: SizedBox(
|
||||||
|
width: double.infinity,
|
||||||
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
title,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 19,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: Theme.of(context).colorScheme.tertiary,
|
||||||
|
),
|
||||||
|
overflow: TextOverflow.ellipsis,
|
||||||
|
maxLines: 2,
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
info,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 12,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color:
|
||||||
|
Theme.of(context).textTheme.headlineMedium?.color,
|
||||||
|
),
|
||||||
|
overflow: TextOverflow.ellipsis,
|
||||||
|
maxLines: 3,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
))
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class CategoryListingPage extends ConsumerWidget {
|
||||||
|
const CategoryListingPage(
|
||||||
|
{super.key, required this.url, required this.title});
|
||||||
|
final double imageHeight = 145;
|
||||||
|
final double imageWidth = 105;
|
||||||
|
final String url;
|
||||||
|
final String title;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
|
final booksBasedOnGenre = ref.watch(getSubCategoryTypeList(url));
|
||||||
|
return Scaffold(
|
||||||
|
appBar: AppBar(
|
||||||
|
backgroundColor: Theme.of(context).colorScheme.surface,
|
||||||
|
title: const Text("Openlib"),
|
||||||
|
titleTextStyle: Theme.of(context).textTheme.displayLarge,
|
||||||
|
),
|
||||||
|
body: booksBasedOnGenre.when(
|
||||||
|
skipLoadingOnRefresh: false,
|
||||||
|
data: (data) {
|
||||||
|
return Padding(
|
||||||
|
padding: const EdgeInsets.only(left: 5, right: 5, top: 10),
|
||||||
|
child: CustomScrollView(
|
||||||
|
physics: const BouncingScrollPhysics(),
|
||||||
|
slivers: [
|
||||||
|
SliverToBoxAdapter(
|
||||||
|
child: TitleText(title),
|
||||||
|
),
|
||||||
|
SliverPadding(
|
||||||
|
padding: const EdgeInsets.all(5),
|
||||||
|
sliver: SliverGrid(
|
||||||
|
gridDelegate:
|
||||||
|
const SliverGridDelegateWithFixedCrossAxisCount(
|
||||||
|
crossAxisCount: 3,
|
||||||
|
mainAxisSpacing: 10.0,
|
||||||
|
crossAxisSpacing: 13.0,
|
||||||
|
mainAxisExtent: 205,
|
||||||
|
),
|
||||||
|
delegate: SliverChildBuilderDelegate(
|
||||||
|
(BuildContext context, int index) {
|
||||||
|
return InkWell(
|
||||||
|
onTap: () {
|
||||||
|
ref.read(enableFiltersState.notifier).state =
|
||||||
|
false;
|
||||||
|
Navigator.push(context, MaterialPageRoute(
|
||||||
|
builder: (BuildContext context) {
|
||||||
|
return ResultPage(
|
||||||
|
searchQuery: data[index].title!);
|
||||||
|
}));
|
||||||
|
},
|
||||||
|
child: SizedBox(
|
||||||
|
width: double.infinity,
|
||||||
|
height: double.infinity,
|
||||||
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
|
crossAxisAlignment:
|
||||||
|
CrossAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
CachedNetworkImage(
|
||||||
|
height: imageHeight,
|
||||||
|
width: imageWidth,
|
||||||
|
imageUrl: data[index].thumbnail!,
|
||||||
|
imageBuilder:
|
||||||
|
(context, imageProvider) =>
|
||||||
|
Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
boxShadow: const [
|
||||||
|
BoxShadow(
|
||||||
|
color: Colors.grey,
|
||||||
|
spreadRadius: 0.1,
|
||||||
|
blurRadius: 1)
|
||||||
|
],
|
||||||
|
borderRadius:
|
||||||
|
const BorderRadius.all(
|
||||||
|
Radius.circular(5)),
|
||||||
|
image: DecorationImage(
|
||||||
|
image: imageProvider,
|
||||||
|
fit: BoxFit.fill,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
placeholder: (context, url) =>
|
||||||
|
Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius:
|
||||||
|
BorderRadius.circular(5),
|
||||||
|
color: "#E3E8E9".toColor(),
|
||||||
|
),
|
||||||
|
height: imageHeight,
|
||||||
|
width: imageWidth,
|
||||||
|
),
|
||||||
|
errorWidget: (context, url, error) {
|
||||||
|
return Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius:
|
||||||
|
BorderRadius.circular(5),
|
||||||
|
color: Colors.grey,
|
||||||
|
),
|
||||||
|
height: imageHeight,
|
||||||
|
width: imageWidth,
|
||||||
|
child: const Center(
|
||||||
|
child: Icon(Icons.image_rounded),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.only(top: 4),
|
||||||
|
child: SizedBox(
|
||||||
|
width: imageWidth,
|
||||||
|
child: Text(
|
||||||
|
data[index].title!,
|
||||||
|
style: Theme.of(context)
|
||||||
|
.textTheme
|
||||||
|
.displayMedium,
|
||||||
|
maxLines: 2,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
childCount: data.length,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
error: (error, _) {
|
||||||
|
return CustomErrorWidget(
|
||||||
|
error: error,
|
||||||
|
stackTrace: _,
|
||||||
|
// onRefresh: () {
|
||||||
|
// // ignore: unused_result
|
||||||
|
// ref.refresh(getbooksBasedOnGenre);
|
||||||
|
// },
|
||||||
|
);
|
||||||
|
},
|
||||||
|
loading: () {
|
||||||
|
return Center(
|
||||||
|
child: SizedBox(
|
||||||
|
width: 25,
|
||||||
|
height: 25,
|
||||||
|
child: CircularProgressIndicator(
|
||||||
|
color: Theme.of(context).colorScheme.secondary,
|
||||||
|
strokeCap: StrokeCap.round,
|
||||||
|
),
|
||||||
|
));
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,5 @@
|
|||||||
// Dart imports:
|
// Dart imports:
|
||||||
|
import 'dart:convert';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
// Flutter imports:
|
// Flutter imports:
|
||||||
@ -8,6 +9,8 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:epub_view/epub_view.dart';
|
import 'package:epub_view/epub_view.dart';
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
import 'package:open_file/open_file.dart';
|
import 'package:open_file/open_file.dart';
|
||||||
|
import 'package:openlib/services/database.dart';
|
||||||
|
import 'package:vocsy_epub_viewer/epub_viewer.dart';
|
||||||
|
|
||||||
// Project imports:
|
// Project imports:
|
||||||
import 'package:openlib/services/files.dart' show getFilePath;
|
import 'package:openlib/services/files.dart' show getFilePath;
|
||||||
@ -24,23 +27,48 @@ Future<void> launchEpubViewer(
|
|||||||
required BuildContext context,
|
required BuildContext context,
|
||||||
required WidgetRef ref}) async {
|
required WidgetRef ref}) async {
|
||||||
if (Platform.isAndroid || Platform.isIOS) {
|
if (Platform.isAndroid || Platform.isIOS) {
|
||||||
|
MyLibraryDb dataBase = MyLibraryDb.instance;
|
||||||
String path = await getFilePath(fileName);
|
String path = await getFilePath(fileName);
|
||||||
bool openWithExternalApp = ref.watch(openEpubWithExternalAppProvider);
|
bool openWithExternalApp = ref.watch(openEpubWithExternalAppProvider);
|
||||||
|
String? epubConfig = await dataBase.getBookState(fileName);
|
||||||
|
|
||||||
if (openWithExternalApp) {
|
if (openWithExternalApp) {
|
||||||
await OpenFile.open(path, linuxByProcess: true);
|
await OpenFile.open(path, linuxByProcess: true);
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
// ignore: use_build_context_synchronously
|
VocsyEpub.setConfig(
|
||||||
Navigator.push(context,
|
// ignore: use_build_context_synchronously
|
||||||
MaterialPageRoute(builder: (BuildContext context) {
|
themeColor: Theme.of(context).colorScheme.secondary,
|
||||||
return EpubViewerWidget(
|
identifier: "iosBook",
|
||||||
fileName: fileName,
|
scrollDirection: EpubScrollDirection.HORIZONTAL,
|
||||||
);
|
);
|
||||||
}));
|
|
||||||
|
if ((epubConfig?.isNotEmpty ?? true) &&
|
||||||
|
(epubConfig != null) &&
|
||||||
|
(!(epubConfig.startsWith('epubcfi')))) {
|
||||||
|
VocsyEpub.open(path,
|
||||||
|
lastLocation: EpubLocator.fromJson(json.decode(epubConfig)));
|
||||||
|
} else {
|
||||||
|
VocsyEpub.open(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
VocsyEpub.locatorStream.listen((locator) async {
|
||||||
|
await saveEpubState(fileName, locator, ref);
|
||||||
|
// convert locator from string to json and save to your database to be retrieved later
|
||||||
|
});
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// ignore: use_build_context_synchronously
|
try {
|
||||||
showSnackBar(context: context, message: 'Unable to open pdf!');
|
// ignore: use_build_context_synchronously
|
||||||
|
Navigator.push(context,
|
||||||
|
MaterialPageRoute(builder: (BuildContext context) {
|
||||||
|
return EpubViewerWidget(
|
||||||
|
fileName: fileName,
|
||||||
|
);
|
||||||
|
}));
|
||||||
|
} catch (e) {
|
||||||
|
// ignore: use_build_context_synchronously
|
||||||
|
showSnackBar(context: context, message: 'Unable to open pdf!');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
154
lib/ui/home_page.dart
Normal file
154
lib/ui/home_page.dart
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
|
import 'package:openlib/state/state.dart';
|
||||||
|
import 'package:openlib/ui/categories_page.dart';
|
||||||
|
import 'package:openlib/ui/components/page_title_widget.dart';
|
||||||
|
import 'package:openlib/ui/trending_page.dart';
|
||||||
|
|
||||||
|
class HomePage extends ConsumerStatefulWidget {
|
||||||
|
const HomePage({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
ConsumerState<ConsumerStatefulWidget> createState() => _HomePageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _HomePageState extends ConsumerState<HomePage> {
|
||||||
|
final List<Widget> _pages = const [
|
||||||
|
TrendingPage(),
|
||||||
|
GenresPage(),
|
||||||
|
];
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
final selectedIndex = ref.watch(homePageSelectedIndexProvider);
|
||||||
|
return Scaffold(
|
||||||
|
body: Column(
|
||||||
|
children: [
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.only(left: 5, right: 5, top: 10),
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
TitleText(selectedIndex == 0 ? "Trending" : "Genres"),
|
||||||
|
PelletContainer(
|
||||||
|
selectedIndex: selectedIndex,
|
||||||
|
onTrendingSelected: () => {
|
||||||
|
ref.read(homePageSelectedIndexProvider.notifier).state = 0
|
||||||
|
},
|
||||||
|
onCategoriesSelected: () => {
|
||||||
|
ref.read(homePageSelectedIndexProvider.notifier).state = 1
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Expanded(child: _pages[selectedIndex]), // Display the selected page
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class PelletContainer extends StatelessWidget {
|
||||||
|
final int selectedIndex;
|
||||||
|
final VoidCallback onTrendingSelected;
|
||||||
|
final VoidCallback onCategoriesSelected;
|
||||||
|
|
||||||
|
const PelletContainer({
|
||||||
|
super.key,
|
||||||
|
required this.selectedIndex,
|
||||||
|
required this.onTrendingSelected,
|
||||||
|
required this.onCategoriesSelected,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Container(
|
||||||
|
height: 30,
|
||||||
|
width: 105,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(30),
|
||||||
|
color: Theme.of(context).colorScheme.secondary,
|
||||||
|
border: Border.all(color: Theme.of(context).colorScheme.secondary),
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
// Left Button (Trending)
|
||||||
|
Expanded(
|
||||||
|
child: GestureDetector(
|
||||||
|
onTap: onTrendingSelected,
|
||||||
|
child: AnimatedContainer(
|
||||||
|
duration: const Duration(milliseconds: 300),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: selectedIndex == 0
|
||||||
|
? Theme.of(context).colorScheme.secondary
|
||||||
|
: Theme.of(context).colorScheme.primary,
|
||||||
|
borderRadius: const BorderRadius.only(
|
||||||
|
topLeft: Radius.circular(25),
|
||||||
|
bottomLeft: Radius.circular(25),
|
||||||
|
topRight: Radius.circular(0),
|
||||||
|
bottomRight: Radius.circular(0),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: TextButton.icon(
|
||||||
|
onPressed: null, // Disable direct onPressed to avoid conflict
|
||||||
|
icon: Icon(
|
||||||
|
Icons.trending_up,
|
||||||
|
color: selectedIndex == 0
|
||||||
|
? Theme.of(context).colorScheme.primary
|
||||||
|
: Theme.of(context).colorScheme.tertiary,
|
||||||
|
),
|
||||||
|
label: const Text(''), // Empty label
|
||||||
|
style: TextButton.styleFrom(
|
||||||
|
backgroundColor: Colors.transparent,
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 8),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const VerticalDivider(
|
||||||
|
width: 0,
|
||||||
|
thickness: 1,
|
||||||
|
color: Colors.grey,
|
||||||
|
),
|
||||||
|
// Right Button (Categories)
|
||||||
|
Expanded(
|
||||||
|
child: GestureDetector(
|
||||||
|
onTap: onCategoriesSelected,
|
||||||
|
child: AnimatedContainer(
|
||||||
|
duration: const Duration(milliseconds: 300),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: selectedIndex == 1
|
||||||
|
? Theme.of(context).colorScheme.secondary
|
||||||
|
: Theme.of(context).colorScheme.primary,
|
||||||
|
borderRadius: const BorderRadius.only(
|
||||||
|
topLeft: Radius.circular(0),
|
||||||
|
bottomLeft: Radius.circular(0),
|
||||||
|
topRight: Radius.circular(25),
|
||||||
|
bottomRight: Radius.circular(25),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: TextButton.icon(
|
||||||
|
onPressed: null,
|
||||||
|
icon: Icon(
|
||||||
|
Icons.dashboard_rounded,
|
||||||
|
color: selectedIndex == 1
|
||||||
|
? Theme.of(context).colorScheme.primary
|
||||||
|
: Theme.of(context).colorScheme.tertiary,
|
||||||
|
),
|
||||||
|
label: const Text(''), // Empty label
|
||||||
|
style: TextButton.styleFrom(
|
||||||
|
backgroundColor: Colors.transparent,
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 8),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -6,6 +6,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|||||||
|
|
||||||
// Project imports:
|
// Project imports:
|
||||||
import 'package:openlib/services/database.dart';
|
import 'package:openlib/services/database.dart';
|
||||||
|
import 'package:openlib/services/share_book.dart';
|
||||||
import 'package:openlib/ui/components/book_info_widget.dart';
|
import 'package:openlib/ui/components/book_info_widget.dart';
|
||||||
import 'package:openlib/ui/components/file_buttons_widget.dart';
|
import 'package:openlib/ui/components/file_buttons_widget.dart';
|
||||||
|
|
||||||
@ -16,18 +17,40 @@ class BookPage extends StatelessWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
MyLibraryDb dataBase = MyLibraryDb.instance;
|
||||||
|
final bookInfo = dataBase.getId(id);
|
||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
backgroundColor: Theme.of(context).colorScheme.background,
|
backgroundColor: Theme.of(context).colorScheme.surface,
|
||||||
title: const Text("Openlib"),
|
title: const Text("Openlib"),
|
||||||
titleTextStyle: Theme.of(context).textTheme.displayLarge,
|
titleTextStyle: Theme.of(context).textTheme.displayLarge,
|
||||||
|
actions: [
|
||||||
|
FutureBuilder(
|
||||||
|
future: bookInfo,
|
||||||
|
builder: (BuildContext context, AsyncSnapshot<MyBook?> snapshot) {
|
||||||
|
if (snapshot.hasData &&
|
||||||
|
snapshot.data?.title != null &&
|
||||||
|
snapshot.data?.link != null) {
|
||||||
|
return IconButton(
|
||||||
|
icon: Icon(
|
||||||
|
Icons.share_sharp,
|
||||||
|
color: Theme.of(context).colorScheme.tertiary,
|
||||||
|
),
|
||||||
|
iconSize: 19.0,
|
||||||
|
onPressed: () async {
|
||||||
|
await shareBook(snapshot.data!.title, snapshot.data!.link,
|
||||||
|
snapshot.data?.thumbnail ?? '');
|
||||||
|
},
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return const SizedBox.shrink();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
],
|
||||||
),
|
),
|
||||||
body: Consumer(
|
body: Consumer(
|
||||||
builder: (BuildContext context, WidgetRef ref, _) {
|
builder: (BuildContext context, WidgetRef ref, _) {
|
||||||
MyLibraryDb dataBase = MyLibraryDb.instance;
|
|
||||||
|
|
||||||
final bookInfo = dataBase.getId(id);
|
|
||||||
|
|
||||||
return FutureBuilder(
|
return FutureBuilder(
|
||||||
future: bookInfo,
|
future: bookInfo,
|
||||||
builder: (BuildContext context, AsyncSnapshot<MyBook?> snapshot) {
|
builder: (BuildContext context, AsyncSnapshot<MyBook?> snapshot) {
|
||||||
|
@ -24,7 +24,7 @@ class ResultPage extends ConsumerWidget {
|
|||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
backgroundColor: Theme.of(context).colorScheme.background,
|
backgroundColor: Theme.of(context).colorScheme.surface,
|
||||||
title: const Text("Openlib"),
|
title: const Text("Openlib"),
|
||||||
titleTextStyle: Theme.of(context).textTheme.displayLarge,
|
titleTextStyle: Theme.of(context).textTheme.displayLarge,
|
||||||
),
|
),
|
||||||
@ -46,8 +46,8 @@ class ResultPage extends ConsumerWidget {
|
|||||||
title: i.title,
|
title: i.title,
|
||||||
author: i.author ?? "unknown",
|
author: i.author ?? "unknown",
|
||||||
publisher: i.publisher ?? "unknown",
|
publisher: i.publisher ?? "unknown",
|
||||||
thumbnail: i.thumbnail!,
|
thumbnail: i.thumbnail ?? '',
|
||||||
info: i.info,
|
info: i.info ?? '',
|
||||||
link: i.link,
|
link: i.link,
|
||||||
onClick: () {
|
onClick: () {
|
||||||
Navigator.push(context, MaterialPageRoute(
|
Navigator.push(context, MaterialPageRoute(
|
||||||
|
@ -7,11 +7,13 @@ import 'package:google_fonts/google_fonts.dart';
|
|||||||
// Project imports:
|
// Project imports:
|
||||||
import 'package:openlib/ui/extensions.dart';
|
import 'package:openlib/ui/extensions.dart';
|
||||||
|
|
||||||
|
final secondaryColor = '#FB0101'.toColor();
|
||||||
|
|
||||||
ThemeData lightTheme = ThemeData(
|
ThemeData lightTheme = ThemeData(
|
||||||
primaryColor: Colors.white,
|
primaryColor: Colors.white,
|
||||||
colorScheme: ColorScheme.light(
|
colorScheme: ColorScheme.light(
|
||||||
primary: Colors.white,
|
primary: Colors.white,
|
||||||
secondary: '#FB0101'.toColor(),
|
secondary: secondaryColor,
|
||||||
tertiary: Colors.black,
|
tertiary: Colors.black,
|
||||||
tertiaryContainer: '#F2F2F2'.toColor(),
|
tertiaryContainer: '#F2F2F2'.toColor(),
|
||||||
),
|
),
|
||||||
@ -36,18 +38,20 @@ ThemeData lightTheme = ThemeData(
|
|||||||
fontFamily: GoogleFonts.nunito().fontFamily,
|
fontFamily: GoogleFonts.nunito().fontFamily,
|
||||||
useMaterial3: true,
|
useMaterial3: true,
|
||||||
textSelectionTheme: TextSelectionThemeData(
|
textSelectionTheme: TextSelectionThemeData(
|
||||||
selectionColor: '#FB0101'.toColor(),
|
selectionColor: secondaryColor,
|
||||||
selectionHandleColor: '#FB0101'.toColor(),
|
selectionHandleColor: secondaryColor,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
ThemeData darkTheme = ThemeData(
|
ThemeData darkTheme = ThemeData(
|
||||||
primaryColor: Colors.black,
|
primaryColor: Colors.black,
|
||||||
|
scaffoldBackgroundColor: Colors.black,
|
||||||
colorScheme: ColorScheme.dark(
|
colorScheme: ColorScheme.dark(
|
||||||
primary: Colors.black,
|
primary: Colors.black,
|
||||||
secondary: '#FB0101'.toColor(),
|
secondary: secondaryColor,
|
||||||
tertiary: Colors.white,
|
tertiary: Colors.white,
|
||||||
tertiaryContainer: '#2B2B2B'.toColor(),
|
tertiaryContainer: '#141414'.toColor(),
|
||||||
|
surface: Colors.black,
|
||||||
),
|
),
|
||||||
textTheme: TextTheme(
|
textTheme: TextTheme(
|
||||||
displayLarge: const TextStyle(
|
displayLarge: const TextStyle(
|
||||||
@ -71,7 +75,7 @@ ThemeData darkTheme = ThemeData(
|
|||||||
fontFamily: GoogleFonts.nunito().fontFamily,
|
fontFamily: GoogleFonts.nunito().fontFamily,
|
||||||
useMaterial3: true,
|
useMaterial3: true,
|
||||||
textSelectionTheme: TextSelectionThemeData(
|
textSelectionTheme: TextSelectionThemeData(
|
||||||
selectionColor: '#FB0101'.toColor(),
|
selectionColor: secondaryColor,
|
||||||
selectionHandleColor: '#FB0101'.toColor(),
|
selectionHandleColor: secondaryColor,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
@ -7,7 +7,6 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|||||||
|
|
||||||
// Project imports:
|
// Project imports:
|
||||||
import 'package:openlib/ui/components/error_widget.dart';
|
import 'package:openlib/ui/components/error_widget.dart';
|
||||||
import 'package:openlib/ui/components/page_title_widget.dart';
|
|
||||||
import 'package:openlib/ui/results_page.dart';
|
import 'package:openlib/ui/results_page.dart';
|
||||||
import 'extensions.dart';
|
import 'extensions.dart';
|
||||||
|
|
||||||
@ -31,9 +30,6 @@ class TrendingPage extends ConsumerWidget {
|
|||||||
child: CustomScrollView(
|
child: CustomScrollView(
|
||||||
physics: const BouncingScrollPhysics(),
|
physics: const BouncingScrollPhysics(),
|
||||||
slivers: [
|
slivers: [
|
||||||
const SliverToBoxAdapter(
|
|
||||||
child: TitleText("Trending"),
|
|
||||||
),
|
|
||||||
SliverPadding(
|
SliverPadding(
|
||||||
padding: const EdgeInsets.all(5),
|
padding: const EdgeInsets.all(5),
|
||||||
sliver: SliverGrid(
|
sliver: SliverGrid(
|
||||||
|
@ -52,7 +52,7 @@ class _WebviewState extends ConsumerState<Webview> {
|
|||||||
onLoadStart: (controller, url) {},
|
onLoadStart: (controller, url) {},
|
||||||
onLoadStop: (controller, url) async {
|
onLoadStop: (controller, url) async {
|
||||||
String query =
|
String query =
|
||||||
"""document.querySelector('a[class="font-bold"]').href""";
|
"""var paragraphTag=document.querySelector('p[class="mb-4 text-xl font-bold"]');var anchorTagHref=paragraphTag.querySelector('a').href;var url=()=>{return anchorTagHref};url();""";
|
||||||
String? mirrorLink = await webViewController
|
String? mirrorLink = await webViewController
|
||||||
?.evaluateJavascript(source: query);
|
?.evaluateJavascript(source: query);
|
||||||
// final ipfsUrl = widget.url
|
// final ipfsUrl = widget.url
|
||||||
@ -62,7 +62,6 @@ class _WebviewState extends ConsumerState<Webview> {
|
|||||||
// await webViewController?.loadUrl(
|
// await webViewController?.loadUrl(
|
||||||
// urlRequest: URLRequest(
|
// urlRequest: URLRequest(
|
||||||
// url: WebUri('https://example.com/new-page')));
|
// url: WebUri('https://example.com/new-page')));
|
||||||
|
|
||||||
if (mirrorLink != null) {
|
if (mirrorLink != null) {
|
||||||
Future.delayed(const Duration(milliseconds: 70), () {
|
Future.delayed(const Duration(milliseconds: 70), () {
|
||||||
// ignore: use_build_context_synchronously
|
// ignore: use_build_context_synchronously
|
||||||
|
@ -9,7 +9,8 @@ import device_info_plus
|
|||||||
import flutter_inappwebview_macos
|
import flutter_inappwebview_macos
|
||||||
import open_file_mac
|
import open_file_mac
|
||||||
import path_provider_foundation
|
import path_provider_foundation
|
||||||
import sqflite
|
import share_plus
|
||||||
|
import sqflite_darwin
|
||||||
import url_launcher_macos
|
import url_launcher_macos
|
||||||
|
|
||||||
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
||||||
@ -17,6 +18,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
|||||||
InAppWebViewFlutterPlugin.register(with: registry.registrar(forPlugin: "InAppWebViewFlutterPlugin"))
|
InAppWebViewFlutterPlugin.register(with: registry.registrar(forPlugin: "InAppWebViewFlutterPlugin"))
|
||||||
OpenFilePlugin.register(with: registry.registrar(forPlugin: "OpenFilePlugin"))
|
OpenFilePlugin.register(with: registry.registrar(forPlugin: "OpenFilePlugin"))
|
||||||
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
|
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
|
||||||
|
SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin"))
|
||||||
SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
|
SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
|
||||||
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
|
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,13 @@
|
|||||||
PODS:
|
PODS:
|
||||||
- device_info_plus (0.0.1):
|
- device_info_plus (0.0.1):
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
|
- flutter_inappwebview_macos (0.0.1):
|
||||||
|
- FlutterMacOS
|
||||||
|
- OrderedSet (~> 5.0)
|
||||||
- FlutterMacOS (1.0.0)
|
- FlutterMacOS (1.0.0)
|
||||||
|
- open_file_mac (0.0.1):
|
||||||
|
- FlutterMacOS
|
||||||
|
- OrderedSet (5.0.0)
|
||||||
- path_provider_foundation (0.0.1):
|
- path_provider_foundation (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
@ -10,39 +16,45 @@ PODS:
|
|||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- url_launcher_macos (0.0.1):
|
- url_launcher_macos (0.0.1):
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- webview_flutter_wkwebview (0.0.1):
|
|
||||||
- Flutter
|
|
||||||
- FlutterMacOS
|
|
||||||
|
|
||||||
DEPENDENCIES:
|
DEPENDENCIES:
|
||||||
- device_info_plus (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos`)
|
- device_info_plus (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos`)
|
||||||
|
- flutter_inappwebview_macos (from `Flutter/ephemeral/.symlinks/plugins/flutter_inappwebview_macos/macos`)
|
||||||
- FlutterMacOS (from `Flutter/ephemeral`)
|
- FlutterMacOS (from `Flutter/ephemeral`)
|
||||||
|
- open_file_mac (from `Flutter/ephemeral/.symlinks/plugins/open_file_mac/macos`)
|
||||||
- path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`)
|
- path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`)
|
||||||
- sqflite (from `Flutter/ephemeral/.symlinks/plugins/sqflite/darwin`)
|
- sqflite (from `Flutter/ephemeral/.symlinks/plugins/sqflite/darwin`)
|
||||||
- url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`)
|
- url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`)
|
||||||
- webview_flutter_wkwebview (from `Flutter/ephemeral/.symlinks/plugins/webview_flutter_wkwebview/darwin`)
|
|
||||||
|
SPEC REPOS:
|
||||||
|
trunk:
|
||||||
|
- OrderedSet
|
||||||
|
|
||||||
EXTERNAL SOURCES:
|
EXTERNAL SOURCES:
|
||||||
device_info_plus:
|
device_info_plus:
|
||||||
:path: Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos
|
:path: Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos
|
||||||
|
flutter_inappwebview_macos:
|
||||||
|
:path: Flutter/ephemeral/.symlinks/plugins/flutter_inappwebview_macos/macos
|
||||||
FlutterMacOS:
|
FlutterMacOS:
|
||||||
:path: Flutter/ephemeral
|
:path: Flutter/ephemeral
|
||||||
|
open_file_mac:
|
||||||
|
:path: Flutter/ephemeral/.symlinks/plugins/open_file_mac/macos
|
||||||
path_provider_foundation:
|
path_provider_foundation:
|
||||||
:path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin
|
:path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin
|
||||||
sqflite:
|
sqflite:
|
||||||
:path: Flutter/ephemeral/.symlinks/plugins/sqflite/darwin
|
:path: Flutter/ephemeral/.symlinks/plugins/sqflite/darwin
|
||||||
url_launcher_macos:
|
url_launcher_macos:
|
||||||
:path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos
|
:path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos
|
||||||
webview_flutter_wkwebview:
|
|
||||||
:path: Flutter/ephemeral/.symlinks/plugins/webview_flutter_wkwebview/darwin
|
|
||||||
|
|
||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
device_info_plus: ce1b7762849d3ec103d0e0517299f2db7ad60720
|
device_info_plus: ce1b7762849d3ec103d0e0517299f2db7ad60720
|
||||||
|
flutter_inappwebview_macos: 9600c9df9fdb346aaa8933812009f8d94304203d
|
||||||
FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
|
FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
|
||||||
|
open_file_mac: 0e554648e2a87ce59e9438e3e5ca3e552e90d89a
|
||||||
|
OrderedSet: aaeb196f7fef5a9edf55d89760da9176ad40b93c
|
||||||
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
|
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
|
||||||
sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec
|
sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec
|
||||||
url_launcher_macos: 5f437abeda8c85500ceb03f5c1938a8c5a705399
|
url_launcher_macos: 5f437abeda8c85500ceb03f5c1938a8c5a705399
|
||||||
webview_flutter_wkwebview: 0982481e3d9c78fd5c6f62a002fcd24fc791f1e4
|
|
||||||
|
|
||||||
PODFILE CHECKSUM: 236401fc2c932af29a9fcf0e97baeeb2d750d367
|
PODFILE CHECKSUM: 236401fc2c932af29a9fcf0e97baeeb2d750d367
|
||||||
|
|
||||||
|
244
pubspec.lock
244
pubspec.lock
@ -13,10 +13,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: args
|
name: args
|
||||||
sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a"
|
sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.5.0"
|
version: "2.6.0"
|
||||||
async:
|
async:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -109,10 +109,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: crypto
|
name: crypto
|
||||||
sha256: ec30d999af904f33454ba22ed9a86162b35e52b44ac4807d1d93c288041d7d27
|
sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.5"
|
version: "3.0.6"
|
||||||
csslib:
|
csslib:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -157,10 +157,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: dio
|
name: dio
|
||||||
sha256: "0dfb6b6a1979dac1c1245e17cef824d7b452ea29bd33d3467269f9bef3715fb0"
|
sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.6.0"
|
version: "5.7.0"
|
||||||
dio_web_adapter:
|
dio_web_adapter:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -213,26 +213,26 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: file
|
name: file
|
||||||
sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c"
|
sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "7.0.0"
|
version: "7.0.1"
|
||||||
file_picker:
|
file_picker:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: file_picker
|
name: file_picker
|
||||||
sha256: "167bb619cdddaa10ef2907609feb8a79c16dfa479d3afaf960f8e223f754bf12"
|
sha256: aac85f20436608e01a6ffd1fdd4e746a7f33c93a2c83752e626bdfaea139b877
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "8.1.2"
|
version: "8.1.3"
|
||||||
fixnum:
|
fixnum:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: fixnum
|
name: fixnum
|
||||||
sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1"
|
sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.0"
|
version: "1.1.1"
|
||||||
flutter:
|
flutter:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description: flutter
|
description: flutter
|
||||||
@ -258,18 +258,18 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: flutter_inappwebview
|
name: flutter_inappwebview
|
||||||
sha256: "3e9a443a18ecef966fb930c3a76ca5ab6a7aafc0c7b5e14a4a850cf107b09959"
|
sha256: "80092d13d3e29b6227e25b67973c67c7210bd5e35c4b747ca908e31eb71a46d5"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.0.0"
|
version: "6.1.5"
|
||||||
flutter_inappwebview_android:
|
flutter_inappwebview_android:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: flutter_inappwebview_android
|
name: flutter_inappwebview_android
|
||||||
sha256: d247f6ed417f1f8c364612fa05a2ecba7f775c8d0c044c1d3b9ee33a6515c421
|
sha256: "62557c15a5c2db5d195cb3892aab74fcaec266d7b86d59a6f0027abd672cddba"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.13"
|
version: "1.1.3"
|
||||||
flutter_inappwebview_internal_annotations:
|
flutter_inappwebview_internal_annotations:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -282,34 +282,42 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: flutter_inappwebview_ios
|
name: flutter_inappwebview_ios
|
||||||
sha256: f363577208b97b10b319cd0c428555cd8493e88b468019a8c5635a0e4312bd0f
|
sha256: "5818cf9b26cf0cbb0f62ff50772217d41ea8d3d9cc00279c45f8aabaa1b4025d"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.13"
|
version: "1.1.2"
|
||||||
flutter_inappwebview_macos:
|
flutter_inappwebview_macos:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: flutter_inappwebview_macos
|
name: flutter_inappwebview_macos
|
||||||
sha256: b55b9e506c549ce88e26580351d2c71d54f4825901666bd6cfa4be9415bb2636
|
sha256: c1fbb86af1a3738e3541364d7d1866315ffb0468a1a77e34198c9be571287da1
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.11"
|
version: "1.1.2"
|
||||||
flutter_inappwebview_platform_interface:
|
flutter_inappwebview_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: flutter_inappwebview_platform_interface
|
name: flutter_inappwebview_platform_interface
|
||||||
sha256: "545fd4c25a07d2775f7d5af05a979b2cac4fbf79393b0a7f5d33ba39ba4f6187"
|
sha256: cf5323e194096b6ede7a1ca808c3e0a078e4b33cc3f6338977d75b4024ba2500
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.10"
|
version: "1.3.0+1"
|
||||||
flutter_inappwebview_web:
|
flutter_inappwebview_web:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: flutter_inappwebview_web
|
name: flutter_inappwebview_web
|
||||||
sha256: d8c680abfb6fec71609a700199635d38a744df0febd5544c5a020bd73de8ee07
|
sha256: "55f89c83b0a0d3b7893306b3bb545ba4770a4df018204917148ebb42dc14a598"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.8"
|
version: "1.1.2"
|
||||||
|
flutter_inappwebview_windows:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: flutter_inappwebview_windows
|
||||||
|
sha256: "8b4d3a46078a2cdc636c4a3d10d10f2a16882f6be607962dbfff8874d1642055"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.6.0"
|
||||||
flutter_launcher_icons:
|
flutter_launcher_icons:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
@ -330,26 +338,26 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: flutter_pdfview
|
name: flutter_pdfview
|
||||||
sha256: a9055bf920c7095bf08c2781db431ba23577aa5da5a056a7152dc89a18fbec6f
|
sha256: "6b625b32a9102780236554dff42f2d798b4627704ab4a3153c07f2134a52b697"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.2"
|
version: "1.3.3"
|
||||||
flutter_plugin_android_lifecycle:
|
flutter_plugin_android_lifecycle:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: flutter_plugin_android_lifecycle
|
name: flutter_plugin_android_lifecycle
|
||||||
sha256: "9ee02950848f61c4129af3d6ec84a1cfc0e47931abc746b03e7a3bc3e8ff6eda"
|
sha256: "9b78450b89f059e96c9ebb355fa6b3df1d6b330436e0b885fb49594c41721398"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.22"
|
version: "2.0.23"
|
||||||
flutter_riverpod:
|
flutter_riverpod:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: flutter_riverpod
|
name: flutter_riverpod
|
||||||
sha256: "0f1974eff5bbe774bf1d870e406fc6f29e3d6f1c46bd9c58e7172ff68a785d7d"
|
sha256: "711d916456563f715bde1e139d7cfdca009f8264befab3ac9f8ded8b6ec26405"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.5.1"
|
version: "2.5.3"
|
||||||
flutter_svg:
|
flutter_svg:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@ -401,7 +409,7 @@ packages:
|
|||||||
source: hosted
|
source: hosted
|
||||||
version: "0.15.4"
|
version: "0.15.4"
|
||||||
http:
|
http:
|
||||||
dependency: transitive
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: http
|
name: http
|
||||||
sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010
|
sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010
|
||||||
@ -432,14 +440,6 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.6.0"
|
version: "4.6.0"
|
||||||
js:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: js
|
|
||||||
sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "0.6.7"
|
|
||||||
json_annotation:
|
json_annotation:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -512,6 +512,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.15.0"
|
version: "1.15.0"
|
||||||
|
mime:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: mime
|
||||||
|
sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.0"
|
||||||
octo_image:
|
octo_image:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -524,68 +532,68 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: open_file
|
name: open_file
|
||||||
sha256: de371f549b1320a48980952473fae1903d4927975506534c8ea4643642eb5f98
|
sha256: "737641e823d568a12b63494855010ceef286bcdf8f88d0a831e53229a5e850e8"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.5.3"
|
version: "3.5.9"
|
||||||
open_file_android:
|
open_file_android:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: open_file_android
|
name: open_file_android
|
||||||
sha256: b5e1a2e9c5ea8e256b015403e94299039627c7205c2a5e6bb426c33235b6ca9a
|
sha256: "58141fcaece2f453a9684509a7275f231ac0e3d6ceb9a5e6de310a7dff9084aa"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.2"
|
version: "1.0.6"
|
||||||
open_file_ios:
|
open_file_ios:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: open_file_ios
|
name: open_file_ios
|
||||||
sha256: "8d9c03495cf14ca70bdbf191894b822ba3b2629cc0046ee311cbbe504db66c44"
|
sha256: "02996f01e5f6863832068e97f8f3a5ef9b613516db6897f373b43b79849e4d07"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.2"
|
version: "1.0.3"
|
||||||
open_file_linux:
|
open_file_linux:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: open_file_linux
|
name: open_file_linux
|
||||||
sha256: cd2088722048b9c40f8615c6d83005fe0726e0e447e9cdfb40c2b65477291f7d
|
sha256: d189f799eecbb139c97f8bc7d303f9e720954fa4e0fa1b0b7294767e5f2d7550
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.0.4"
|
version: "0.0.5"
|
||||||
open_file_mac:
|
open_file_mac:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: open_file_mac
|
name: open_file_mac
|
||||||
sha256: "9d809f528cccc6dc9390caf50893eae9a6944e0f3b8a2558c7ad19e91c9244a1"
|
sha256: dd1570bd12601b4d50fda3609c1662382f17ee403b47f0d74d737de603a39ec6
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.1"
|
version: "1.0.2"
|
||||||
open_file_platform_interface:
|
open_file_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: open_file_platform_interface
|
name: open_file_platform_interface
|
||||||
sha256: "14c50efb1a9667cb96e4fa68d601e6ad348fe337b02789834029b37ae3631498"
|
sha256: "101b424ca359632699a7e1213e83d025722ab668b9fd1412338221bf9b0e5757"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.2"
|
version: "1.0.3"
|
||||||
open_file_web:
|
open_file_web:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: open_file_web
|
name: open_file_web
|
||||||
sha256: ba35c6f38c21c2bb4268a80927bb828353dda0edfce92e274e0b9639e4f31360
|
sha256: e3dbc9584856283dcb30aef5720558b90f88036360bd078e494ab80a80130c4f
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.0.2"
|
version: "0.0.4"
|
||||||
open_file_windows:
|
open_file_windows:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: open_file_windows
|
name: open_file_windows
|
||||||
sha256: "2f4318d2d3958ec8d63b6dd4430c15b1fcb2fe7a2113e83c734584501a5c6d81"
|
sha256: d26c31ddf935a94a1a3aa43a23f4fff8a5ff4eea395fe7a8cb819cf55431c875
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.0.2"
|
version: "0.0.3"
|
||||||
path:
|
path:
|
||||||
dependency: transitive
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: path
|
name: path
|
||||||
sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
|
sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
|
||||||
@ -612,10 +620,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: path_provider_android
|
name: path_provider_android
|
||||||
sha256: "6f01f8e37ec30b07bc424b4deabac37cacb1bc7e2e515ad74486039918a37eb7"
|
sha256: c464428172cb986b758c6d1724c603097febb8fb855aa265aeecc9280c294d4a
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.2.10"
|
version: "2.2.12"
|
||||||
path_provider_foundation:
|
path_provider_foundation:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -660,10 +668,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: permission_handler_android
|
name: permission_handler_android
|
||||||
sha256: "76e4ab092c1b240d31177bb64d2b0bea43f43d0e23541ec866151b9f7b2490fa"
|
sha256: "71bbecfee799e65aff7c744761a57e817e73b738fedf62ab7afd5593da21f9f1"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "12.0.12"
|
version: "12.0.13"
|
||||||
permission_handler_apple:
|
permission_handler_apple:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -684,10 +692,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: permission_handler_platform_interface
|
name: permission_handler_platform_interface
|
||||||
sha256: fe0ffe274d665be8e34f9c59705441a7d248edebbe5d9e3ec2665f88b79358ea
|
sha256: e9c8eadee926c4532d0305dff94b85bf961f16759c3af791486613152af4b4f9
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.2.2"
|
version: "4.2.3"
|
||||||
permission_handler_windows:
|
permission_handler_windows:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -708,10 +716,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: platform
|
name: platform
|
||||||
sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65"
|
sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.5"
|
version: "3.1.6"
|
||||||
plugin_platform_interface:
|
plugin_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -732,10 +740,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: riverpod
|
name: riverpod
|
||||||
sha256: f21b32ffd26a36555e501b04f4a5dca43ed59e16343f1a30c13632b2351dfa4d
|
sha256: c86fedfb45dd1da98ee6493dd9374325cdf494e7d523ebfb0c387eecc5f7b5c9
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.5.1"
|
version: "2.5.3"
|
||||||
rxdart:
|
rxdart:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -752,6 +760,22 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.3.8"
|
version: "0.3.8"
|
||||||
|
share_plus:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: share_plus
|
||||||
|
sha256: "334fcdf0ef9c0df0e3b428faebcac9568f35c747d59831474b2fc56e156d244e"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "10.1.0"
|
||||||
|
share_plus_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: share_plus_platform_interface
|
||||||
|
sha256: c57c0bbfec7142e3a0f55633be504b796af72e60e3c791b44d5a017b985f7a48
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "5.0.1"
|
||||||
sky_engine:
|
sky_engine:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description: flutter
|
description: flutter
|
||||||
@ -777,26 +801,50 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: sqflite
|
name: sqflite
|
||||||
sha256: a43e5a27235518c03ca238e7b4732cf35eabe863a369ceba6cbefa537a66f16d
|
sha256: "79a297dc3cc137e758c6a4baf83342b039e5a6d2436fcdf3f96a00adaaf2ad62"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.3.3+1"
|
version: "2.4.0"
|
||||||
|
sqflite_android:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: sqflite_android
|
||||||
|
sha256: "78f489aab276260cdd26676d2169446c7ecd3484bbd5fead4ca14f3ed4dd9ee3"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.4.0"
|
||||||
sqflite_common:
|
sqflite_common:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: sqflite_common
|
name: sqflite_common
|
||||||
sha256: "7b41b6c3507854a159e24ae90a8e3e9cc01eb26a477c118d6dca065b5f55453e"
|
sha256: "4468b24876d673418a7b7147e5a08a715b4998a7ae69227acafaab762e0e5490"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.5.4+2"
|
version: "2.5.4+5"
|
||||||
sqflite_common_ffi:
|
sqflite_common_ffi:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: sqflite_common_ffi
|
name: sqflite_common_ffi
|
||||||
sha256: "4d6137c29e930d6e4a8ff373989dd9de7bac12e3bc87bce950f6e844e8ad3bb5"
|
sha256: d316908f1537725427ff2827a5c5f3b2c1bc311caed985fe3c9b10939c9e11ca
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.3.3"
|
version: "2.3.4"
|
||||||
|
sqflite_darwin:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: sqflite_darwin
|
||||||
|
sha256: "769733dddf94622d5541c73e4ddc6aa7b252d865285914b6fcd54a63c4b4f027"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.4.1-1"
|
||||||
|
sqflite_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: sqflite_platform_interface
|
||||||
|
sha256: "8dd4515c7bdcae0a785b0062859336de775e8c65db81ae33dd5445f35be61920"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.4.0"
|
||||||
sqlite3:
|
sqlite3:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -841,10 +889,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: synchronized
|
name: synchronized
|
||||||
sha256: a824e842b8a054f91a728b783c177c1e4731f6b124f9192468457a8913371255
|
sha256: "69fe30f3a8b04a0be0c15ae6490fc859a78ef4c43ae2dd5e8a623d45bfcf9225"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.2.0"
|
version: "3.3.0+3"
|
||||||
term_glyph:
|
term_glyph:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -873,10 +921,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: typed_data
|
name: typed_data
|
||||||
sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c
|
sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.2"
|
version: "1.4.0"
|
||||||
universal_file:
|
universal_file:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -889,18 +937,18 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: url_launcher
|
name: url_launcher
|
||||||
sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3"
|
sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.3.0"
|
version: "6.3.1"
|
||||||
url_launcher_android:
|
url_launcher_android:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_android
|
name: url_launcher_android
|
||||||
sha256: e35a698ac302dd68e41f73250bd9517fe3ab5fa4f18fe4647a0872db61bacbab
|
sha256: "8fc3bae0b68c02c47c5c86fa8bfa74471d42687b0eded01b78de87872db745e2"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.3.10"
|
version: "6.3.12"
|
||||||
url_launcher_ios:
|
url_launcher_ios:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -921,10 +969,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_macos
|
name: url_launcher_macos
|
||||||
sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de"
|
sha256: "769549c999acdb42b8bcfa7c43d72bf79a382ca7441ab18a808e101149daf672"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.2.0"
|
version: "3.2.1"
|
||||||
url_launcher_platform_interface:
|
url_launcher_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -945,18 +993,18 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_windows
|
name: url_launcher_windows
|
||||||
sha256: "49c10f879746271804767cb45551ec5592cdab00ee105c06dddde1a98f73b185"
|
sha256: "44cf3aabcedde30f2dba119a9dea3b0f2672fbe6fa96e85536251d678216b3c4"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.2"
|
version: "3.1.3"
|
||||||
uuid:
|
uuid:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: uuid
|
name: uuid
|
||||||
sha256: f33d6bb662f0e4f79dcd7ada2e6170f3b3a2530c28fc41f49a411ddedd576a77
|
sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.5.0"
|
version: "4.5.1"
|
||||||
vector_graphics:
|
vector_graphics:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -997,38 +1045,46 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "14.2.5"
|
version: "14.2.5"
|
||||||
|
vocsy_epub_viewer:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: vocsy_epub_viewer
|
||||||
|
sha256: "4fe32c3f3e2841448423e3c309d12793146bc96f25571153a1d618ddb352b90a"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.0.0"
|
||||||
web:
|
web:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: web
|
name: web
|
||||||
sha256: d43c1d6b787bf0afad444700ae7f4db8827f701bc61c255ac8d328c6f4d52062
|
sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.0"
|
version: "1.1.0"
|
||||||
win32:
|
win32:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: win32
|
name: win32
|
||||||
sha256: "68d1e89a91ed61ad9c370f9f8b6effed9ae5e0ede22a270bdfa6daf79fc2290a"
|
sha256: "2735daae5150e8b1dfeb3eb0544b4d3af0061e9e82cef063adcd583bdae4306a"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.5.4"
|
version: "5.7.0"
|
||||||
win32_registry:
|
win32_registry:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: win32_registry
|
name: win32_registry
|
||||||
sha256: "723b7f851e5724c55409bb3d5a32b203b3afe8587eaf5dafb93a5fed8ecda0d6"
|
sha256: "21ec76dfc731550fd3e2ce7a33a9ea90b828fdf19a5c3bcf556fa992cfa99852"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.4"
|
version: "1.1.5"
|
||||||
xdg_directories:
|
xdg_directories:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: xdg_directories
|
name: xdg_directories
|
||||||
sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d
|
sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.4"
|
version: "1.1.0"
|
||||||
xml:
|
xml:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -16,7 +16,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev
|
|||||||
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
||||||
# In Windows, build-name is used as the major, minor, and patch parts
|
# In Windows, build-name is used as the major, minor, and patch parts
|
||||||
# of the product and file versions while build-number is used as the build suffix.
|
# of the product and file versions while build-number is used as the build suffix.
|
||||||
version: 1.0.7+1
|
version: 1.0.10+13
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ">=3.3.0 <4.0.0"
|
sdk: ">=3.3.0 <4.0.0"
|
||||||
@ -36,6 +36,7 @@ dependencies:
|
|||||||
|
|
||||||
flutter_pdfview: ^1.2.7
|
flutter_pdfview: ^1.2.7
|
||||||
epub_view: ^3.2.0
|
epub_view: ^3.2.0
|
||||||
|
vocsy_epub_viewer: ^3.0.0
|
||||||
# syncfusion_flutter_pdfviewer: ^22.2.5
|
# syncfusion_flutter_pdfviewer: ^22.2.5
|
||||||
# pdfx: ^2.4.0
|
# pdfx: ^2.4.0
|
||||||
|
|
||||||
@ -62,6 +63,9 @@ dependencies:
|
|||||||
file_picker: ^8.1.2
|
file_picker: ^8.1.2
|
||||||
device_info_plus: ^10.1.2
|
device_info_plus: ^10.1.2
|
||||||
flutter_inappwebview: ^6.0.0
|
flutter_inappwebview: ^6.0.0
|
||||||
|
http: ^1.2.2
|
||||||
|
path: ^1.9.0
|
||||||
|
share_plus: ^10.1.0
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
import_sorter: ^4.6.0
|
import_sorter: ^4.6.0
|
||||||
|
@ -6,12 +6,18 @@
|
|||||||
|
|
||||||
#include "generated_plugin_registrant.h"
|
#include "generated_plugin_registrant.h"
|
||||||
|
|
||||||
|
#include <flutter_inappwebview_windows/flutter_inappwebview_windows_plugin_c_api.h>
|
||||||
#include <permission_handler_windows/permission_handler_windows_plugin.h>
|
#include <permission_handler_windows/permission_handler_windows_plugin.h>
|
||||||
|
#include <share_plus/share_plus_windows_plugin_c_api.h>
|
||||||
#include <url_launcher_windows/url_launcher_windows.h>
|
#include <url_launcher_windows/url_launcher_windows.h>
|
||||||
|
|
||||||
void RegisterPlugins(flutter::PluginRegistry* registry) {
|
void RegisterPlugins(flutter::PluginRegistry* registry) {
|
||||||
|
FlutterInappwebviewWindowsPluginCApiRegisterWithRegistrar(
|
||||||
|
registry->GetRegistrarForPlugin("FlutterInappwebviewWindowsPluginCApi"));
|
||||||
PermissionHandlerWindowsPluginRegisterWithRegistrar(
|
PermissionHandlerWindowsPluginRegisterWithRegistrar(
|
||||||
registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin"));
|
registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin"));
|
||||||
|
SharePlusWindowsPluginCApiRegisterWithRegistrar(
|
||||||
|
registry->GetRegistrarForPlugin("SharePlusWindowsPluginCApi"));
|
||||||
UrlLauncherWindowsRegisterWithRegistrar(
|
UrlLauncherWindowsRegisterWithRegistrar(
|
||||||
registry->GetRegistrarForPlugin("UrlLauncherWindows"));
|
registry->GetRegistrarForPlugin("UrlLauncherWindows"));
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,9 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
list(APPEND FLUTTER_PLUGIN_LIST
|
list(APPEND FLUTTER_PLUGIN_LIST
|
||||||
|
flutter_inappwebview_windows
|
||||||
permission_handler_windows
|
permission_handler_windows
|
||||||
|
share_plus
|
||||||
url_launcher_windows
|
url_launcher_windows
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user