~cytrogen/fluent-reader-mobile

dbd02217701c7c100a42547657eca94ed65ab405 — Haoyuan Liu 3 years ago 38a0d41 + 02ba12c
Merge pull request #68 from yang991178/1.0.3

Version 1.0.3
M android/app/build.gradle => android/app/build.gradle +1 -1
@@ 32,7 32,7 @@ if (keystorePropertiesFile.exists()) {
}

android {
    compileSdkVersion 29
    compileSdkVersion 31

    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'

M android/app/src/main/AndroidManifest.xml => android/app/src/main/AndroidManifest.xml +1 -1
@@ 9,7 9,7 @@
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <application
        android:name="io.flutter.app.FlutterApplication"
        android:name="${applicationName}"
        android:label="Fluent Reader"
        android:icon="@mipmap/ic_launcher"
        android:usesCleartextTraffic="true">

M android/build.gradle => android/build.gradle +2 -2
@@ 1,12 1,12 @@
buildscript {
    ext.kotlin_version = '1.3.50'
    ext.kotlin_version = '1.7.0'
    repositories {
        google()
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.5.0'
        classpath 'com.android.tools.build:gradle:7.0.2'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

M android/gradle/wrapper/gradle-wrapper.properties => android/gradle/wrapper/gradle-wrapper.properties +1 -1
@@ 3,4 3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip

M ios/Podfile => ios/Podfile +4 -0
@@ 37,5 37,9 @@ end
post_install do |installer|
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
    target.build_configurations.each do |config|
      config.build_settings['ENABLE_BITCODE'] = 'NO'
        config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '10.0'
    end
  end
end

M ios/Podfile.lock => ios/Podfile.lock +23 -23
@@ 5,32 5,32 @@ PODS:
  - FMDB/standard (2.7.5)
  - package_info (0.0.1):
    - Flutter
  - path_provider (0.0.1):
  - path_provider_ios (0.0.1):
    - Flutter
  - share (0.0.1):
    - Flutter
  - shared_preferences (0.0.1):
  - shared_preferences_ios (0.0.1):
    - Flutter
  - sqflite (0.0.2):
    - Flutter
    - FMDB (>= 2.7.5)
  - uni_links (0.0.1):
    - Flutter
  - url_launcher (0.0.1):
  - url_launcher_ios (0.0.1):
    - Flutter
  - webview_flutter (0.0.1):
  - webview_flutter_wkwebview (0.0.1):
    - Flutter

DEPENDENCIES:
  - Flutter (from `Flutter`)
  - package_info (from `.symlinks/plugins/package_info/ios`)
  - path_provider (from `.symlinks/plugins/path_provider/ios`)
  - path_provider_ios (from `.symlinks/plugins/path_provider_ios/ios`)
  - share (from `.symlinks/plugins/share/ios`)
  - shared_preferences (from `.symlinks/plugins/shared_preferences/ios`)
  - shared_preferences_ios (from `.symlinks/plugins/shared_preferences_ios/ios`)
  - sqflite (from `.symlinks/plugins/sqflite/ios`)
  - uni_links (from `.symlinks/plugins/uni_links/ios`)
  - url_launcher (from `.symlinks/plugins/url_launcher/ios`)
  - webview_flutter (from `.symlinks/plugins/webview_flutter/ios`)
  - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
  - webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/ios`)

SPEC REPOS:
  trunk:


@@ 41,33 41,33 @@ EXTERNAL SOURCES:
    :path: Flutter
  package_info:
    :path: ".symlinks/plugins/package_info/ios"
  path_provider:
    :path: ".symlinks/plugins/path_provider/ios"
  path_provider_ios:
    :path: ".symlinks/plugins/path_provider_ios/ios"
  share:
    :path: ".symlinks/plugins/share/ios"
  shared_preferences:
    :path: ".symlinks/plugins/shared_preferences/ios"
  shared_preferences_ios:
    :path: ".symlinks/plugins/shared_preferences_ios/ios"
  sqflite:
    :path: ".symlinks/plugins/sqflite/ios"
  uni_links:
    :path: ".symlinks/plugins/uni_links/ios"
  url_launcher:
    :path: ".symlinks/plugins/url_launcher/ios"
  webview_flutter:
    :path: ".symlinks/plugins/webview_flutter/ios"
  url_launcher_ios:
    :path: ".symlinks/plugins/url_launcher_ios/ios"
  webview_flutter_wkwebview:
    :path: ".symlinks/plugins/webview_flutter_wkwebview/ios"

SPEC CHECKSUMS:
  Flutter: 434fef37c0980e73bb6479ef766c45957d4b510c
  Flutter: 50d75fe2f02b26cc09d224853bb45737f8b3214a
  FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
  package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62
  path_provider: abfe2b5c733d04e238b0d8691db0cfd63a27a93c
  path_provider_ios: 14f3d2fd28c4fdb42f44e0f751d12861c43cee02
  share: 0b2c3e82132f5888bccca3351c504d0003b3b410
  shared_preferences: af6bfa751691cdc24be3045c43ec037377ada40d
  shared_preferences_ios: 548a61f8053b9b8a49ac19c1ffbc8b92c50d68ad
  sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904
  uni_links: d97da20c7701486ba192624d99bffaaffcfc298a
  url_launcher: 6fef411d543ceb26efce54b05a0a40bfd74cbbef
  webview_flutter: 3603125dfd3bcbc9d8d418c3f80aeecf331c068b
  url_launcher_ios: 839c58cdb4279282219f5e248c3321761ff3c4de
  webview_flutter_wkwebview: b7e70ef1ddded7e69c796c7390ee74180182971f

PODFILE CHECKSUM: aafe91acc616949ddb318b77800a7f51bffa2a4c
PODFILE CHECKSUM: c228b831dc9a93a7cc7fac97cfb31e9d63a09fc8

COCOAPODS: 1.10.1
COCOAPODS: 1.11.3

M ios/Runner.xcodeproj/project.pbxproj => ios/Runner.xcodeproj/project.pbxproj +50 -38
@@ 9,8 9,8 @@
/* Begin PBXBuildFile section */
		1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
		3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
		69102B74C3FB3851516028E7 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F8E1696BEF66D76ADCCCFC5 /* Pods_Runner.framework */; };
		74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
		964F0316F934C372F9A289DD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABF26D092DCFA7AFECAE1958 /* Pods_Runner.framework */; };
		97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
		97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
		97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };


@@ 30,6 30,7 @@
/* End PBXCopyFilesBuildPhase section */

/* Begin PBXFileReference section */
		0F8E1696BEF66D76ADCCCFC5 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
		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>"; };
		324ACECE25C909AD00CD3591 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/LaunchScreen.strings; sourceTree = "<group>"; };


@@ 37,11 38,11 @@
		3271990C25BBF9C8008EA00E /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/LaunchScreen.strings"; sourceTree = "<group>"; };
		32AC73DE263AED42001F500B /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/LaunchScreen.strings; sourceTree = "<group>"; };
		3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
		40360520B75D3E668845C254 /* 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>"; };
		6462689146C9FF38DFEA397D /* 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>"; };
		41C31CD68862869459844070 /* 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>"; };
		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>"; };
		7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
		92992B7F89A00C3FEAF362EE /* 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>"; };
		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>"; };
		97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };


@@ 49,8 50,11 @@
		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>"; };
		97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
		ABF26D092DCFA7AFECAE1958 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
		F01A29D929A45761F4F09D5C /* 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>"; };
		E30184022867BA2B005DCAE6 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/LaunchScreen.strings; sourceTree = "<group>"; };
		E30184032867BA70005DCAE6 /* hr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hr; path = hr.lproj/LaunchScreen.strings; sourceTree = "<group>"; };
		E30184042867BA7D005DCAE6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/LaunchScreen.strings"; sourceTree = "<group>"; };
		E30184052867BAB1005DCAE6 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/LaunchScreen.strings; sourceTree = "<group>"; };
		FA1C5CF9893C1976B07DEA5C /* 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>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */


@@ 58,7 62,7 @@
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
				964F0316F934C372F9A289DD /* Pods_Runner.framework in Frameworks */,
				69102B74C3FB3851516028E7 /* Pods_Runner.framework in Frameworks */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};


@@ 68,9 72,9 @@
		84F9BE3D376DA5597C2A8714 /* Pods */ = {
			isa = PBXGroup;
			children = (
				6462689146C9FF38DFEA397D /* Pods-Runner.debug.xcconfig */,
				F01A29D929A45761F4F09D5C /* Pods-Runner.release.xcconfig */,
				40360520B75D3E668845C254 /* Pods-Runner.profile.xcconfig */,
				92992B7F89A00C3FEAF362EE /* Pods-Runner.debug.xcconfig */,
				41C31CD68862869459844070 /* Pods-Runner.release.xcconfig */,
				FA1C5CF9893C1976B07DEA5C /* Pods-Runner.profile.xcconfig */,
			);
			path = Pods;
			sourceTree = "<group>";


@@ 93,7 97,7 @@
				97C146F01CF9000F007C117D /* Runner */,
				97C146EF1CF9000F007C117D /* Products */,
				84F9BE3D376DA5597C2A8714 /* Pods */,
				C460029D548F8C8E174E1334 /* Frameworks */,
				AF41901B4D172011464D7F15 /* Frameworks */,
			);
			sourceTree = "<group>";
		};


@@ 121,10 125,10 @@
			path = Runner;
			sourceTree = "<group>";
		};
		C460029D548F8C8E174E1334 /* Frameworks */ = {
		AF41901B4D172011464D7F15 /* Frameworks */ = {
			isa = PBXGroup;
			children = (
				ABF26D092DCFA7AFECAE1958 /* Pods_Runner.framework */,
				0F8E1696BEF66D76ADCCCFC5 /* Pods_Runner.framework */,
			);
			name = Frameworks;
			sourceTree = "<group>";


@@ 136,14 140,14 @@
			isa = PBXNativeTarget;
			buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
			buildPhases = (
				FB456ADB33087A52E724411C /* [CP] Check Pods Manifest.lock */,
				0E377F3B35F2F701FC4437F8 /* [CP] Check Pods Manifest.lock */,
				9740EEB61CF901F6004384FC /* Run Script */,
				97C146EA1CF9000F007C117D /* Sources */,
				97C146EB1CF9000F007C117D /* Frameworks */,
				97C146EC1CF9000F007C117D /* Resources */,
				9705A1C41CF9048500538489 /* Embed Frameworks */,
				3B06AD1E1E4923F5004D2608 /* Thin Binary */,
				E2146C78C0EA89D54DE23218 /* [CP] Embed Pods Frameworks */,
				EDF7AD31FEF5B9471435A47E /* [CP] Embed Pods Frameworks */,
			);
			buildRules = (
			);


@@ 160,7 164,7 @@
		97C146E61CF9000F007C117D /* Project object */ = {
			isa = PBXProject;
			attributes = {
				LastUpgradeCheck = 1020;
				LastUpgradeCheck = 1300;
				ORGANIZATIONNAME = "";
				TargetAttributes = {
					97C146ED1CF9000F007C117D = {


@@ 179,6 183,10 @@
				"zh-Hans",
				es,
				de,
				fr,
				hr,
				"pt-BR",
				uk,
			);
			mainGroup = 97C146E51CF9000F007C117D;
			productRefGroup = 97C146EF1CF9000F007C117D /* Products */;


@@ 205,6 213,28 @@
/* End PBXResourcesBuildPhase section */

/* Begin PBXShellScriptBuildPhase section */
		0E377F3B35F2F701FC4437F8 /* [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;
		};
		3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
			isa = PBXShellScriptBuildPhase;
			buildActionMask = 2147483647;


@@ 233,7 263,7 @@
			shellPath = /bin/sh;
			shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
		};
		E2146C78C0EA89D54DE23218 /* [CP] Embed Pods Frameworks */ = {
		EDF7AD31FEF5B9471435A47E /* [CP] Embed Pods Frameworks */ = {
			isa = PBXShellScriptBuildPhase;
			buildActionMask = 2147483647;
			files = (


@@ 250,28 280,6 @@
			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
			showEnvVarsInLog = 0;
		};
		FB456ADB33087A52E724411C /* [CP] Check Pods Manifest.lock */ = {
			isa = PBXShellScriptBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			inputFileListPaths = (
			);
			inputPaths = (
				"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
				"${PODS_ROOT}/Manifest.lock",
			);
			name = "[CP] Check Pods Manifest.lock";
			outputFileListPaths = (
			);
			outputPaths = (
				"$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
			);
			runOnlyForDeploymentPostprocessing = 0;
			shellPath = /bin/sh;
			shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n    # print error to STDERR\n    echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n    exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
			showEnvVarsInLog = 0;
		};
/* End PBXShellScriptBuildPhase section */

/* Begin PBXSourcesBuildPhase section */


@@ 302,6 310,10 @@
				3271990C25BBF9C8008EA00E /* zh-Hans */,
				324ACECE25C909AD00CD3591 /* es */,
				32AC73DE263AED42001F500B /* de */,
				E30184022867BA2B005DCAE6 /* fr */,
				E30184032867BA70005DCAE6 /* hr */,
				E30184042867BA7D005DCAE6 /* pt-BR */,
				E30184052867BAB1005DCAE6 /* uk */,
			);
			name = LaunchScreen.storyboard;
			sourceTree = "<group>";

M ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme => ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +1 -1
@@ 1,6 1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
   LastUpgradeVersion = "1020"
   LastUpgradeVersion = "1300"
   version = "1.3">
   <BuildAction
      parallelizeBuildables = "YES"

M ios/Runner/Info.plist => ios/Runner/Info.plist +2 -0
@@ 63,5 63,7 @@
	<false/>
	<key>io.flutter.embedded_views_preview</key>
	<true/>
	<key>CADisableMinimumFrameDurationOnPhone</key>
	<true/>
</dict>
</plist>

A ios/Runner/fr.lproj/LaunchScreen.strings => ios/Runner/fr.lproj/LaunchScreen.strings +1 -0
@@ 0,0 1,1 @@


A ios/Runner/hr.lproj/LaunchScreen.strings => ios/Runner/hr.lproj/LaunchScreen.strings +1 -0
@@ 0,0 1,1 @@


A ios/Runner/pt-BR.lproj/LaunchScreen.strings => ios/Runner/pt-BR.lproj/LaunchScreen.strings +1 -0
@@ 0,0 1,1 @@


A ios/Runner/uk.lproj/LaunchScreen.strings => ios/Runner/uk.lproj/LaunchScreen.strings +1 -0
@@ 0,0 1,1 @@


M lib/components/cupertino_toolbar.dart => lib/components/cupertino_toolbar.dart +0 -1
@@ 7,7 7,6 @@
import 'package:fluent_reader_lite/utils/colors.dart';
import 'package:fluent_reader_lite/utils/global.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/widgets.dart';

/// Display a persistent bottom iOS styled toolbar for Cupertino theme
///

A lib/l10n/intl_fr.arb => lib/l10n/intl_fr.arb +98 -0
@@ 0,0 1,98 @@
{
    "all": "Tous les articles",
    "unread": "Non lu(s)",
    "starred": "Favoris",
    "allArticles": "Tous les articles",
    "allSubscriptions": "Tous vos abonnements",
    "filter": "filtres",
    "feed": "Feed",
    "subscriptions": "Abonnements",
    "groups": "Groupes",
    "settings": "Paramètres",
    "service": "Service",
    "preferences": "Préférences",
    "about": "A propos",
    "theme": "Thème",
    "followSystem": "Follow system",
    "light": "Mode jour",
    "dark": "Mode nuit",
    "language": "Langue",
    "markRead": "Marquer comme lu",
    "markUnread": "Marquer comme non lu",
    "markAll": "Tout marquer en lu",
    "markAbove": "Marquer ci-dessus comme lu",
    "markBelow": "Marquer ci-dessous comme lu",
    "daysAgo": "{days,plural, =1{Over 1 day ago}other{Over {days} days ago}}",
    "star": "Mettre en favoris",
    "unstar": "Enlever des favoris",
    "share": "Partager",
    "cancel": "Annuler",
    "close": "Fermer",
    "save": "Sauvegarder",
    "reading": "Lus",
    "account": "Compte",
    "app": "App",
    "general": "General",
    "version": "Version",
    "openSource": "Un projet open source",
    "feedback": "Feedback",
    "showThumb": "Voir la miniature",
    "showSnippet": "Voir un extrait",
    "dimRead": "Dim read articles",
    "gestures": "Gestes",
    "swipeLeft": "Glisser à gauche",
    "swipeRight": "Glisser à droite",
    "toggleRead": "Toggle read",
    "toggleStar": "Toggle star",
    "openMenu": "Ouvrir le menu",
    "openExternal": "Ouvrir dans un nouvel onglet",
    "fontSize": "Taille de police",
    "edit": "Editer",
    "name": "Nom",
    "icon": "Icon",
    "openTarget": "Default open target",
    "rssText": "Rss texte en entier",
    "loadWebpage": "Charger la page web",
    "loadFull": "Charger tout le contenu",
    "invalidValue": "Vaeurs invalides",
    "unreadOnly": "Non lus uniquement",
    "starredOnly": "Favoris uniquement",
    "search": "Recherche",
    "editKeyword": "Editer le clavier",
    "clearSearch": "Nettoyer les recherches",
    "storage": "Stockage",
    "clearCache": "Vider le cache",
    "autoDelete": "Automatiquement supprimer les items",
    "sync": "Synchroniser",
    "syncOnStart": "Synchroniser au démarrage",
    "inAppBrowser": "Navigateur intégré",
    "lastSyncSuccess": "Dernière synchronisation réussie",
    "lastSyncFailure": "La dernière synchronisation a échoué",
    "welcome": "Bienvenue",
    "credentials": "Credentials",
    "endpoint": "Endpoint",
    "username": "Pseudo",
    "password": "Mot de passe",
    "fetchLimit": "Limite de récupération",
    "enter": "Requis",
    "entered": "Entrer",
    "serviceFailure": "Impossible de se connecter au service.",
    "serviceFailureHint": "Veuillez vérifier la configuration du service ou l'état du réseau.",
    "logOut": "Se deconnecter",
    "logOutWarning": "Toutes les informations stockées sur votre téléphone vont être supprimées, êtes vous sure ?",
    "confirm": "Confirmer",
    "allLoaded": "Tout a été chargé",
    "removeAd": "Supprimer les pubs",
    "getApiKey": "Récupérer l'id et la clé de l'api",
    "getApiKeyHint": "In \"Préférences\" > \"Développeur\"",
    "prev": "Précédent",
    "next": "Suivant",
    "wentWrong": "Quelque chose s'est mal passé.",
    "retry": "Réessayer",
    "copy": "Copier",
    "errorLog": "Journal des erreurs",
    "unreadSourceTip": "Vous pouvez appuyer longuement sur le titre de cette page pour basculer entre tous les abonnements et les abonnements non lus",
    "uncategorized": "Non classé(s)",
    "showUncategorized": "Voir les non classé(s)",
    "serviceExists": "Un service existe déjà. Veuillez vous déconnecter avant d'importer."
  }

R lib/l10n/intl_ptBR.arb => lib/l10n/intl_pt.arb +0 -0
A lib/l10n/intl_uk.arb => lib/l10n/intl_uk.arb +98 -0
@@ 0,0 1,98 @@
{
    "all": "Усі статті",
    "unread": "Непрочитані",
    "starred": "Обране",
    "allArticles": "Усі статті",
    "allSubscriptions": "Усі підписки",
    "filter": "Фільтр",
    "feed": "Стрічка",
    "subscriptions": "Підписки",
    "groups": "Групи",
    "settings": "Налаштування",
    "service": "Сервіс",
    "preferences": "Параметри",
    "about": "Про додаток",
    "theme": "Тема",
    "followSystem": "Слідувати системі",
    "light": "Світлий режим",
    "dark": "Темний режим",
    "language": "Мова",
    "markRead": "Позначити як прочитане",
    "markUnread": "Позначити як непрочитане",
    "markAll": "Позначити все як прочитане",
    "markAbove": "Позначити вище як прочитане",
    "markBelow": "Позначити нижче як прочитане",
    "daysAgo": "{days,plural, =1{Більше 1 дня тому}other{Понад {days} дні/-ів тому}}",
    "star": "Додати в обране",
    "unstar": "Видалити з обраних",
    "share": "Поділитися",
    "cancel": "Скасувати",
    "close": "Закрити",
    "save": "Зберегти",
    "reading": "Читання",
    "account": "Персональний аккаунт",
    "app": "Додаток",
    "general": "Загальні",
    "version": "Версія",
    "openSource": "Проект з відкритим кодом",
    "feedback": "Зворотній зв'язок",
    "showThumb": "Показати ескіз",
    "showSnippet": "Показати фрагмент",
    "dimRead": "Затінювати прочитанні статті",
    "gestures": "Жести",
    "swipeLeft": "Проведіть пальцем ліворуч",
    "swipeRight": "Проведіть пальцем праворуч",
    "toggleRead": "Змінити прочитане / непрочитане",
    "toggleStar": "Змінити улюблене",
    "openMenu": "Відкрити меню",
    "openExternal": "Відкрити зовні",
    "fontSize": "Розмір шрифту",
    "edit": "Редагувати",
    "name": "Назва",
    "icon": "Значок",
    "openTarget": "Режим відкриття за замовчуванням",
    "rssText": "Повний текст RSS",
    "loadWebpage": "Завантажити веб-сторінку",
    "loadFull": "Завантажити повний вміст",
    "invalidValue": "Недійсне значення",
    "unreadOnly": "Лише непрочитане",
    "starredOnly": "Тільки улюблені",
    "search": "Пошук",
    "editKeyword": "Редагувати ключове слово",
    "clearSearch": "Очистити пошук",
    "storage": "Місце зберігання",
    "clearCache": "Очистити кеш",
    "autoDelete": "Автоматичне видалення елементів",
    "sync": "Синхронізувати",
    "syncOnStart": "Синхронізувати на старті",
    "inAppBrowser": "Вбудований браузер",
    "lastSyncSuccess": "Остання успішна синхронізація о",
    "lastSyncFailure": "Остання неуспішна синхронізація о",
    "welcome": "Ласкаво просимо",
    "credentials": "Облікові дані",
    "endpoint": "Кінцева точка",
    "username": "Ім'я користувача",
    "password": "Пароль",
    "fetchLimit": "Ліміт запиту",
    "enter": "Ввести",
    "entered": "Введено",
    "serviceFailure": "Не вдається підключитися до служби",
    "serviceFailureHint": "Перевірте налаштування служби або стан мережі.",
    "logOut": "Вийти",
    "logOutWarning": "Усі локальні дані будуть видалені. Ви впевнені?",
    "confirm": "Підтвердити",
    "allLoaded": "Все завантажено",
    "removeAd": "Вилучити рекламу",
    "getApiKey": "Отримати ідентифікатор та ключ API",
    "getApiKeyHint": "В \"Preferences\" > \"Developer\"",
    "prev": "Попередній",
    "next": "Наступний",
    "wentWrong": "Щось пішло не так.",
    "retry": "Повторити спробу",
    "copy": "Копіювати",
    "errorLog": "Журнал помилок",
    "unreadSourceTip": "Ви можете довго натискати на заголовок цієї сторінки, щоб перемикатися між усіма та непрочитаними підписками.",
    "uncategorized": "Без категорії",
    "showUncategorized": "Показати без категорії",
    "serviceExists": "Служба вже існує. Будь ласка, вийдіть з системи перед імпортом."
  }
\ No newline at end of file

M lib/main.dart => lib/main.dart +18 -9
@@ 42,8 42,9 @@ void main() async {
  SystemChannels.lifecycle.setMessageHandler((msg) {
    if (msg == AppLifecycleState.resumed.toString()) {
      if (Global.server != null) Global.server.restart();
      if (Global.globalModel.syncOnStart
        && DateTime.now().difference(Global.syncModel.lastSynced).inMinutes >= 10) {
      if (Global.globalModel.syncOnStart &&
          DateTime.now().difference(Global.syncModel.lastSynced).inMinutes >=
              10) {
        Global.syncModel.syncWithService();
      }
    }


@@ 67,7 68,8 @@ class MyApp extends StatelessWidget {
    "/settings/service/inoreader": (context) => InoreaderPage(),
    "/settings/service/greader": (context) => GReaderPage(),
    "/settings/service": (context) {
      var serviceType = SyncService.values[Store.sp.getInt(StoreKeys.SYNC_SERVICE) ?? 0];
      var serviceType =
          SyncService.values[Store.sp.getInt(StoreKeys.SYNC_SERVICE) ?? 0];
      switch (serviceType) {
        case SyncService.None:
          break;


@@ 114,12 116,19 @@ class MyApp extends StatelessWidget {
            const Locale("en"),
            const Locale("es"),
            const Locale("zh"),
            const Locale("fr"),
            const Locale("uk"),
            const Locale("hr"),
            const Locale("pt"),
          ],
          localeResolutionCallback: (_locale, supportedLocales) {
            _locale = Locale(_locale.languageCode);
            if (globalModel.locale != null) return globalModel.locale;
            else if (supportedLocales.contains(_locale)) return _locale;
            else return Locale("en");
            if (globalModel.locale != null)
              return globalModel.locale;
            else if (supportedLocales.contains(_locale))
              return _locale;
            else
              return Locale("en");
          },
          theme: CupertinoThemeData(
            primaryColor: CupertinoColors.systemBlue,


@@ 133,9 142,9 @@ class MyApp extends StatelessWidget {
            final mediaQueryData = MediaQuery.of(context);
            if (Global.globalModel.textScale == null) return child;
            return MediaQuery(
              data: mediaQueryData.copyWith(textScaleFactor: Global.globalModel.textScale),
              child: child
            );
                data: mediaQueryData.copyWith(
                    textScaleFactor: Global.globalModel.textScale),
                child: child);
          },
        ),
      ),

M lib/pages/settings/general_page.dart => lib/pages/settings/general_page.dart +143 -126
@@ 4,7 4,6 @@ import 'package:fluent_reader_lite/generated/l10n.dart';
import 'package:fluent_reader_lite/models/global_model.dart';
import 'package:fluent_reader_lite/utils/colors.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
import 'package:provider/provider.dart';
import 'package:tuple/tuple.dart';


@@ 19,137 18,155 @@ class _GeneralPageState extends State<GeneralPage> {
  double textScale;

  void _clearCache() async {
    setState(() { _clearingCache = true; });
    setState(() {
      _clearingCache = true;
    });
    await DefaultCacheManager().emptyCache();
    if (!mounted) return;
    setState(() { _clearingCache = false; });
    setState(() {
      _clearingCache = false;
    });
  }

  @override
  Widget build(BuildContext context) => CupertinoPageScaffold(
    backgroundColor: MyColors.background,
    navigationBar: CupertinoNavigationBar(
      middle: Text(S.of(context).general),
    ),
    child: Consumer<GlobalModel>(
      builder: (context, globalModel, child) {
        final useSystemTextScale = globalModel.textScale == null;
        final textScaleItems = ListTileGroup([
          MyListTile(
            title: Text(S.of(context).followSystem),
            trailing: CupertinoSwitch(
              value: useSystemTextScale,
              onChanged: (v) {
                textScale = null;
                globalModel.textScale = v ? null : 1;
        backgroundColor: MyColors.background,
        navigationBar: CupertinoNavigationBar(
          middle: Text(S.of(context).general),
        ),
        child: Consumer<GlobalModel>(
          builder: (context, globalModel, child) {
            final useSystemTextScale = globalModel.textScale == null;
            final textScaleItems = ListTileGroup([
              MyListTile(
                title: Text(S.of(context).followSystem),
                trailing: CupertinoSwitch(
                  value: useSystemTextScale,
                  onChanged: (v) {
                    textScale = null;
                    globalModel.textScale = v ? null : 1;
                  },
                ),
                trailingChevron: false,
                withDivider: !useSystemTextScale,
              ),
              if (!useSystemTextScale)
                MyListTile(
                  title: Expanded(
                      child: CupertinoSlider(
                    min: 0.5,
                    max: 1.5,
                    divisions: 8,
                    value: textScale ?? globalModel.textScale,
                    onChanged: (v) {
                      setState(() {
                        textScale = v;
                      });
                    },
                    onChangeEnd: (v) {
                      textScale = null;
                      globalModel.textScale = v;
                    },
                  )),
                  trailingChevron: false,
                  withDivider: false,
                ),
            ], title: S.of(context).fontSize);
            final syncItems = ListTileGroup([
              MyListTile(
                title: Text(S.of(context).syncOnStart),
                trailing: CupertinoSwitch(
                  value: globalModel.syncOnStart,
                  onChanged: (v) {
                    globalModel.syncOnStart = v;
                    setState(() {});
                  },
                ),
                trailingChevron: false,
              ),
              MyListTile(
                title: Text(S.of(context).inAppBrowser),
                trailing: CupertinoSwitch(
                  value: globalModel.inAppBrowser,
                  onChanged: (v) {
                    globalModel.inAppBrowser = v;
                    setState(() {});
                  },
                ),
                trailingChevron: false,
                withDivider: false,
              ),
            ], title: S.of(context).preferences);
            final storageItems = ListTileGroup([
              MyListTile(
                title: Text(S.of(context).clearCache),
                onTap: _clearingCache ? null : _clearCache,
                trailing: _clearingCache ? CupertinoActivityIndicator() : null,
                trailingChevron: !_clearingCache,
              ),
              MyListTile(
                title: Text(S.of(context).autoDelete),
                trailing:
                    Text(S.of(context).daysAgo(globalModel.keepItemsDays)),
                trailingChevron: false,
                withDivider: false,
              ),
              MyListTile(
                title: Expanded(
                    child: CupertinoSlider(
                  min: 1,
                  max: 4,
                  divisions: 3,
                  value: (globalModel.keepItemsDays ~/ 7).toDouble(),
                  onChanged: (v) {
                    globalModel.keepItemsDays = (v * 7).toInt();
                    setState(() {});
                  },
                )),
                trailingChevron: false,
                withDivider: false,
              ),
            ], title: S.of(context).storage);
            final themeItems = ListTileGroup.fromOptions(
              [
                Tuple2(S.of(context).followSystem, ThemeSetting.Default),
                Tuple2(S.of(context).light, ThemeSetting.Light),
                Tuple2(S.of(context).dark, ThemeSetting.Dark),
              ],
              globalModel.theme,
              (t) {
                globalModel.theme = t;
              },
            ),
            trailingChevron: false,
            withDivider: !useSystemTextScale,
          ),
          if (!useSystemTextScale) MyListTile(
            title: Expanded(child: CupertinoSlider(
              min: 0.5,
              max: 1.5,
              divisions: 8,
              value: textScale ?? globalModel.textScale,
              onChanged: (v) {
                setState(() { textScale = v; });
              title: S.of(context).theme,
            );
            final localeItems = ListTileGroup.fromOptions(
              [
                Tuple2(S.of(context).followSystem, null),
                const Tuple2("Deutsch", Locale("de")),
                const Tuple2("English", Locale("en")),
                const Tuple2("Español", Locale("es")),
                const Tuple2("Français", Locale("fr")),
                const Tuple2("hrvatski", Locale("hr")),
                const Tuple2("Português do Brasil", Locale("pt")),
                const Tuple2("Українська", Locale("uk")),
                const Tuple2("中文(简体)", Locale("zh")),
              ],
              globalModel.locale,
              (l) {
                globalModel.locale = l;
              },
              onChangeEnd: (v) {
                textScale = null;
                globalModel.textScale = v;
              },
            )),
            trailingChevron: false,
            withDivider: false,
          ),
        ], title: S.of(context).fontSize);
        final syncItems = ListTileGroup([
          MyListTile(
            title: Text(S.of(context).syncOnStart),
            trailing: CupertinoSwitch(
              value: globalModel.syncOnStart,
              onChanged: (v) {
                globalModel.syncOnStart = v;
                setState(() {});
              },
            ),
            trailingChevron: false,
          ),
          MyListTile(
            title: Text(S.of(context).inAppBrowser),
            trailing: CupertinoSwitch(
              value: globalModel.inAppBrowser,
              onChanged: (v) {
                globalModel.inAppBrowser = v;
                setState(() {});
              },
            ),
            trailingChevron: false,
            withDivider: false,
          ),
        ], title: S.of(context).preferences);
        final storageItems = ListTileGroup([
          MyListTile(
            title: Text(S.of(context).clearCache),
            onTap: _clearingCache ? null : _clearCache,
            trailing: _clearingCache ? CupertinoActivityIndicator() : null,
            trailingChevron: !_clearingCache,
          ),
          MyListTile(
            title: Text(S.of(context).autoDelete),
            trailing: Text(S.of(context).daysAgo(globalModel.keepItemsDays)),
            trailingChevron: false,
            withDivider: false,
          ),
          MyListTile(
            title: Expanded(child: CupertinoSlider(
              min: 1,
              max: 4,
              divisions: 3,
              value: (globalModel.keepItemsDays ~/ 7).toDouble(),
              onChanged: (v) { 
                globalModel.keepItemsDays = (v * 7).toInt(); 
                setState(() { });
              },
            )),
            trailingChevron: false,
            withDivider: false,
          ),
        ], title: S.of(context).storage);
        final themeItems = ListTileGroup.fromOptions(
          [
            Tuple2(S.of(context).followSystem, ThemeSetting.Default),
            Tuple2(S.of(context).light, ThemeSetting.Light),
            Tuple2(S.of(context).dark, ThemeSetting.Dark),
          ],
          globalModel.theme,
          (t) { globalModel.theme = t; },
          title: S.of(context).theme,
        );
        final localeItems = ListTileGroup.fromOptions(
          [
            Tuple2(S.of(context).followSystem, null),
            const Tuple2("Deutsch", Locale("de")),
            const Tuple2("English", Locale("en")),
            const Tuple2("Español", Locale("es")),
            const Tuple2("中文(简体)", Locale("zh")),
          ],
          globalModel.locale,
          (l) { globalModel.locale = l; },
          title: S.of(context).language,
        );
        return ListView(
          children: [
            syncItems,
            textScaleItems,
            storageItems,
            themeItems,
            localeItems,
          ],
        );
      },
    ),
  );
              title: S.of(context).language,
            );
            return ListView(
              children: [
                syncItems,
                textScaleItems,
                storageItems,
                themeItems,
                localeItems,
              ],
            );
          },
        ),
      );
}

M lib/pages/settings/source_edit_page.dart => lib/pages/settings/source_edit_page.dart +0 -1
@@ 8,7 8,6 @@ import 'package:fluent_reader_lite/utils/colors.dart';
import 'package:fluent_reader_lite/utils/global.dart';
import 'package:fluent_reader_lite/utils/utils.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:provider/provider.dart';
import 'package:tuple/tuple.dart';

M lib/utils/utils.dart => lib/utils/utils.dart +0 -1
@@ 1,6 1,5 @@
import 'package:fluent_reader_lite/generated/l10n.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:lpinyin/lpinyin.dart';
import 'package:url_launcher/url_launcher.dart';

M pubspec.lock => pubspec.lock +153 -62
@@ 7,7 7,7 @@ packages:
      name: async
      url: "https://pub.dartlang.org"
    source: hosted
    version: "2.6.1"
    version: "2.8.2"
  auth_header:
    dependency: transitive
    description:


@@ 28,21 28,35 @@ packages:
      name: cached_network_image
      url: "https://pub.dartlang.org"
    source: hosted
    version: "3.0.0"
    version: "3.2.1"
  cached_network_image_platform_interface:
    dependency: transitive
    description:
      name: cached_network_image_platform_interface
      url: "https://pub.dartlang.org"
    source: hosted
    version: "1.0.0"
  cached_network_image_web:
    dependency: transitive
    description:
      name: cached_network_image_web
      url: "https://pub.dartlang.org"
    source: hosted
    version: "1.0.1"
  characters:
    dependency: transitive
    description:
      name: characters
      url: "https://pub.dartlang.org"
    source: hosted
    version: "1.1.0"
    version: "1.2.0"
  charcode:
    dependency: transitive
    description:
      name: charcode
      url: "https://pub.dartlang.org"
    source: hosted
    version: "1.2.0"
    version: "1.3.1"
  clock:
    dependency: transitive
    description:


@@ 56,49 70,49 @@ packages:
      name: collection
      url: "https://pub.dartlang.org"
    source: hosted
    version: "1.15.0"
    version: "1.16.0"
  crypto:
    dependency: "direct main"
    description:
      name: crypto
      url: "https://pub.dartlang.org"
    source: hosted
    version: "3.0.1"
    version: "3.0.2"
  csslib:
    dependency: transitive
    description:
      name: csslib
      url: "https://pub.dartlang.org"
    source: hosted
    version: "0.17.0"
    version: "0.17.2"
  cupertino_icons:
    dependency: "direct main"
    description:
      name: cupertino_icons
      url: "https://pub.dartlang.org"
    source: hosted
    version: "1.0.3"
    version: "1.0.5"
  fake_async:
    dependency: transitive
    description:
      name: fake_async
      url: "https://pub.dartlang.org"
    source: hosted
    version: "1.2.0"
    version: "1.3.0"
  ffi:
    dependency: transitive
    description:
      name: ffi
      url: "https://pub.dartlang.org"
    source: hosted
    version: "1.0.0"
    version: "2.0.1"
  file:
    dependency: transitive
    description:
      name: file
      url: "https://pub.dartlang.org"
    source: hosted
    version: "6.1.0"
    version: "6.1.2"
  flutter:
    dependency: "direct main"
    description: flutter


@@ 110,14 124,14 @@ packages:
      name: flutter_blurhash
      url: "https://pub.dartlang.org"
    source: hosted
    version: "0.6.0"
    version: "0.7.0"
  flutter_cache_manager:
    dependency: "direct main"
    description:
      name: flutter_cache_manager
      url: "https://pub.dartlang.org"
    source: hosted
    version: "3.1.2"
    version: "3.3.0"
  flutter_localizations:
    dependency: "direct main"
    description: flutter


@@ 146,14 160,14 @@ packages:
      name: http
      url: "https://pub.dartlang.org"
    source: hosted
    version: "0.13.3"
    version: "0.13.4"
  http_parser:
    dependency: transitive
    description:
      name: http_parser
      url: "https://pub.dartlang.org"
    source: hosted
    version: "4.0.0"
    version: "4.0.1"
  http_server:
    dependency: transitive
    description:


@@ 174,7 188,7 @@ packages:
      name: jaguar
      url: "https://pub.dartlang.org"
    source: hosted
    version: "3.0.11"
    version: "3.1.3"
  jaguar_common:
    dependency: transitive
    description:


@@ 195,14 209,14 @@ packages:
      name: js
      url: "https://pub.dartlang.org"
    source: hosted
    version: "0.6.3"
    version: "0.6.4"
  logging:
    dependency: transitive
    description:
      name: logging
      url: "https://pub.dartlang.org"
    source: hosted
    version: "1.0.1"
    version: "1.0.2"
  lpinyin:
    dependency: "direct main"
    description:


@@ 216,28 230,35 @@ packages:
      name: matcher
      url: "https://pub.dartlang.org"
    source: hosted
    version: "0.12.10"
    version: "0.12.11"
  material_color_utilities:
    dependency: transitive
    description:
      name: material_color_utilities
      url: "https://pub.dartlang.org"
    source: hosted
    version: "0.1.4"
  meta:
    dependency: transitive
    description:
      name: meta
      url: "https://pub.dartlang.org"
    source: hosted
    version: "1.3.0"
    version: "1.7.0"
  mime:
    dependency: transitive
    description:
      name: mime
      url: "https://pub.dartlang.org"
    source: hosted
    version: "1.0.0"
    version: "1.0.2"
  modal_bottom_sheet:
    dependency: "direct main"
    description:
      name: modal_bottom_sheet
      url: "https://pub.dartlang.org"
    source: hosted
    version: "2.0.0"
    version: "2.1.0"
  nested:
    dependency: transitive
    description:


@@ 251,14 272,14 @@ packages:
      name: octo_image
      url: "https://pub.dartlang.org"
    source: hosted
    version: "1.0.0+1"
    version: "1.0.2"
  overlay_dialog:
    dependency: "direct main"
    description:
      name: overlay_dialog
      url: "https://pub.dartlang.org"
    source: hosted
    version: "0.2.0"
    version: "0.2.1"
  package_info:
    dependency: "direct main"
    description:


@@ 272,42 293,56 @@ packages:
      name: path
      url: "https://pub.dartlang.org"
    source: hosted
    version: "1.8.0"
    version: "1.8.1"
  path_provider:
    dependency: transitive
    description:
      name: path_provider
      url: "https://pub.dartlang.org"
    source: hosted
    version: "2.0.2"
    version: "2.0.11"
  path_provider_android:
    dependency: transitive
    description:
      name: path_provider_android
      url: "https://pub.dartlang.org"
    source: hosted
    version: "2.0.15"
  path_provider_ios:
    dependency: transitive
    description:
      name: path_provider_ios
      url: "https://pub.dartlang.org"
    source: hosted
    version: "2.0.10"
  path_provider_linux:
    dependency: transitive
    description:
      name: path_provider_linux
      url: "https://pub.dartlang.org"
    source: hosted
    version: "2.0.0"
    version: "2.1.7"
  path_provider_macos:
    dependency: transitive
    description:
      name: path_provider_macos
      url: "https://pub.dartlang.org"
    source: hosted
    version: "2.0.0"
    version: "2.0.6"
  path_provider_platform_interface:
    dependency: transitive
    description:
      name: path_provider_platform_interface
      url: "https://pub.dartlang.org"
    source: hosted
    version: "2.0.0"
    version: "2.0.4"
  path_provider_windows:
    dependency: transitive
    description:
      name: path_provider_windows
      url: "https://pub.dartlang.org"
    source: hosted
    version: "2.0.1"
    version: "2.1.0"
  path_tree:
    dependency: transitive
    description:


@@ 321,56 356,56 @@ packages:
      name: pedantic
      url: "https://pub.dartlang.org"
    source: hosted
    version: "1.11.0"
    version: "1.11.1"
  platform:
    dependency: transitive
    description:
      name: platform
      url: "https://pub.dartlang.org"
    source: hosted
    version: "3.0.0"
    version: "3.1.0"
  plugin_platform_interface:
    dependency: transitive
    description:
      name: plugin_platform_interface
      url: "https://pub.dartlang.org"
    source: hosted
    version: "2.0.1"
    version: "2.1.2"
  process:
    dependency: transitive
    description:
      name: process
      url: "https://pub.dartlang.org"
    source: hosted
    version: "4.2.1"
    version: "4.2.4"
  provider:
    dependency: "direct main"
    description:
      name: provider
      url: "https://pub.dartlang.org"
    source: hosted
    version: "5.0.0"
    version: "6.0.3"
  quiver:
    dependency: transitive
    description:
      name: quiver
      url: "https://pub.dartlang.org"
    source: hosted
    version: "3.0.1"
    version: "3.1.0"
  responsive_builder:
    dependency: "direct main"
    description:
      name: responsive_builder
      url: "https://pub.dartlang.org"
    source: hosted
    version: "0.4.1"
    version: "0.4.2"
  rxdart:
    dependency: transitive
    description:
      name: rxdart
      url: "https://pub.dartlang.org"
    source: hosted
    version: "0.27.1"
    version: "0.27.4"
  share:
    dependency: "direct main"
    description:


@@ 384,21 419,35 @@ packages:
      name: shared_preferences
      url: "https://pub.dartlang.org"
    source: hosted
    version: "2.0.6"
    version: "2.0.15"
  shared_preferences_android:
    dependency: transitive
    description:
      name: shared_preferences_android
      url: "https://pub.dartlang.org"
    source: hosted
    version: "2.0.12"
  shared_preferences_ios:
    dependency: transitive
    description:
      name: shared_preferences_ios
      url: "https://pub.dartlang.org"
    source: hosted
    version: "2.1.1"
  shared_preferences_linux:
    dependency: transitive
    description:
      name: shared_preferences_linux
      url: "https://pub.dartlang.org"
    source: hosted
    version: "2.0.0"
    version: "2.1.1"
  shared_preferences_macos:
    dependency: transitive
    description:
      name: shared_preferences_macos
      url: "https://pub.dartlang.org"
    source: hosted
    version: "2.0.0"
    version: "2.0.4"
  shared_preferences_platform_interface:
    dependency: transitive
    description:


@@ 412,14 461,14 @@ packages:
      name: shared_preferences_web
      url: "https://pub.dartlang.org"
    source: hosted
    version: "2.0.0"
    version: "2.0.4"
  shared_preferences_windows:
    dependency: transitive
    description:
      name: shared_preferences_windows
      url: "https://pub.dartlang.org"
    source: hosted
    version: "2.0.0"
    version: "2.1.1"
  sky_engine:
    dependency: transitive
    description: flutter


@@ 431,21 480,21 @@ packages:
      name: source_span
      url: "https://pub.dartlang.org"
    source: hosted
    version: "1.8.1"
    version: "1.8.2"
  sqflite:
    dependency: "direct main"
    description:
      name: sqflite
      url: "https://pub.dartlang.org"
    source: hosted
    version: "2.0.0+3"
    version: "2.0.2+1"
  sqflite_common:
    dependency: transitive
    description:
      name: sqflite_common
      url: "https://pub.dartlang.org"
    source: hosted
    version: "2.0.0+2"
    version: "2.2.1+1"
  stack_trace:
    dependency: transitive
    description:


@@ 473,7 522,7 @@ packages:
      name: synchronized
      url: "https://pub.dartlang.org"
    source: hosted
    version: "3.0.0"
    version: "3.0.0+2"
  term_glyph:
    dependency: transitive
    description:


@@ 487,7 536,7 @@ packages:
      name: test_api
      url: "https://pub.dartlang.org"
    source: hosted
    version: "0.3.0"
    version: "0.4.9"
  tuple:
    dependency: "direct main"
    description:


@@ 501,7 550,7 @@ packages:
      name: typed_data
      url: "https://pub.dartlang.org"
    source: hosted
    version: "1.3.0"
    version: "1.3.1"
  uni_links:
    dependency: "direct main"
    description:


@@ 523,83 572,125 @@ packages:
      url: "https://pub.dartlang.org"
    source: hosted
    version: "0.1.0"
  universal_io:
    dependency: transitive
    description:
      name: universal_io
      url: "https://pub.dartlang.org"
    source: hosted
    version: "2.0.4"
  url_launcher:
    dependency: "direct main"
    description:
      name: url_launcher
      url: "https://pub.dartlang.org"
    source: hosted
    version: "6.0.9"
    version: "6.1.4"
  url_launcher_android:
    dependency: transitive
    description:
      name: url_launcher_android
      url: "https://pub.dartlang.org"
    source: hosted
    version: "6.0.17"
  url_launcher_ios:
    dependency: transitive
    description:
      name: url_launcher_ios
      url: "https://pub.dartlang.org"
    source: hosted
    version: "6.0.17"
  url_launcher_linux:
    dependency: transitive
    description:
      name: url_launcher_linux
      url: "https://pub.dartlang.org"
    source: hosted
    version: "2.0.0"
    version: "3.0.1"
  url_launcher_macos:
    dependency: transitive
    description:
      name: url_launcher_macos
      url: "https://pub.dartlang.org"
    source: hosted
    version: "2.0.0"
    version: "3.0.1"
  url_launcher_platform_interface:
    dependency: transitive
    description:
      name: url_launcher_platform_interface
      url: "https://pub.dartlang.org"
    source: hosted
    version: "2.0.4"
    version: "2.1.0"
  url_launcher_web:
    dependency: transitive
    description:
      name: url_launcher_web
      url: "https://pub.dartlang.org"
    source: hosted
    version: "2.0.1"
    version: "2.0.12"
  url_launcher_windows:
    dependency: transitive
    description:
      name: url_launcher_windows
      url: "https://pub.dartlang.org"
    source: hosted
    version: "2.0.0"
    version: "3.0.1"
  uuid:
    dependency: transitive
    description:
      name: uuid
      url: "https://pub.dartlang.org"
    source: hosted
    version: "3.0.4"
    version: "3.0.6"
  vector_math:
    dependency: transitive
    description:
      name: vector_math
      url: "https://pub.dartlang.org"
    source: hosted
    version: "2.1.0"
    version: "2.1.2"
  webview_flutter:
    dependency: "direct main"
    description:
      name: webview_flutter
      url: "https://pub.dartlang.org"
    source: hosted
    version: "2.0.10"
    version: "3.0.4"
  webview_flutter_android:
    dependency: transitive
    description:
      name: webview_flutter_android
      url: "https://pub.dartlang.org"
    source: hosted
    version: "2.8.14"
  webview_flutter_platform_interface:
    dependency: transitive
    description:
      name: webview_flutter_platform_interface
      url: "https://pub.dartlang.org"
    source: hosted
    version: "1.9.1"
  webview_flutter_wkwebview:
    dependency: transitive
    description:
      name: webview_flutter_wkwebview
      url: "https://pub.dartlang.org"
    source: hosted
    version: "2.8.1"
  win32:
    dependency: transitive
    description:
      name: win32
      url: "https://pub.dartlang.org"
    source: hosted
    version: "2.0.5"
    version: "2.7.0"
  xdg_directories:
    dependency: transitive
    description:
      name: xdg_directories
      url: "https://pub.dartlang.org"
    source: hosted
    version: "0.2.0"
    version: "0.2.0+1"
sdks:
  dart: ">=2.12.0 <3.0.0"
  flutter: ">=2.0.0"
  dart: ">=2.17.0 <3.0.0"
  flutter: ">=3.0.0"

M pubspec.yaml => pubspec.yaml +9 -9
@@ 15,7 15,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
# Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
version: 1.0.2+8
version: 1.0.3+10

environment:
  sdk: ">=2.7.0 <3.0.0"


@@ 25,13 25,13 @@ dependencies:
    sdk: flutter
  flutter_localizations:
    sdk: flutter
  provider: ^5.0.0
  provider: ^6.0.3
  tuple: ^2.0.0
  shared_preferences: ^2.0.6
  intl: ^0.17.0-nullsafety.2
  http: ^0.13.3
  shared_preferences: ^2.0.15
  intl: ^0.17.0
  http: ^0.13.4
  html: ^0.15.0
  webview_flutter: ^2.0.10
  webview_flutter: ^3.0.4
  jaguar: ^3.0.11
  jaguar_flutter_asset: ^3.0.0
  url_launcher: ^6.0.9


@@ 41,11 41,11 @@ dependencies:
  package_info: ^2.0.2
  crypto: ^3.0.1
  responsive_builder: ^0.4.1
  cached_network_image: ^3.0.0
  flutter_cache_manager: ^3.1.2
  cached_network_image: ^3.2.1
  flutter_cache_manager: ^3.3.0
  lpinyin: ^2.0.3
  uni_links: ^0.5.1
  modal_bottom_sheet: ^2.0.0
  modal_bottom_sheet: ^2.1.0
  overlay_dialog: ^0.2.0