diff --git a/CHANGELOG.md b/CHANGELOG.md index b8fd60fa..feb2427b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ ## Changelog +### v2.7.0 +- Temporarily removed themes for now +- Fix download and set wall bugs + ### v2.6.9 - Laid support for Prism v3 - New model for users diff --git a/README.md b/README.md index 856ed5e2..405ece6b 100644 --- a/README.md +++ b/README.md @@ -141,6 +141,10 @@ You can also report bugs, upload your setups/walls on our telegram channel Full changelog can be found [here](https://github.com/Hash-Studios/Prism/tree/master/CHANGELOG.md). +### v2.7.0 +- Temporarily removed themes for now +- Fix download and set wall bugs + ### v2.6.9 - Laid support for Prism v3 - New model for users diff --git a/android/app/build.gradle b/android/app/build.gradle index 2bc3cfd8..70ba8ac3 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -31,7 +31,7 @@ apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" } android { - compileSdkVersion 30 + compileSdkVersion 31 lintOptions { disable 'InvalidPackage' @@ -40,8 +40,8 @@ android { defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.hash.prism" - minSdkVersion 19 - targetSdkVersion 30 + minSdkVersion 21 + targetSdkVersion 31 versionCode flutterVersionCode.toInteger() versionName flutterVersionName multiDexEnabled true diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index c3b2b581..e7cd3979 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,6 +1,7 @@ + package="com.hash.prism" + xmlns:tools="http://schemas.android.com/tools" > @@ -13,11 +14,13 @@ @@ -30,6 +33,7 @@ android:hardwareAccelerated="true" android:launchMode="singleTop" android:theme="@style/LaunchTheme" + android:exported="true" android:windowSoftInputMode="adjustResize" > @@ -84,6 +88,9 @@ Don't delete the meta-data below. This is used by the Flutter tool to generate GeneratedPluginRegistrant.java --> + + + diff --git a/android/app/src/main/java/com/hash/Prism/MainActivity.java b/android/app/src/main/java/com/hash/Prism/MainActivity.java index d9a746b6..01947d09 100644 --- a/android/app/src/main/java/com/hash/Prism/MainActivity.java +++ b/android/app/src/main/java/com/hash/Prism/MainActivity.java @@ -38,71 +38,7 @@ public class MainActivity extends FlutterActivity { private static final String CHANNEL = "flutter.prism.set_wallpaper"; public static MethodChannel.Result res; - private Target target = new Target() { - @Override - public void onBitmapLoaded(Bitmap resource, Picasso.LoadedFrom from) { - android.util.Log.i("Arguments ", "configureFlutterEngine: " + "Image Downloaded"); - SetWallPaperTask setWallPaperTask = new SetWallPaperTask(getActivity()); - setWallPaperTask.execute(new Pair(resource, "1")); - } - - @Override - public void onBitmapFailed(Exception e, Drawable errorDrawable) { - } - - @Override - public void onPrepareLoad(Drawable placeHolderDrawable) { - } - }; - private Target target1 = new Target() { - @Override - public void onBitmapLoaded(Bitmap resource, Picasso.LoadedFrom from) { - android.util.Log.i("Arguments ", "configureFlutterEngine: " + "Image Downloaded"); - SetWallPaperTask setWallPaperTask = new SetWallPaperTask(getActivity()); - setWallPaperTask.execute(new Pair(resource, "2")); - } - - @Override - public void onBitmapFailed(Exception e, Drawable errorDrawable) { - } - - @Override - public void onPrepareLoad(Drawable placeHolderDrawable) { - } - }; - private Target target2 = new Target() { - @Override - public void onBitmapLoaded(Bitmap resource, Picasso.LoadedFrom from) { - android.util.Log.i("Arguments ", "configureFlutterEngine: " + "Image Downloaded"); - SetWallPaperTask setWallPaperTask = new SetWallPaperTask(getActivity()); - setWallPaperTask.execute(new Pair(resource, "3")); - } - - @Override - public void onBitmapFailed(Exception e, Drawable errorDrawable) { - } - - @Override - public void onPrepareLoad(Drawable placeHolderDrawable) { - } - }; - private Target target3 = new Target() { - @Override - public void onBitmapLoaded(Bitmap resource, Picasso.LoadedFrom from) { - android.util.Log.i("Arguments ", "configureFlutterEngine: " + "Image Downloaded"); - SetWallPaperTask setWallPaperTask = new SetWallPaperTask(getActivity()); - setWallPaperTask.execute(new Pair(resource, "4")); - } - - @Override - public void onBitmapFailed(Exception e, Drawable errorDrawable) { - } - - @Override - public void onPrepareLoad(Drawable placeHolderDrawable) { - } - }; - + Target saveImageTarget = new Target() { @Override public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { @@ -154,47 +90,7 @@ public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) { new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL) .setMethodCallHandler((call, result) -> { res = result; - if (call.method.equals("set_wallpaper")) { - String url = call.argument("url"); // .argument returns the correct type - android.util.Log.i("Arguments ", "configureFlutterEngine: " + url); - Picasso.get().load(url).into(target); - - } else if (call.method.equals("set_wallpaper_file")) { - String url = call.argument("url"); // .argument returns the correct type - android.util.Log.i("Arguments ", "configureFlutterEngine: " + url); - Picasso.get().load("file://" + url).into(target); - - } else if (call.method.equals("set_lock_wallpaper")) { - String url = call.argument("url"); // .argument returns the correct type - android.util.Log.i("Arguments ", "configureFlutterEngine: " + url); - Picasso.get().load(url).into(target1); - - } else if (call.method.equals("set_home_wallpaper")) { - String url = call.argument("url"); // .argument returns the correct type - android.util.Log.i("Arguments ", "configureFlutterEngine: " + url); - Picasso.get().load(url).into(target2); - - } else if (call.method.equals("set_both_wallpaper")) { - String url = call.argument("url"); // .argument returns the correct type - android.util.Log.i("Arguments ", "configureFlutterEngine: " + url); - Picasso.get().load(url).into(target3); - - } else if (call.method.equals("set_lock_wallpaper_file")) { - String url = call.argument("url"); // .argument returns the correct type - android.util.Log.i("Arguments ", "configureFlutterEngine: " + url); - Picasso.get().load("file://" + url).into(target1); - - } else if (call.method.equals("set_home_wallpaper_file")) { - String url = call.argument("url"); // .argument returns the correct type - android.util.Log.i("Arguments ", "configureFlutterEngine: " + url); - Picasso.get().load("file://" + url).into(target2); - - } else if (call.method.equals("set_both_wallpaper_file")) { - String url = call.argument("url"); // .argument returns the correct type - android.util.Log.i("Arguments ", "configureFlutterEngine: " + url); - Picasso.get().load("file://" + url).into(target3); - - } else if (call.method.equals("save_image")) { + if (call.method.equals("save_image")) { String link = call.argument("link"); Picasso.get().load(link).into(saveImageTarget); } else if (call.method.equals("save_image_file")) { @@ -203,33 +99,10 @@ public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) { } else if (call.method.equals("save_setup")) { String link = call.argument("link"); Picasso.get().load(link).into(saveSetupTarget); - } else if (call.method.equals("download_image_dm")) { - String link = call.argument("link"); - String filename = call.argument("filename"); - downloadImageNew(filename,link); } }); } - private void downloadImageNew(String filename, String downloadUrlOfImage){ - try{ - DownloadManager dm = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); - Uri downloadUri = Uri.parse(downloadUrlOfImage); - DownloadManager.Request request = new DownloadManager.Request(downloadUri); - request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE) - .setAllowedOverRoaming(false) - .setTitle(filename) - .setDescription("Downloading wallpaper") - .setMimeType("image/jpeg") // Your file type. You can use this code to download other file types also. - .setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED) - .setDestinationInExternalPublicDir(Environment.DIRECTORY_PICTURES,File.separator + "Prism"+ File.separator + filename + ".jpg"); - dm.enqueue(request); - Toast.makeText(this, "Image download started.", Toast.LENGTH_SHORT).show(); - }catch (Exception e){ - Toast.makeText(this, "Image download failed." + e.getMessage().toString(), Toast.LENGTH_SHORT).show(); - } - } - private void saveImageToPictures(Bitmap bitmap, @NonNull String name) throws IOException { OutputStream fos; try { @@ -254,141 +127,4 @@ private void saveImageToPictures(Bitmap bitmap, @NonNull String name) throws IOE } res.success(true); } -} - - -class SetWallPaperTask extends AsyncTask, Boolean, Boolean> { - - private final Context mContext; - - public SetWallPaperTask(final Context context) { - mContext = context; - } - - @Override - protected final Boolean doInBackground(Pair... pairs) { - switch (pairs[0].second) { - case "1": { - WallpaperManager wallpaperManager = WallpaperManager.getInstance(mContext); - try { - Uri tempUri = getImageUri(mContext, pairs[0].first); - Log.i("Arguments ", "configureFlutterEngine: " + "Saved image to storage"); - File finalFile = new File(getRealPathFromURI(tempUri)); - Uri contentURI = getImageContentUri(mContext, finalFile.getAbsolutePath()); - Log.i("Arguments ", "configureFlutterEngine: " + "Opening crop intent"); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - mContext.startActivity(wallpaperManager.getCropAndSetWallpaperIntent(contentURI)); - } - // wallpaperManager.setBitmap(pairs[0].first); - } catch (Exception ex) { - ex.printStackTrace(); - return false; - } - } - case "2": { - WallpaperManager wallpaperManager = WallpaperManager.getInstance(mContext); - try { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - wallpaperManager.setBitmap(pairs[0].first, null, true, WallpaperManager.FLAG_LOCK); - } - } catch (IOException ex) { - ex.printStackTrace(); - return false; - } - break; - } - case "3": { - WallpaperManager wallpaperManager = WallpaperManager.getInstance(mContext); - try { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - wallpaperManager.setBitmap(pairs[0].first, null, true, WallpaperManager.FLAG_SYSTEM); - } - } catch (IOException ex) { - ex.printStackTrace(); - return false; - } - break; - } - case "4": { - WallpaperManager wallpaperManager = WallpaperManager.getInstance(mContext); - try { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - wallpaperManager.setBitmap(pairs[0].first, null, true, - WallpaperManager.FLAG_LOCK | WallpaperManager.FLAG_SYSTEM); - } - } catch (IOException ex) { - ex.printStackTrace(); - return false; - } - break; - } - - } - return true; - } - - @Override - protected void onCancelled() { - super.onCancelled(); - } - - @Override - protected void onPostExecute(Boolean aBoolean) { - myMethod(aBoolean); - } - - private void myMethod(Boolean result) { - MainActivity.res.success(result); - } - - public static Uri getImageContentUri(Context context, String absPath) { - - Cursor cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, - new String[]{MediaStore.Images.Media._ID}, MediaStore.Images.Media.DATA + "=? ", - new String[]{absPath}, null); - - if (cursor != null && cursor.moveToFirst()) { - int id = cursor.getInt(cursor.getColumnIndex(MediaStore.MediaColumns._ID)); - return Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, Integer.toString(id)); - - } else if (!absPath.isEmpty()) { - ContentValues values = new ContentValues(); - values.put(MediaStore.Images.Media.DATA, absPath); - return context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); - } else { - return null; - } - } - - public Uri getImageUri(Context inContext, Bitmap inImage) { - ByteArrayOutputStream bytes = new ByteArrayOutputStream(); - inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes); - fixMediaDir(); - String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null); - return Uri.parse(path); - } - - public String getRealPathFromURI(Uri uri) { - Cursor cursor = mContext.getContentResolver().query(uri, null, null, null, null); - cursor.moveToFirst(); - int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); - return cursor.getString(idx); - } - - void fixMediaDir() { - File sdcard = Environment.getExternalStorageDirectory(); - if (sdcard != null) { - File mediaDir = new File(sdcard, "DCIM/Camera"); - if (!mediaDir.exists()) { - mediaDir.mkdirs(); - } - } - - if (sdcard != null) { - File mediaDir = new File(sdcard, "Pictures"); - if (!mediaDir.exists()) { - mediaDir.mkdirs(); - } - } - } } \ No newline at end of file diff --git a/android/build.gradle b/android/build.gradle index bee8b525..44be938b 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -8,7 +8,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.5.4' + classpath 'com.android.tools.build:gradle:4.1.0' classpath 'com.google.gms:google-services:4.3.4' classpath 'io.fabric.tools:gradle:1.26.1' } diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 31afd709..6f0c1a0f 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,5 @@ 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-6.7-all.zip + diff --git a/ios/Flutter/Debug.xcconfig b/ios/Flutter/Debug.xcconfig index 592ceee8..ec97fc6f 100755 --- a/ios/Flutter/Debug.xcconfig +++ b/ios/Flutter/Debug.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/ios/Flutter/Release.xcconfig b/ios/Flutter/Release.xcconfig index 592ceee8..c4855bfe 100755 --- a/ios/Flutter/Release.xcconfig +++ b/ios/Flutter/Release.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/ios/Podfile b/ios/Podfile new file mode 100644 index 00000000..1e8c3c90 --- /dev/null +++ b/ios/Podfile @@ -0,0 +1,41 @@ +# Uncomment this line to define a global platform for your project +# platform :ios, '9.0' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_ios_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_ios_build_settings(target) + end +end diff --git a/lib/auth/badgeModel.g.dart b/lib/auth/badgeModel.g.dart index d84abd12..a1afa799 100644 --- a/lib/auth/badgeModel.g.dart +++ b/lib/auth/badgeModel.g.dart @@ -62,17 +62,15 @@ class BadgeAdapter extends TypeAdapter { // JsonSerializableGenerator // ************************************************************************** -Badge _$BadgeFromJson(Map json) { - return Badge( - name: json['name'] as String, - description: json['description'] as String, - id: json['id'] as String, - awardedAt: json['awardedAt'] as String, - imageUrl: json['imageUrl'] as String, - color: json['color'] as String, - url: json['url'] as String, - ); -} +Badge _$BadgeFromJson(Map json) => Badge( + name: json['name'] as String, + description: json['description'] as String, + id: json['id'] as String, + awardedAt: json['awardedAt'] as String, + imageUrl: json['imageUrl'] as String, + color: json['color'] as String, + url: json['url'] as String, + ); Map _$BadgeToJson(Badge instance) => { 'name': instance.name, diff --git a/lib/auth/google_auth.dart b/lib/auth/google_auth.dart index 2f426849..b4c1f811 100644 --- a/lib/auth/google_auth.dart +++ b/lib/auth/google_auth.dart @@ -1,16 +1,15 @@ import 'package:Prism/analytics/analytics_service.dart'; import 'package:Prism/auth/userModel.dart'; +import 'package:Prism/global/globals.dart' as globals; import 'package:Prism/logger/logger.dart'; +import 'package:Prism/main.dart' as main; import 'package:Prism/payments/upgrade.dart'; +import 'package:Prism/ui/pages/home/wallpapers/homeScreen.dart' as home; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:firebase_auth/firebase_auth.dart'; -import 'package:flutter/foundation.dart'; import 'package:google_sign_in/google_sign_in.dart'; import 'package:hive/hive.dart'; import 'package:purchases_flutter/purchases_flutter.dart'; -import 'package:Prism/ui/pages/home/wallpapers/homeScreen.dart' as home; -import 'package:Prism/global/globals.dart' as globals; -import 'package:Prism/main.dart' as main; const String USER_OLD_COLLECTION = 'users'; const String USER_NEW_COLLECTION = 'usersv2'; diff --git a/lib/auth/transactionModel.g.dart b/lib/auth/transactionModel.g.dart index 3042e0f2..501c3f84 100644 --- a/lib/auth/transactionModel.g.dart +++ b/lib/auth/transactionModel.g.dart @@ -62,17 +62,16 @@ class PrismTransactionAdapter extends TypeAdapter { // JsonSerializableGenerator // ************************************************************************** -PrismTransaction _$PrismTransactionFromJson(Map json) { - return PrismTransaction( - name: json['name'] as String, - description: json['description'] as String, - id: json['id'] as String, - amount: json['amount'] as String, - credit: json['credit'] as bool, - by: json['by'] as String, - processedAt: json['processedAt'] as String, - ); -} +PrismTransaction _$PrismTransactionFromJson(Map json) => + PrismTransaction( + name: json['name'] as String, + description: json['description'] as String, + id: json['id'] as String, + amount: json['amount'] as String, + credit: json['credit'] as bool, + by: json['by'] as String, + processedAt: json['processedAt'] as String, + ); Map _$PrismTransactionToJson(PrismTransaction instance) => { diff --git a/lib/auth/userModel.g.dart b/lib/auth/userModel.g.dart index 71734109..292dd599 100644 --- a/lib/auth/userModel.g.dart +++ b/lib/auth/userModel.g.dart @@ -95,32 +95,30 @@ class PrismUsersV2Adapter extends TypeAdapter { // JsonSerializableGenerator // ************************************************************************** -PrismUsersV2 _$PrismUsersV2FromJson(Map json) { - return PrismUsersV2( - username: json['username'] as String, - email: json['email'] as String, - id: json['id'] as String, - createdAt: json['createdAt'] as String, - premium: json['premium'] as bool, - lastLoginAt: json['lastLoginAt'] as String, - links: json['links'] as Map, - followers: json['followers'] as List, - following: json['following'] as List, - profilePhoto: json['profilePhoto'] as String, - bio: json['bio'] as String, - loggedIn: json['loggedIn'] as bool, - badges: (json['badges'] as List) - .map((e) => Badge.fromJson(e as Map)) - .toList(), - subPrisms: json['subPrisms'] as List, - coins: json['coins'] as int, - transactions: (json['transactions'] as List) - .map((e) => PrismTransaction.fromJson(e as Map)) - .toList(), - name: json['name'] as String, - coverPhoto: json['coverPhoto'] as String?, - ); -} +PrismUsersV2 _$PrismUsersV2FromJson(Map json) => PrismUsersV2( + username: json['username'] as String, + email: json['email'] as String, + id: json['id'] as String, + createdAt: json['createdAt'] as String, + premium: json['premium'] as bool, + lastLoginAt: json['lastLoginAt'] as String, + links: json['links'] as Map, + followers: json['followers'] as List, + following: json['following'] as List, + profilePhoto: json['profilePhoto'] as String, + bio: json['bio'] as String, + loggedIn: json['loggedIn'] as bool, + badges: (json['badges'] as List) + .map((e) => Badge.fromJson(e as Map)) + .toList(), + subPrisms: json['subPrisms'] as List, + coins: json['coins'] as int, + transactions: (json['transactions'] as List) + .map((e) => PrismTransaction.fromJson(e as Map)) + .toList(), + name: json['name'] as String, + coverPhoto: json['coverPhoto'] as String?, + ); Map _$PrismUsersV2ToJson(PrismUsersV2 instance) => { diff --git a/lib/auth/userOldModel.dart b/lib/auth/userOldModel.dart index aade2678..fea1b134 100644 --- a/lib/auth/userOldModel.dart +++ b/lib/auth/userOldModel.dart @@ -1,9 +1,8 @@ import 'package:Prism/auth/google_auth.dart'; import 'package:Prism/logger/logger.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; -import 'package:flutter/material.dart'; -import 'package:hive/hive.dart'; import 'package:firebase_auth/firebase_auth.dart'; +import 'package:hive/hive.dart'; part 'userOldModel.g.dart'; diff --git a/lib/data/favourites/provider/favouriteProvider.dart b/lib/data/favourites/provider/favouriteProvider.dart index b70a3687..c5411088 100644 --- a/lib/data/favourites/provider/favouriteProvider.dart +++ b/lib/data/favourites/provider/favouriteProvider.dart @@ -1,10 +1,10 @@ import 'package:Prism/auth/google_auth.dart'; import 'package:Prism/data/pexels/model/wallpaperp.dart'; import 'package:Prism/data/wallhaven/model/wallpaper.dart'; +import 'package:Prism/global/globals.dart' as globals; import 'package:Prism/logger/logger.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/material.dart'; -import 'package:Prism/global/globals.dart' as globals; import 'package:hive/hive.dart'; class FavouriteProvider extends ChangeNotifier { diff --git a/lib/data/favourites/provider/favouriteSetupProvider.dart b/lib/data/favourites/provider/favouriteSetupProvider.dart index d846b4fb..4fbd6842 100644 --- a/lib/data/favourites/provider/favouriteSetupProvider.dart +++ b/lib/data/favourites/provider/favouriteSetupProvider.dart @@ -1,8 +1,8 @@ import 'package:Prism/auth/google_auth.dart'; +import 'package:Prism/global/globals.dart' as globals; import 'package:Prism/logger/logger.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/material.dart'; -import 'package:Prism/global/globals.dart' as globals; import 'package:hive/hive.dart'; class FavouriteSetupProvider extends ChangeNotifier { diff --git a/lib/data/links/model/linksModel.dart b/lib/data/links/model/linksModel.dart index 5b292539..60c49339 100644 --- a/lib/data/links/model/linksModel.dart +++ b/lib/data/links/model/linksModel.dart @@ -1,5 +1,5 @@ -import 'package:flutter/material.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; +import 'package:flutter/material.dart'; class LinksModel { String name; diff --git a/lib/data/profile/wallpaper/getUserProfile.dart b/lib/data/profile/wallpaper/getUserProfile.dart index 237f6b5b..b1864f79 100644 --- a/lib/data/profile/wallpaper/getUserProfile.dart +++ b/lib/data/profile/wallpaper/getUserProfile.dart @@ -1,12 +1,9 @@ import 'package:Prism/auth/google_auth.dart'; -import 'package:Prism/auth/userModel.dart'; -import 'package:Prism/auth/userOldModel.dart'; import 'package:Prism/data/links/model/linksModel.dart'; +import 'package:Prism/global/globals.dart' as globals; import 'package:Prism/logger/logger.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; -import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/material.dart'; -import 'package:Prism/global/globals.dart' as globals; class UserProfileProvider extends ChangeNotifier { final FirebaseFirestore databaseReference = FirebaseFirestore.instance; @@ -146,9 +143,9 @@ Future unfollow(String email, String id) async { Future setUserLinks(List linklist, String id) async { final Map updateLink = {}; - linklist.forEach((element) { + for (final element in linklist) { updateLink[element.name] = element.link; - }); + } await databaseReference .collection(USER_NEW_COLLECTION) .doc(id) diff --git a/lib/data/profile/wallpaper/profileSetupProvider.dart b/lib/data/profile/wallpaper/profileSetupProvider.dart index 85c9c721..f7119d93 100644 --- a/lib/data/profile/wallpaper/profileSetupProvider.dart +++ b/lib/data/profile/wallpaper/profileSetupProvider.dart @@ -1,7 +1,7 @@ +import 'package:Prism/global/globals.dart' as globals; import 'package:Prism/logger/logger.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/material.dart'; -import 'package:Prism/global/globals.dart' as globals; class ProfileSetupProvider extends ChangeNotifier { final FirebaseFirestore databaseReference = FirebaseFirestore.instance; diff --git a/lib/data/profile/wallpaper/profileWallProvider.dart b/lib/data/profile/wallpaper/profileWallProvider.dart index 42bfbf52..0791b819 100644 --- a/lib/data/profile/wallpaper/profileWallProvider.dart +++ b/lib/data/profile/wallpaper/profileWallProvider.dart @@ -1,7 +1,7 @@ +import 'package:Prism/global/globals.dart' as globals; import 'package:Prism/logger/logger.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/material.dart'; -import 'package:Prism/global/globals.dart' as globals; class ProfileWallProvider extends ChangeNotifier { final FirebaseFirestore databaseReference = FirebaseFirestore.instance; diff --git a/lib/data/setups/provider/setupProvider.dart b/lib/data/setups/provider/setupProvider.dart index 22911e50..c290d7cc 100644 --- a/lib/data/setups/provider/setupProvider.dart +++ b/lib/data/setups/provider/setupProvider.dart @@ -107,7 +107,9 @@ Future getSetupFromName(String? name) async { .where("name", isEqualTo: name) .get() .then((value) { - value.docs.forEach((f) => setup = f.data()); + for (final f in value.docs) { + setup = f.data(); + } logger.d(setup.toString()); }).catchError((e) { logger.d("data done with error"); diff --git a/lib/data/share/createDynamicLink.dart b/lib/data/share/createDynamicLink.dart index 14eab568..bbccb0d1 100644 --- a/lib/data/share/createDynamicLink.dart +++ b/lib/data/share/createDynamicLink.dart @@ -1,12 +1,11 @@ import 'package:Prism/analytics/analytics_service.dart'; +import 'package:Prism/logger/logger.dart'; +import 'package:Prism/theme/toasts.dart' as toasts; import 'package:Prism/ui/widgets/popup/copyrightPopUp.dart'; import 'package:animations/animations.dart'; import 'package:firebase_dynamic_links/firebase_dynamic_links.dart'; -import 'package:flutter/foundation.dart'; -import 'package:Prism/logger/logger.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:Prism/theme/toasts.dart' as toasts; import 'package:share/share.dart'; Future createDynamicLink( diff --git a/lib/data/upload/wallpaper/wallfirestore.dart b/lib/data/upload/wallpaper/wallfirestore.dart index 311f4232..71422ea6 100644 --- a/lib/data/upload/wallpaper/wallfirestore.dart +++ b/lib/data/upload/wallpaper/wallfirestore.dart @@ -1,11 +1,12 @@ import 'dart:convert'; + import 'package:Prism/gitkey.dart'; +import 'package:Prism/global/globals.dart' as globals; import 'package:Prism/main.dart' as main; -import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:Prism/theme/toasts.dart' as toasts; -import 'package:intl/intl.dart'; +import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:http/http.dart' as http; -import 'package:Prism/global/globals.dart' as globals; +import 'package:intl/intl.dart'; FirebaseFirestore firestore = FirebaseFirestore.instance; Future createRecord( diff --git a/lib/data/wallhaven/provider/wallhavenWithoutProvider.dart b/lib/data/wallhaven/provider/wallhavenWithoutProvider.dart index 2c72b871..1f47c202 100644 --- a/lib/data/wallhaven/provider/wallhavenWithoutProvider.dart +++ b/lib/data/wallhaven/provider/wallhavenWithoutProvider.dart @@ -1,11 +1,11 @@ import 'dart:convert'; + import 'package:Prism/data/categories/categories.dart'; import 'package:Prism/data/wallhaven/model/tag.dart'; import 'package:Prism/data/wallhaven/model/wallpaper.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/router.dart'; -import 'package:flutter/foundation.dart'; import 'package:http/http.dart' as http; -import 'package:Prism/logger/logger.dart'; List walls = []; List wallsS = []; diff --git a/lib/global/categoryProvider.dart b/lib/global/categoryProvider.dart index f460a160..374115ea 100644 --- a/lib/global/categoryProvider.dart +++ b/lib/global/categoryProvider.dart @@ -1,11 +1,11 @@ import 'package:Prism/data/categories/categories.dart'; +import 'package:Prism/data/pexels/provider/pexelsWithoutProvider.dart' as pdata; import 'package:Prism/data/prism/provider/prismWithoutProvider.dart' as data; import 'package:Prism/data/wallhaven/provider/wallhavenWithoutProvider.dart' as wdata; -import 'package:Prism/data/pexels/provider/pexelsWithoutProvider.dart' as pdata; import 'package:Prism/global/categoryMenu.dart'; -import 'package:flutter/cupertino.dart'; import 'package:Prism/main.dart' as main; +import 'package:flutter/cupertino.dart'; final List choices = categories .map( diff --git a/lib/global/globals.dart b/lib/global/globals.dart index 5ec8c544..ed3b83a6 100644 --- a/lib/global/globals.dart +++ b/lib/global/globals.dart @@ -26,7 +26,7 @@ PrismUsersV2 prismUser = main.prefs.get( coverPhoto: "", ), ) as PrismUsersV2; -String currentAppVersion = '2.6.9'; +String currentAppVersion = '2.7.0'; String obsoleteAppVersion = '2.6.0'; String currentAppVersionCode = '75'; bool updateChecked = false; @@ -69,11 +69,11 @@ String bannerTextOn = "true"; bool isPremiumWall(List premiumCollections, List wallCollections) { bool result = false; - wallCollections.forEach((element) { + for (final element in wallCollections) { if (premiumCollections.contains(element)) { result = true; } else {} - }); + } return result; } diff --git a/lib/logger/logger.dart b/lib/logger/logger.dart index a772ae1f..a0ef4f1c 100644 --- a/lib/logger/logger.dart +++ b/lib/logger/logger.dart @@ -1,9 +1,9 @@ import 'dart:developer' as developer; import 'dart:io'; +import 'package:file_encrypter/file_encrypter.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter_archive/flutter_archive.dart'; -import 'package:file_encrypter/file_encrypter.dart'; import 'package:logger/logger.dart'; import 'package:path/path.dart'; import 'package:path_provider/path_provider.dart'; @@ -165,7 +165,7 @@ Future encryptLogsZip(String zipPath) async { pathList.removeLast(); final String outFilename = "${pathList.join("/")}/logs_zip.dat"; logger.v("Encryption Started"); - String secretKey = await FileEncrypter.encrypt( + final String secretKey = await FileEncrypter.encrypt( inFilename: zipPath, outFileName: outFilename, ); diff --git a/lib/main.dart b/lib/main.dart index 7ea04ac2..88129004 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,45 +1,47 @@ import 'dart:async'; import 'dart:io'; + import 'package:Prism/analytics/analytics_service.dart'; import 'package:Prism/auth/badgeModel.dart'; import 'package:Prism/auth/transactionModel.dart'; import 'package:Prism/auth/userModel.dart'; import 'package:Prism/auth/userOldModel.dart'; import 'package:Prism/data/ads/adsNotifier.dart'; +import 'package:Prism/data/favourites/provider/favouriteProvider.dart'; import 'package:Prism/data/favourites/provider/favouriteSetupProvider.dart'; import 'package:Prism/data/notifications/model/inAppNotifModel.dart'; import 'package:Prism/data/palette/paletteNotifier.dart'; import 'package:Prism/data/profile/wallpaper/getUserProfile.dart'; import 'package:Prism/data/profile/wallpaper/profileSetupProvider.dart'; import 'package:Prism/data/profile/wallpaper/profileWallProvider.dart'; +import 'package:Prism/data/setups/provider/setupProvider.dart'; import 'package:Prism/data/user/user_notifier.dart'; import 'package:Prism/global/categoryProvider.dart'; +import 'package:Prism/global/globals.dart' as globals; import 'package:Prism/locator/locator.dart'; import 'package:Prism/logger/logger.dart'; import 'package:Prism/notifications/localNotification.dart'; import 'package:Prism/payments/upgrade.dart'; -import 'package:Prism/data/favourites/provider/favouriteProvider.dart'; -import 'package:Prism/data/setups/provider/setupProvider.dart'; +import 'package:Prism/routes/router.dart' as router; import 'package:Prism/theme/darkThemeModel.dart'; import 'package:Prism/theme/themeModeProvider.dart'; import 'package:Prism/theme/themeModel.dart'; +import 'package:Prism/theme/toasts.dart' as toasts; import 'package:Prism/ui/pages/home/core/splashScreen.dart'; import 'package:Prism/ui/pages/onboarding/onboardingScreen.dart'; import 'package:Prism/ui/pages/undefinedScreen.dart'; import 'package:firebase_analytics/observer.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_in_app_messaging/firebase_in_app_messaging.dart'; +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:Prism/global/globals.dart' as globals; -import 'package:Prism/routes/router.dart' as router; -import 'package:Prism/theme/toasts.dart' as toasts; +import 'package:flutter/services.dart'; import 'package:flutter_displaymode/flutter_displaymode.dart'; +import 'package:flutter_downloader/flutter_downloader.dart'; import 'package:google_mobile_ads/google_mobile_ads.dart'; import 'package:hive/hive.dart'; import 'package:path_provider/path_provider.dart'; import 'package:provider/provider.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/services.dart'; String userHiveKey = "prismUserV2-1"; late Box prefs; @@ -50,7 +52,6 @@ String? currentMode; Color? lightAccent; Color? darkAccent; bool? hqThumbs; -late bool optimisedWallpapers; int? categories; int? purity; LocalNotification localNotification = LocalNotification(); @@ -73,6 +74,9 @@ Future main() async { Firebase.initializeApp().then((_) { getApplicationDocumentsDirectory().then( (dir) async { + await FlutterDownloader.initialize( + debug: false, + ); Hive.init(dir.path); // await Hive.deleteBoxFromDisk('prefs'); // Hive.ignoreTypeId(33); @@ -116,12 +120,6 @@ Future main() async { .toString() .replaceAll("Color(", "") .replaceAll(")", ""))); - optimisedWallpapers = prefs.get('optimisedWallpapers') == true; - // if (optimisedWallpapers) { - // prefs.put('optimisedWallpapers', true); - // } else { - prefs.put('optimisedWallpapers', false); - // } categories = prefs.get('WHcategories') as int? ?? 100; if (categories == 100) { prefs.put('WHcategories', 100); diff --git a/lib/notifications/localNotification.dart b/lib/notifications/localNotification.dart index 160e7d07..fa503d98 100644 --- a/lib/notifications/localNotification.dart +++ b/lib/notifications/localNotification.dart @@ -1,6 +1,6 @@ import 'package:Prism/routes/routing_constants.dart'; -import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_local_notifications/flutter_local_notifications.dart'; class LocalNotification { FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = @@ -40,7 +40,7 @@ class LocalNotification { final androidNotificationChannel = AndroidNotificationChannel( id, name, - description, + description: description, playSound: playSound, ); await flutterLocalNotificationsPlugin @@ -54,7 +54,8 @@ class LocalNotification { AndroidNotificationDetails( 'downloads', 'Downloads', - 'Get notifications for download progress of wallpapers.', + channelDescription: + 'Get notifications for download progress of wallpapers.', importance: Importance.max, priority: Priority.high, showProgress: true, @@ -80,7 +81,8 @@ class LocalNotification { AndroidNotificationDetails( 'downloads', 'Downloads', - 'Get notifications for download progress of wallpapers.', + channelDescription: + 'Get notifications for download progress of wallpapers.', importance: Importance.min, priority: Priority.min, color: Color(0xFFE57697), diff --git a/lib/payments/upgrade.dart b/lib/payments/upgrade.dart index 126a74ad..aa4b9d56 100644 --- a/lib/payments/upgrade.dart +++ b/lib/payments/upgrade.dart @@ -1,18 +1,19 @@ import 'dart:async'; + import 'package:Prism/gitkey.dart'; +import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/main.dart' as main; +import 'package:Prism/payments/components.dart'; import 'package:Prism/routes/router.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; import 'package:Prism/theme/toasts.dart' as toasts; import 'package:Prism/ui/widgets/animated/loader.dart'; +import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:purchases_flutter/purchases_flutter.dart'; -import 'package:cached_network_image/cached_network_image.dart'; import 'package:purchases_flutter/object_wrappers.dart'; -import 'package:Prism/payments/components.dart'; -import 'package:Prism/global/globals.dart' as globals; -import 'package:Prism/logger/logger.dart'; +import 'package:purchases_flutter/purchases_flutter.dart'; PurchaserInfo? _purchaserInfo; diff --git a/lib/routes/router.dart b/lib/routes/router.dart index 768b66da..8bd1d152 100644 --- a/lib/routes/router.dart +++ b/lib/routes/router.dart @@ -1,14 +1,18 @@ import 'package:Prism/analytics/analytics_service.dart'; -import 'package:Prism/routes/routing_constants.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/payments/upgrade.dart'; +import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/ui/pages/adsNotLoading.dart'; +// import 'package:Prism/ui/pages/profile/photographerProfile.dart'; +import 'package:Prism/ui/pages/categories/colorScreen.dart'; +import 'package:Prism/ui/pages/download/downloadScreen.dart'; +import 'package:Prism/ui/pages/download/downloadWallpaperViewScreen.dart'; import 'package:Prism/ui/pages/favourite/favouriteSetupScreen.dart'; import 'package:Prism/ui/pages/favourite/favouriteSetupViewScreen.dart'; import 'package:Prism/ui/pages/favourite/favouriteWallScreen.dart'; -import 'package:Prism/ui/pages/home/collections/collectionViewScreen.dart'; -import 'package:Prism/ui/pages/download/downloadScreen.dart'; -import 'package:Prism/ui/pages/download/downloadWallpaperViewScreen.dart'; import 'package:Prism/ui/pages/favourite/favouriteWallViewScreen.dart'; +import 'package:Prism/ui/pages/home/collections/collectionViewScreen.dart'; +import 'package:Prism/ui/pages/home/core/notificationScreen.dart'; import 'package:Prism/ui/pages/home/core/pageManager.dart'; import 'package:Prism/ui/pages/home/core/splashScreen.dart'; import 'package:Prism/ui/pages/home/wallpapers/wallpaperFilterScreen.dart'; @@ -16,16 +20,14 @@ import 'package:Prism/ui/pages/home/wallpapers/wallpaperScreen.dart'; import 'package:Prism/ui/pages/onboarding/onboardingScreen.dart'; import 'package:Prism/ui/pages/profile/aboutScreen.dart'; import 'package:Prism/ui/pages/profile/editSetupDetails.dart'; -import 'package:Prism/ui/pages/profile/followerProfile.dart'; -// import 'package:Prism/ui/pages/profile/photographerProfile.dart'; -import 'package:Prism/ui/pages/categories/colorScreen.dart'; +import 'package:Prism/ui/pages/profile/followersScreen.dart'; import 'package:Prism/ui/pages/profile/profileScreen.dart'; import 'package:Prism/ui/pages/profile/profileSetupViewScreen.dart'; import 'package:Prism/ui/pages/profile/profileWallViewScreen.dart'; +import 'package:Prism/ui/pages/profile/reviewScreen.dart'; import 'package:Prism/ui/pages/profile/settings.dart'; import 'package:Prism/ui/pages/profile/sharePrismScreen.dart'; import 'package:Prism/ui/pages/profile/themeView.dart'; -import 'package:Prism/ui/pages/profile/followersScreen.dart'; import 'package:Prism/ui/pages/profile/userProfileSetupViewScreen.dart'; import 'package:Prism/ui/pages/profile/userProfileWallViewScreen.dart'; import 'package:Prism/ui/pages/search/searchScreen.dart'; @@ -36,18 +38,15 @@ import 'package:Prism/ui/pages/setup/setupViewScreen.dart'; import 'package:Prism/ui/pages/setup/shareSetupViewScreen.dart'; import 'package:Prism/ui/pages/share/shareWallViewScreen.dart'; import 'package:Prism/ui/pages/undefinedScreen.dart'; -import 'package:Prism/ui/pages/home/core/notificationScreen.dart'; import 'package:Prism/ui/pages/upload/draftSetupScreen.dart'; import 'package:Prism/ui/pages/upload/editWallScreen.dart'; import 'package:Prism/ui/pages/upload/setupGuidelines.dart'; import 'package:Prism/ui/pages/upload/uploadSetupScreen.dart'; import 'package:Prism/ui/pages/upload/uploadWallScreen.dart'; -import 'package:Prism/ui/pages/profile/reviewScreen.dart'; import 'package:Prism/ui/widgets/popup/editProfilePanel.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:image/image.dart' as imagelib; -import 'package:Prism/logger/logger.dart'; List navStack = ["Home"]; diff --git a/lib/theme/darkThemeModel.dart b/lib/theme/darkThemeModel.dart index 4342e811..cf75446b 100644 --- a/lib/theme/darkThemeModel.dart +++ b/lib/theme/darkThemeModel.dart @@ -1,17 +1,17 @@ -import 'package:flutter/material.dart'; -import 'package:Prism/theme/theme.dart'; -import 'package:Prism/main.dart' as main; import 'package:Prism/logger/logger.dart'; +import 'package:Prism/main.dart' as main; +import 'package:Prism/theme/theme.dart'; +import 'package:flutter/material.dart'; Map darkThemes = { "kDMaterial Dark": kDarkTheme, - "kDAMOLED": kDarkTheme2, - "kDOlive": kDarkTheme3, - "kDDeep Ocean": kDarkTheme4, - "kDJungle": kDarkTheme5, - "kDPepper": kDarkTheme6, - "kDSky": kDarkTheme7, - "kDSteel": kDarkTheme8, + // "kDAMOLED": kDarkTheme2, + // "kDOlive": kDarkTheme3, + // "kDDeep Ocean": kDarkTheme4, + // "kDJungle": kDarkTheme5, + // "kDPepper": kDarkTheme6, + // "kDSky": kDarkTheme7, + // "kDSteel": kDarkTheme8, }; class DarkThemeModel extends ChangeNotifier { diff --git a/lib/theme/theme.dart b/lib/theme/theme.dart index 5abbd7da..80b649f1 100644 --- a/lib/theme/theme.dart +++ b/lib/theme/theme.dart @@ -1,17 +1,7 @@ -import 'package:flutter/material.dart'; import 'package:Prism/theme/config.dart' as config; +import 'package:flutter/material.dart'; -ThemeData kLightTheme = ThemeData( - colorScheme: const ColorScheme.light(primary: Color(0xFFE57697)), - canvasColor: Colors.transparent, - primaryColor: Colors.white, - brightness: Brightness.light, - errorColor: const Color(0xFFE57697), - accentColor: config.Colors().accentColor(1), - focusColor: config.Colors().mainColor(1), - hintColor: config.Colors().secondColor(1), - accentTextTheme: - const TextTheme(headline6: TextStyle(fontFamily: "Proxima Nova")), +ThemeData kLightTheme = ThemeData.from( textTheme: TextTheme( button: const TextStyle( fontFamily: 'Proxima Nova', @@ -75,19 +65,35 @@ ThemeData kLightTheme = ThemeData( color: config.Colors().accentColor(1), ), ), + colorScheme: ColorScheme( + brightness: Brightness.light, + primary: config.Colors().mainColor(1), + primaryVariant: config.Colors().mainColor(1), + secondary: config.Colors().accentColor(1), + secondaryVariant: config.Colors().accentColor(1), + background: config.Colors().mainColor(1), + surface: config.Colors().mainColor(1), + onBackground: Colors.black, + onSurface: Colors.black, + onError: Colors.white, + onPrimary: const Color(0xFFE57697).computeLuminance() > 0.5 + ? Colors.black + : Colors.white, + onSecondary: const Color(0xFFE57697).computeLuminance() > 0.5 + ? Colors.black + : Colors.white, + error: Colors.red.shade400, + ), +).copyWith( + textSelectionTheme: + const TextSelectionThemeData(cursorColor: Color(0xFFE57697)), + highlightColor: const Color(0xFFE57697).withOpacity(0.2), + scaffoldBackgroundColor: config.Colors().mainColor(1), + toggleableActiveColor: const Color(0xFFE57697), + disabledColor: Colors.grey, ); -ThemeData kDarkTheme = ThemeData( - colorScheme: const ColorScheme.dark(primary: Color(0xFFE57697)), - canvasColor: Colors.transparent, - primaryColor: config.Colors().mainDarkColor(1), - brightness: Brightness.dark, - errorColor: const Color(0xFFE57697), - accentColor: config.Colors().accentDarkColor(1), - focusColor: config.Colors().mainDarkColor(1), - hintColor: config.Colors().secondDarkColor(1), - accentTextTheme: - const TextTheme(headline6: TextStyle(fontFamily: "Proxima Nova")), +ThemeData kDarkTheme = ThemeData.from( textTheme: TextTheme( button: TextStyle( fontFamily: 'Proxima Nova', @@ -106,15 +112,17 @@ ThemeData kDarkTheme = ThemeData( fontWeight: FontWeight.w500, color: config.Colors().accentDarkColor(1)), headline3: const TextStyle( - fontSize: 20, - fontFamily: "Proxima Nova", - fontWeight: FontWeight.w500, - color: Colors.white), + fontSize: 20, + fontFamily: "Proxima Nova", + fontWeight: FontWeight.w500, + color: Colors.white, + ), headline2: const TextStyle( - fontSize: 24, - fontFamily: "Proxima Nova", - fontWeight: FontWeight.w500, - color: Colors.white), + fontSize: 24, + fontFamily: "Proxima Nova", + fontWeight: FontWeight.w500, + color: Colors.white, + ), headline1: TextStyle( fontFamily: 'Proxima Nova', color: config.Colors().accentDarkColor(1), @@ -151,764 +159,770 @@ ThemeData kDarkTheme = ThemeData( color: config.Colors().accentDarkColor(1), ), ), -); - -ThemeData kLightTheme2 = ThemeData( - colorScheme: const ColorScheme.light(primary: Color(0xFFC19439)), - canvasColor: Colors.transparent, - primaryColor: const Color(0xFFF7F1E3), - brightness: Brightness.light, - errorColor: const Color(0xFFC19439), - accentColor: const Color(0xFF96732C), - focusColor: config.Colors().mainColor(1), - hintColor: const Color(0xFFF1E6D0), - accentTextTheme: - const TextTheme(headline6: TextStyle(fontFamily: "Proxima Nova")), - textTheme: TextTheme( - button: const TextStyle( - fontFamily: 'Proxima Nova', - fontSize: 16, - fontWeight: FontWeight.w800, - color: Color(0xFFFFFFFF), - ), - headline5: TextStyle( - fontSize: 16.0, - color: Colors.white.withOpacity(1), - fontFamily: "Proxima Nova", - ), - headline4: TextStyle( - fontSize: 16, - fontFamily: "Proxima Nova", - fontWeight: FontWeight.w500, - color: config.Colors().accentColor(1)), - headline3: const TextStyle( - fontSize: 20, - fontFamily: "Proxima Nova", - fontWeight: FontWeight.w500, - color: Colors.black), - headline2: const TextStyle( - fontSize: 24, - fontFamily: "Proxima Nova", - fontWeight: FontWeight.w500, - color: Colors.black), - headline1: TextStyle( - fontFamily: 'Proxima Nova', - color: config.Colors().accentColor(1), - fontSize: 50, - fontWeight: FontWeight.w600, - ), - subtitle1: TextStyle( - fontSize: 20, - fontWeight: FontWeight.w900, - color: config.Colors().secondColor(1), - fontFamily: "Roboto", - ), - headline6: TextStyle( - fontSize: 13.0, - color: Colors.white.withOpacity(.85), - fontFamily: "Proxima Nova", - ), - bodyText2: TextStyle( - fontFamily: 'Proxima Nova', - fontSize: 14, - fontWeight: FontWeight.w500, - color: Colors.white.withOpacity(.75), - ), - bodyText1: TextStyle( - fontFamily: 'Proxima Nova', - fontSize: 24, - fontWeight: FontWeight.w500, - color: Colors.white.withOpacity(1), - ), - caption: TextStyle( - fontFamily: 'Roboto', - fontSize: 16, - fontWeight: FontWeight.w400, - color: config.Colors().accentColor(1), - ), + colorScheme: ColorScheme( + brightness: Brightness.dark, + primary: const Color(0xFFE57697), + primaryVariant: const Color(0xFFE57697), + secondary: Colors.white, + secondaryVariant: Colors.white, + background: config.Colors().mainDarkColor(1), + surface: config.Colors().mainDarkColor(1), + onBackground: Colors.white, + onSurface: Colors.white, + onError: Colors.white, + onPrimary: const Color(0xFFE57697).computeLuminance() > 0.5 + ? Colors.black + : Colors.white, + onSecondary: const Color(0xFFE57697).computeLuminance() > 0.5 + ? Colors.black + : Colors.white, + error: Colors.red.shade400, ), +).copyWith( + textSelectionTheme: + const TextSelectionThemeData(cursorColor: Color(0xFFE57697)), + highlightColor: const Color(0xFFE57697).withOpacity(0.2), + scaffoldBackgroundColor: config.Colors().mainDarkColor(1), + toggleableActiveColor: const Color(0xFFE57697), + disabledColor: Colors.grey, ); -ThemeData kDarkTheme2 = ThemeData( - colorScheme: const ColorScheme.dark(primary: Color(0xFFFFFFFF)), - canvasColor: Colors.transparent, - primaryColor: Colors.black, - brightness: Brightness.dark, - accentColor: Colors.white, - errorColor: Colors.black, - focusColor: Colors.black, - hintColor: Colors.black, - accentTextTheme: - const TextTheme(headline6: TextStyle(fontFamily: "Proxima Nova")), - textTheme: TextTheme( - button: const TextStyle( - fontFamily: 'Proxima Nova', - fontSize: 16, - fontWeight: FontWeight.w800, - color: Colors.black, - ), - headline5: const TextStyle( - fontSize: 16.0, - color: Colors.white, - fontFamily: "Proxima Nova", - ), - headline4: const TextStyle( - fontSize: 16, - fontFamily: "Proxima Nova", - fontWeight: FontWeight.w500, - color: Colors.white), - headline3: const TextStyle( - fontSize: 20, - fontFamily: "Proxima Nova", - fontWeight: FontWeight.w500, - color: Colors.white), - headline2: const TextStyle( - fontSize: 24, - fontFamily: "Proxima Nova", - fontWeight: FontWeight.w500, - color: Colors.white), - headline1: const TextStyle( - fontFamily: 'Proxima Nova', - color: Colors.white, - fontSize: 50, - fontWeight: FontWeight.w600, - ), - subtitle1: const TextStyle( - fontSize: 20, - fontWeight: FontWeight.w900, - color: Colors.black, - fontFamily: "Roboto", - ), - headline6: TextStyle( - fontSize: 14.0, - color: Colors.white.withOpacity(0.85), - fontFamily: "Proxima Nova", - ), - bodyText2: TextStyle( - fontFamily: 'Proxima Nova', - fontSize: 14, - fontWeight: FontWeight.w500, - color: Colors.white.withOpacity(.85), - ), - bodyText1: const TextStyle( - fontFamily: 'Proxima Nova', - fontSize: 22, - fontWeight: FontWeight.w500, - color: Colors.white, - ), - caption: const TextStyle( - fontFamily: 'Roboto', - fontSize: 16, - fontWeight: FontWeight.w400, - color: Colors.white, - ), - ), -); +// ThemeData kLightTheme2 = ThemeData( +// canvasColor: Colors.transparent, +// primaryColor: const Color(0xFFF7F1E3), +// brightness: Brightness.light, +// errorColor: const Color(0xFFC19439), +// focusColor: config.Colors().mainColor(1), +// hintColor: const Color(0xFFF1E6D0), +// textTheme: TextTheme( +// button: const TextStyle( +// fontFamily: 'Proxima Nova', +// fontSize: 16, +// fontWeight: FontWeight.w800, +// color: Color(0xFFFFFFFF), +// ), +// headline5: TextStyle( +// fontSize: 16.0, +// color: Colors.white.withOpacity(1), +// fontFamily: "Proxima Nova", +// ), +// headline4: TextStyle( +// fontSize: 16, +// fontFamily: "Proxima Nova", +// fontWeight: FontWeight.w500, +// color: config.Colors().accentColor(1)), +// headline3: const TextStyle( +// fontSize: 20, +// fontFamily: "Proxima Nova", +// fontWeight: FontWeight.w500, +// color: Colors.black), +// headline2: const TextStyle( +// fontSize: 24, +// fontFamily: "Proxima Nova", +// fontWeight: FontWeight.w500, +// color: Colors.black), +// headline1: TextStyle( +// fontFamily: 'Proxima Nova', +// color: config.Colors().accentColor(1), +// fontSize: 50, +// fontWeight: FontWeight.w600, +// ), +// subtitle1: TextStyle( +// fontSize: 20, +// fontWeight: FontWeight.w900, +// color: config.Colors().secondColor(1), +// fontFamily: "Roboto", +// ), +// headline6: TextStyle( +// fontSize: 13.0, +// color: Colors.white.withOpacity(.85), +// fontFamily: "Proxima Nova", +// ), +// bodyText2: TextStyle( +// fontFamily: 'Proxima Nova', +// fontSize: 14, +// fontWeight: FontWeight.w500, +// color: Colors.white.withOpacity(.75), +// ), +// bodyText1: TextStyle( +// fontFamily: 'Proxima Nova', +// fontSize: 24, +// fontWeight: FontWeight.w500, +// color: Colors.white.withOpacity(1), +// ), +// caption: TextStyle( +// fontFamily: 'Roboto', +// fontSize: 16, +// fontWeight: FontWeight.w400, +// color: config.Colors().accentColor(1), +// ), +// ), +// colorScheme: const ColorScheme.light(primary: Color(0xFFC19439)) +// .copyWith(secondary: const Color(0xFF96732C)), +// ); -ThemeData kLightTheme3 = ThemeData( - colorScheme: const ColorScheme.light(primary: Color(0xFFA7796D)), - canvasColor: Colors.transparent, - primaryColor: const Color(0xFFC5A79F), - brightness: Brightness.light, - errorColor: const Color(0xFFA7796D), - accentColor: const Color(0xFF7D564B), - focusColor: config.Colors().mainColor(1), - hintColor: const Color(0xFFBE9C93), - accentTextTheme: - const TextTheme(headline6: TextStyle(fontFamily: "Proxima Nova")), - textTheme: TextTheme( - button: const TextStyle( - fontFamily: 'Proxima Nova', - fontSize: 16, - fontWeight: FontWeight.w800, - color: Color(0xFFFFFFFF), - ), - headline5: TextStyle( - fontSize: 16.0, - color: Colors.white.withOpacity(1), - fontFamily: "Proxima Nova", - ), - headline4: TextStyle( - fontSize: 16, - fontFamily: "Proxima Nova", - fontWeight: FontWeight.w500, - color: config.Colors().accentColor(1)), - headline3: const TextStyle( - fontSize: 20, - fontFamily: "Proxima Nova", - fontWeight: FontWeight.w500, - color: Colors.black), - headline2: const TextStyle( - fontSize: 24, - fontFamily: "Proxima Nova", - fontWeight: FontWeight.w500, - color: Colors.black), - headline1: TextStyle( - fontFamily: 'Proxima Nova', - color: config.Colors().accentColor(1), - fontSize: 50, - fontWeight: FontWeight.w600, - ), - subtitle1: TextStyle( - fontSize: 20, - fontWeight: FontWeight.w900, - color: config.Colors().secondColor(1), - fontFamily: "Roboto", - ), - headline6: TextStyle( - fontSize: 13.0, - color: Colors.white.withOpacity(.85), - fontFamily: "Proxima Nova", - ), - bodyText2: TextStyle( - fontFamily: 'Proxima Nova', - fontSize: 14, - fontWeight: FontWeight.w500, - color: Colors.white.withOpacity(.75), - ), - bodyText1: TextStyle( - fontFamily: 'Proxima Nova', - fontSize: 24, - fontWeight: FontWeight.w500, - color: Colors.white.withOpacity(1), - ), - caption: TextStyle( - fontFamily: 'Roboto', - fontSize: 16, - fontWeight: FontWeight.w400, - color: config.Colors().accentColor(1), - ), - ), -); +// ThemeData kDarkTheme2 = ThemeData( +// canvasColor: Colors.transparent, +// primaryColor: Colors.black, +// brightness: Brightness.dark, +// errorColor: Colors.black, +// focusColor: Colors.black, +// hintColor: Colors.black, +// textTheme: TextTheme( +// button: const TextStyle( +// fontFamily: 'Proxima Nova', +// fontSize: 16, +// fontWeight: FontWeight.w800, +// color: Colors.black, +// ), +// headline5: const TextStyle( +// fontSize: 16.0, +// color: Colors.white, +// fontFamily: "Proxima Nova", +// ), +// headline4: const TextStyle( +// fontSize: 16, +// fontFamily: "Proxima Nova", +// fontWeight: FontWeight.w500, +// color: Colors.white), +// headline3: const TextStyle( +// fontSize: 20, +// fontFamily: "Proxima Nova", +// fontWeight: FontWeight.w500, +// color: Colors.white), +// headline2: const TextStyle( +// fontSize: 24, +// fontFamily: "Proxima Nova", +// fontWeight: FontWeight.w500, +// color: Colors.white), +// headline1: const TextStyle( +// fontFamily: 'Proxima Nova', +// color: Colors.white, +// fontSize: 50, +// fontWeight: FontWeight.w600, +// ), +// subtitle1: const TextStyle( +// fontSize: 20, +// fontWeight: FontWeight.w900, +// color: Colors.black, +// fontFamily: "Roboto", +// ), +// headline6: TextStyle( +// fontSize: 14.0, +// color: Colors.white.withOpacity(0.85), +// fontFamily: "Proxima Nova", +// ), +// bodyText2: TextStyle( +// fontFamily: 'Proxima Nova', +// fontSize: 14, +// fontWeight: FontWeight.w500, +// color: Colors.white.withOpacity(.85), +// ), +// bodyText1: const TextStyle( +// fontFamily: 'Proxima Nova', +// fontSize: 22, +// fontWeight: FontWeight.w500, +// color: Colors.white, +// ), +// caption: const TextStyle( +// fontFamily: 'Roboto', +// fontSize: 16, +// fontWeight: FontWeight.w400, +// color: Colors.white, +// ), +// ), +// colorScheme: const ColorScheme.dark(primary: Color(0xFFFFFFFF)) +// .copyWith(secondary: Colors.white), +// ); -ThemeData kLightTheme4 = ThemeData( - colorScheme: const ColorScheme.light(primary: Color(0xFF596F95)), - canvasColor: Colors.transparent, - primaryColor: const Color(0xFF8399BE), - brightness: Brightness.light, - errorColor: const Color(0xFF596F95), - accentColor: const Color(0xFF36435A), - focusColor: config.Colors().mainColor(1), - hintColor: const Color(0xFF788CAF), - accentTextTheme: - const TextTheme(headline6: TextStyle(fontFamily: "Proxima Nova")), - textTheme: TextTheme( - button: const TextStyle( - fontFamily: 'Proxima Nova', - fontSize: 16, - fontWeight: FontWeight.w800, - color: Color(0xFFFFFFFF), - ), - headline5: TextStyle( - fontSize: 16.0, - color: Colors.white.withOpacity(1), - fontFamily: "Proxima Nova", - ), - headline4: TextStyle( - fontSize: 16, - fontFamily: "Proxima Nova", - fontWeight: FontWeight.w500, - color: config.Colors().accentColor(1)), - headline3: const TextStyle( - fontSize: 20, - fontFamily: "Proxima Nova", - fontWeight: FontWeight.w500, - color: Colors.black), - headline2: const TextStyle( - fontSize: 24, - fontFamily: "Proxima Nova", - fontWeight: FontWeight.w500, - color: Colors.black), - headline1: TextStyle( - fontFamily: 'Proxima Nova', - color: config.Colors().accentColor(1), - fontSize: 50, - fontWeight: FontWeight.w600, - ), - subtitle1: TextStyle( - fontSize: 20, - fontWeight: FontWeight.w900, - color: config.Colors().secondColor(1), - fontFamily: "Roboto", - ), - headline6: TextStyle( - fontSize: 13.0, - color: Colors.white.withOpacity(.85), - fontFamily: "Proxima Nova", - ), - bodyText2: TextStyle( - fontFamily: 'Proxima Nova', - fontSize: 14, - fontWeight: FontWeight.w500, - color: Colors.white.withOpacity(.75), - ), - bodyText1: TextStyle( - fontFamily: 'Proxima Nova', - fontSize: 24, - fontWeight: FontWeight.w500, - color: Colors.white.withOpacity(1), - ), - caption: TextStyle( - fontFamily: 'Roboto', - fontSize: 16, - fontWeight: FontWeight.w400, - color: config.Colors().accentColor(1), - ), - ), -); +// ThemeData kLightTheme3 = ThemeData( +// canvasColor: Colors.transparent, +// primaryColor: const Color(0xFFC5A79F), +// brightness: Brightness.light, +// errorColor: const Color(0xFFA7796D), +// focusColor: config.Colors().mainColor(1), +// hintColor: const Color(0xFFBE9C93), +// textTheme: TextTheme( +// button: const TextStyle( +// fontFamily: 'Proxima Nova', +// fontSize: 16, +// fontWeight: FontWeight.w800, +// color: Color(0xFFFFFFFF), +// ), +// headline5: TextStyle( +// fontSize: 16.0, +// color: Colors.white.withOpacity(1), +// fontFamily: "Proxima Nova", +// ), +// headline4: TextStyle( +// fontSize: 16, +// fontFamily: "Proxima Nova", +// fontWeight: FontWeight.w500, +// color: config.Colors().accentColor(1)), +// headline3: const TextStyle( +// fontSize: 20, +// fontFamily: "Proxima Nova", +// fontWeight: FontWeight.w500, +// color: Colors.black), +// headline2: const TextStyle( +// fontSize: 24, +// fontFamily: "Proxima Nova", +// fontWeight: FontWeight.w500, +// color: Colors.black), +// headline1: TextStyle( +// fontFamily: 'Proxima Nova', +// color: config.Colors().accentColor(1), +// fontSize: 50, +// fontWeight: FontWeight.w600, +// ), +// subtitle1: TextStyle( +// fontSize: 20, +// fontWeight: FontWeight.w900, +// color: config.Colors().secondColor(1), +// fontFamily: "Roboto", +// ), +// headline6: TextStyle( +// fontSize: 13.0, +// color: Colors.white.withOpacity(.85), +// fontFamily: "Proxima Nova", +// ), +// bodyText2: TextStyle( +// fontFamily: 'Proxima Nova', +// fontSize: 14, +// fontWeight: FontWeight.w500, +// color: Colors.white.withOpacity(.75), +// ), +// bodyText1: TextStyle( +// fontFamily: 'Proxima Nova', +// fontSize: 24, +// fontWeight: FontWeight.w500, +// color: Colors.white.withOpacity(1), +// ), +// caption: TextStyle( +// fontFamily: 'Roboto', +// fontSize: 16, +// fontWeight: FontWeight.w400, +// color: config.Colors().accentColor(1), +// ), +// ), +// colorScheme: const ColorScheme.light(primary: Color(0xFFA7796D)) +// .copyWith(secondary: const Color(0xFF7D564B)), +// ); -ThemeData kDarkTheme3 = ThemeData( - colorScheme: const ColorScheme.dark(primary: Color(0xFF767B45)), - canvasColor: Colors.transparent, - primaryColor: const Color(0xFF202113), - brightness: Brightness.dark, - errorColor: const Color(0xFF767B45), - accentColor: const Color(0xFFE3E4D0), - focusColor: config.Colors().mainDarkColor(1), - hintColor: const Color(0xFF35371F), - accentTextTheme: - const TextTheme(headline6: TextStyle(fontFamily: "Proxima Nova")), - textTheme: TextTheme( - button: TextStyle( - fontFamily: 'Proxima Nova', - fontSize: 16, - fontWeight: FontWeight.w800, - color: config.Colors().mainDarkColor(1), - ), - headline5: TextStyle( - fontSize: 16.0, - color: config.Colors().accentDarkColor(1), - fontFamily: "Proxima Nova", - ), - headline4: TextStyle( - fontSize: 16, - fontFamily: "Proxima Nova", - fontWeight: FontWeight.w500, - color: config.Colors().accentDarkColor(1)), - headline3: const TextStyle( - fontSize: 20, - fontFamily: "Proxima Nova", - fontWeight: FontWeight.w500, - color: Colors.white), - headline2: const TextStyle( - fontSize: 24, - fontFamily: "Proxima Nova", - fontWeight: FontWeight.w500, - color: Colors.white), - headline1: TextStyle( - fontFamily: 'Proxima Nova', - color: config.Colors().accentDarkColor(1), - fontSize: 50, - fontWeight: FontWeight.w600, - ), - subtitle1: TextStyle( - fontSize: 20, - fontWeight: FontWeight.w900, - color: config.Colors().secondDarkColor(1), - fontFamily: "Roboto", - ), - headline6: TextStyle( - fontSize: 14.0, - color: config.Colors().accentDarkColor(.85), - fontFamily: "Proxima Nova", - ), - bodyText2: TextStyle( - fontFamily: 'Proxima Nova', - fontSize: 14, - fontWeight: FontWeight.w500, - color: config.Colors().accentDarkColor(.85), - ), - bodyText1: TextStyle( - fontFamily: 'Proxima Nova', - fontSize: 22, - fontWeight: FontWeight.w500, - color: config.Colors().accentDarkColor(1), - ), - caption: TextStyle( - fontFamily: 'Roboto', - fontSize: 16, - fontWeight: FontWeight.w400, - color: config.Colors().accentDarkColor(1), - ), - ), -); +// ThemeData kLightTheme4 = ThemeData( +// canvasColor: Colors.transparent, +// primaryColor: const Color(0xFF8399BE), +// brightness: Brightness.light, +// errorColor: const Color(0xFF596F95), +// focusColor: config.Colors().mainColor(1), +// hintColor: const Color(0xFF788CAF), +// textTheme: TextTheme( +// button: const TextStyle( +// fontFamily: 'Proxima Nova', +// fontSize: 16, +// fontWeight: FontWeight.w800, +// color: Color(0xFFFFFFFF), +// ), +// headline5: TextStyle( +// fontSize: 16.0, +// color: Colors.white.withOpacity(1), +// fontFamily: "Proxima Nova", +// ), +// headline4: TextStyle( +// fontSize: 16, +// fontFamily: "Proxima Nova", +// fontWeight: FontWeight.w500, +// color: config.Colors().accentColor(1)), +// headline3: const TextStyle( +// fontSize: 20, +// fontFamily: "Proxima Nova", +// fontWeight: FontWeight.w500, +// color: Colors.black), +// headline2: const TextStyle( +// fontSize: 24, +// fontFamily: "Proxima Nova", +// fontWeight: FontWeight.w500, +// color: Colors.black), +// headline1: TextStyle( +// fontFamily: 'Proxima Nova', +// color: config.Colors().accentColor(1), +// fontSize: 50, +// fontWeight: FontWeight.w600, +// ), +// subtitle1: TextStyle( +// fontSize: 20, +// fontWeight: FontWeight.w900, +// color: config.Colors().secondColor(1), +// fontFamily: "Roboto", +// ), +// headline6: TextStyle( +// fontSize: 13.0, +// color: Colors.white.withOpacity(.85), +// fontFamily: "Proxima Nova", +// ), +// bodyText2: TextStyle( +// fontFamily: 'Proxima Nova', +// fontSize: 14, +// fontWeight: FontWeight.w500, +// color: Colors.white.withOpacity(.75), +// ), +// bodyText1: TextStyle( +// fontFamily: 'Proxima Nova', +// fontSize: 24, +// fontWeight: FontWeight.w500, +// color: Colors.white.withOpacity(1), +// ), +// caption: TextStyle( +// fontFamily: 'Roboto', +// fontSize: 16, +// fontWeight: FontWeight.w400, +// color: config.Colors().accentColor(1), +// ), +// ), +// colorScheme: const ColorScheme.light(primary: Color(0xFF596F95)) +// .copyWith(secondary: const Color(0xFF36435A)), +// ); -ThemeData kDarkTheme4 = ThemeData( - colorScheme: const ColorScheme.dark(primary: Color(0xFF427DA8)), - canvasColor: Colors.transparent, - primaryColor: const Color(0xFF041B29), - brightness: Brightness.dark, - errorColor: const Color(0xFF427DA8), - accentColor: const Color(0xFFB0CCE0), - focusColor: config.Colors().mainDarkColor(1), - hintColor: const Color(0xFF152836), - accentTextTheme: - const TextTheme(headline6: TextStyle(fontFamily: "Proxima Nova")), - textTheme: TextTheme( - button: TextStyle( - fontFamily: 'Proxima Nova', - fontSize: 16, - fontWeight: FontWeight.w800, - color: config.Colors().mainDarkColor(1), - ), - headline5: TextStyle( - fontSize: 16.0, - color: config.Colors().accentDarkColor(1), - fontFamily: "Proxima Nova", - ), - headline4: TextStyle( - fontSize: 16, - fontFamily: "Proxima Nova", - fontWeight: FontWeight.w500, - color: config.Colors().accentDarkColor(1)), - headline3: const TextStyle( - fontSize: 20, - fontFamily: "Proxima Nova", - fontWeight: FontWeight.w500, - color: Colors.white), - headline2: const TextStyle( - fontSize: 24, - fontFamily: "Proxima Nova", - fontWeight: FontWeight.w500, - color: Colors.white), - headline1: TextStyle( - fontFamily: 'Proxima Nova', - color: config.Colors().accentDarkColor(1), - fontSize: 50, - fontWeight: FontWeight.w600, - ), - subtitle1: TextStyle( - fontSize: 20, - fontWeight: FontWeight.w900, - color: config.Colors().secondDarkColor(1), - fontFamily: "Roboto", - ), - headline6: TextStyle( - fontSize: 14.0, - color: config.Colors().accentDarkColor(.85), - fontFamily: "Proxima Nova", - ), - bodyText2: TextStyle( - fontFamily: 'Proxima Nova', - fontSize: 14, - fontWeight: FontWeight.w500, - color: config.Colors().accentDarkColor(.85), - ), - bodyText1: TextStyle( - fontFamily: 'Proxima Nova', - fontSize: 22, - fontWeight: FontWeight.w500, - color: config.Colors().accentDarkColor(1), - ), - caption: TextStyle( - fontFamily: 'Roboto', - fontSize: 16, - fontWeight: FontWeight.w400, - color: config.Colors().accentDarkColor(1), - ), - ), -); +// ThemeData kDarkTheme3 = ThemeData( +// canvasColor: Colors.transparent, +// primaryColor: const Color(0xFF202113), +// brightness: Brightness.dark, +// errorColor: const Color(0xFF767B45), +// focusColor: config.Colors().mainDarkColor(1), +// hintColor: const Color(0xFF35371F), +// textTheme: TextTheme( +// button: TextStyle( +// fontFamily: 'Proxima Nova', +// fontSize: 16, +// fontWeight: FontWeight.w800, +// color: config.Colors().mainDarkColor(1), +// ), +// headline5: TextStyle( +// fontSize: 16.0, +// color: config.Colors().accentDarkColor(1), +// fontFamily: "Proxima Nova", +// ), +// headline4: TextStyle( +// fontSize: 16, +// fontFamily: "Proxima Nova", +// fontWeight: FontWeight.w500, +// color: config.Colors().accentDarkColor(1)), +// headline3: const TextStyle( +// fontSize: 20, +// fontFamily: "Proxima Nova", +// fontWeight: FontWeight.w500, +// color: Colors.white), +// headline2: const TextStyle( +// fontSize: 24, +// fontFamily: "Proxima Nova", +// fontWeight: FontWeight.w500, +// color: Colors.white), +// headline1: TextStyle( +// fontFamily: 'Proxima Nova', +// color: config.Colors().accentDarkColor(1), +// fontSize: 50, +// fontWeight: FontWeight.w600, +// ), +// subtitle1: TextStyle( +// fontSize: 20, +// fontWeight: FontWeight.w900, +// color: config.Colors().secondDarkColor(1), +// fontFamily: "Roboto", +// ), +// headline6: TextStyle( +// fontSize: 14.0, +// color: config.Colors().accentDarkColor(.85), +// fontFamily: "Proxima Nova", +// ), +// bodyText2: TextStyle( +// fontFamily: 'Proxima Nova', +// fontSize: 14, +// fontWeight: FontWeight.w500, +// color: config.Colors().accentDarkColor(.85), +// ), +// bodyText1: TextStyle( +// fontFamily: 'Proxima Nova', +// fontSize: 22, +// fontWeight: FontWeight.w500, +// color: config.Colors().accentDarkColor(1), +// ), +// caption: TextStyle( +// fontFamily: 'Roboto', +// fontSize: 16, +// fontWeight: FontWeight.w400, +// color: config.Colors().accentDarkColor(1), +// ), +// ), +// colorScheme: const ColorScheme.dark(primary: Color(0xFF767B45)) +// .copyWith(secondary: const Color(0xFFE3E4D0)), +// ); -ThemeData kDarkTheme5 = ThemeData( - colorScheme: const ColorScheme.dark(primary: Color(0xFF4C7044)), - canvasColor: Colors.transparent, - primaryColor: const Color(0xFF12210E), - brightness: Brightness.dark, - errorColor: const Color(0xFF4C7044), - accentColor: const Color(0xFFD9E6D6), - focusColor: config.Colors().mainDarkColor(1), - hintColor: const Color(0xFF1D2B1A), - accentTextTheme: - const TextTheme(headline6: TextStyle(fontFamily: "Proxima Nova")), - textTheme: TextTheme( - button: TextStyle( - fontFamily: 'Proxima Nova', - fontSize: 16, - fontWeight: FontWeight.w800, - color: config.Colors().mainDarkColor(1), - ), - headline5: TextStyle( - fontSize: 16.0, - color: config.Colors().accentDarkColor(1), - fontFamily: "Proxima Nova", - ), - headline4: TextStyle( - fontSize: 16, - fontFamily: "Proxima Nova", - fontWeight: FontWeight.w500, - color: config.Colors().accentDarkColor(1)), - headline3: const TextStyle( - fontSize: 20, - fontFamily: "Proxima Nova", - fontWeight: FontWeight.w500, - color: Colors.white), - headline2: const TextStyle( - fontSize: 24, - fontFamily: "Proxima Nova", - fontWeight: FontWeight.w500, - color: Colors.white), - headline1: TextStyle( - fontFamily: 'Proxima Nova', - color: config.Colors().accentDarkColor(1), - fontSize: 50, - fontWeight: FontWeight.w600, - ), - subtitle1: TextStyle( - fontSize: 20, - fontWeight: FontWeight.w900, - color: config.Colors().secondDarkColor(1), - fontFamily: "Roboto", - ), - headline6: TextStyle( - fontSize: 14.0, - color: config.Colors().accentDarkColor(.85), - fontFamily: "Proxima Nova", - ), - bodyText2: TextStyle( - fontFamily: 'Proxima Nova', - fontSize: 14, - fontWeight: FontWeight.w500, - color: config.Colors().accentDarkColor(.85), - ), - bodyText1: TextStyle( - fontFamily: 'Proxima Nova', - fontSize: 22, - fontWeight: FontWeight.w500, - color: config.Colors().accentDarkColor(1), - ), - caption: TextStyle( - fontFamily: 'Roboto', - fontSize: 16, - fontWeight: FontWeight.w400, - color: config.Colors().accentDarkColor(1), - ), - ), -); +// ThemeData kDarkTheme4 = ThemeData( +// canvasColor: Colors.transparent, +// primaryColor: const Color(0xFF041B29), +// brightness: Brightness.dark, +// errorColor: const Color(0xFF427DA8), +// focusColor: config.Colors().mainDarkColor(1), +// hintColor: const Color(0xFF152836), +// textTheme: TextTheme( +// button: TextStyle( +// fontFamily: 'Proxima Nova', +// fontSize: 16, +// fontWeight: FontWeight.w800, +// color: config.Colors().mainDarkColor(1), +// ), +// headline5: TextStyle( +// fontSize: 16.0, +// color: config.Colors().accentDarkColor(1), +// fontFamily: "Proxima Nova", +// ), +// headline4: TextStyle( +// fontSize: 16, +// fontFamily: "Proxima Nova", +// fontWeight: FontWeight.w500, +// color: config.Colors().accentDarkColor(1)), +// headline3: const TextStyle( +// fontSize: 20, +// fontFamily: "Proxima Nova", +// fontWeight: FontWeight.w500, +// color: Colors.white), +// headline2: const TextStyle( +// fontSize: 24, +// fontFamily: "Proxima Nova", +// fontWeight: FontWeight.w500, +// color: Colors.white), +// headline1: TextStyle( +// fontFamily: 'Proxima Nova', +// color: config.Colors().accentDarkColor(1), +// fontSize: 50, +// fontWeight: FontWeight.w600, +// ), +// subtitle1: TextStyle( +// fontSize: 20, +// fontWeight: FontWeight.w900, +// color: config.Colors().secondDarkColor(1), +// fontFamily: "Roboto", +// ), +// headline6: TextStyle( +// fontSize: 14.0, +// color: config.Colors().accentDarkColor(.85), +// fontFamily: "Proxima Nova", +// ), +// bodyText2: TextStyle( +// fontFamily: 'Proxima Nova', +// fontSize: 14, +// fontWeight: FontWeight.w500, +// color: config.Colors().accentDarkColor(.85), +// ), +// bodyText1: TextStyle( +// fontFamily: 'Proxima Nova', +// fontSize: 22, +// fontWeight: FontWeight.w500, +// color: config.Colors().accentDarkColor(1), +// ), +// caption: TextStyle( +// fontFamily: 'Roboto', +// fontSize: 16, +// fontWeight: FontWeight.w400, +// color: config.Colors().accentDarkColor(1), +// ), +// ), +// colorScheme: const ColorScheme.dark(primary: Color(0xFF427DA8)) +// .copyWith(secondary: const Color(0xFFB0CCE0)), +// ); -ThemeData kDarkTheme6 = ThemeData( - colorScheme: const ColorScheme.dark(primary: Color(0xFF703826)), - canvasColor: Colors.transparent, - primaryColor: const Color(0xFF290D02), - brightness: Brightness.dark, - errorColor: const Color(0xFF703826), - accentColor: const Color(0xFFDFB0A0), - focusColor: config.Colors().mainDarkColor(1), - hintColor: const Color(0xFF361B12), - accentTextTheme: - const TextTheme(headline6: TextStyle(fontFamily: "Proxima Nova")), - textTheme: TextTheme( - button: TextStyle( - fontFamily: 'Proxima Nova', - fontSize: 16, - fontWeight: FontWeight.w800, - color: config.Colors().mainDarkColor(1), - ), - headline5: TextStyle( - fontSize: 16.0, - color: config.Colors().accentDarkColor(1), - fontFamily: "Proxima Nova", - ), - headline4: TextStyle( - fontSize: 16, - fontFamily: "Proxima Nova", - fontWeight: FontWeight.w500, - color: config.Colors().accentDarkColor(1)), - headline3: const TextStyle( - fontSize: 20, - fontFamily: "Proxima Nova", - fontWeight: FontWeight.w500, - color: Colors.white), - headline2: const TextStyle( - fontSize: 24, - fontFamily: "Proxima Nova", - fontWeight: FontWeight.w500, - color: Colors.white), - headline1: TextStyle( - fontFamily: 'Proxima Nova', - color: config.Colors().accentDarkColor(1), - fontSize: 50, - fontWeight: FontWeight.w600, - ), - subtitle1: TextStyle( - fontSize: 20, - fontWeight: FontWeight.w900, - color: config.Colors().secondDarkColor(1), - fontFamily: "Roboto", - ), - headline6: TextStyle( - fontSize: 14.0, - color: config.Colors().accentDarkColor(.85), - fontFamily: "Proxima Nova", - ), - bodyText2: TextStyle( - fontFamily: 'Proxima Nova', - fontSize: 14, - fontWeight: FontWeight.w500, - color: config.Colors().accentDarkColor(.85), - ), - bodyText1: TextStyle( - fontFamily: 'Proxima Nova', - fontSize: 22, - fontWeight: FontWeight.w500, - color: config.Colors().accentDarkColor(1), - ), - caption: TextStyle( - fontFamily: 'Roboto', - fontSize: 16, - fontWeight: FontWeight.w400, - color: config.Colors().accentDarkColor(1), - ), - ), -); +// ThemeData kDarkTheme5 = ThemeData( +// canvasColor: Colors.transparent, +// primaryColor: const Color(0xFF12210E), +// brightness: Brightness.dark, +// errorColor: const Color(0xFF4C7044), +// focusColor: config.Colors().mainDarkColor(1), +// hintColor: const Color(0xFF1D2B1A), +// textTheme: TextTheme( +// button: TextStyle( +// fontFamily: 'Proxima Nova', +// fontSize: 16, +// fontWeight: FontWeight.w800, +// color: config.Colors().mainDarkColor(1), +// ), +// headline5: TextStyle( +// fontSize: 16.0, +// color: config.Colors().accentDarkColor(1), +// fontFamily: "Proxima Nova", +// ), +// headline4: TextStyle( +// fontSize: 16, +// fontFamily: "Proxima Nova", +// fontWeight: FontWeight.w500, +// color: config.Colors().accentDarkColor(1)), +// headline3: const TextStyle( +// fontSize: 20, +// fontFamily: "Proxima Nova", +// fontWeight: FontWeight.w500, +// color: Colors.white), +// headline2: const TextStyle( +// fontSize: 24, +// fontFamily: "Proxima Nova", +// fontWeight: FontWeight.w500, +// color: Colors.white), +// headline1: TextStyle( +// fontFamily: 'Proxima Nova', +// color: config.Colors().accentDarkColor(1), +// fontSize: 50, +// fontWeight: FontWeight.w600, +// ), +// subtitle1: TextStyle( +// fontSize: 20, +// fontWeight: FontWeight.w900, +// color: config.Colors().secondDarkColor(1), +// fontFamily: "Roboto", +// ), +// headline6: TextStyle( +// fontSize: 14.0, +// color: config.Colors().accentDarkColor(.85), +// fontFamily: "Proxima Nova", +// ), +// bodyText2: TextStyle( +// fontFamily: 'Proxima Nova', +// fontSize: 14, +// fontWeight: FontWeight.w500, +// color: config.Colors().accentDarkColor(.85), +// ), +// bodyText1: TextStyle( +// fontFamily: 'Proxima Nova', +// fontSize: 22, +// fontWeight: FontWeight.w500, +// color: config.Colors().accentDarkColor(1), +// ), +// caption: TextStyle( +// fontFamily: 'Roboto', +// fontSize: 16, +// fontWeight: FontWeight.w400, +// color: config.Colors().accentDarkColor(1), +// ), +// ), +// colorScheme: const ColorScheme.dark(primary: Color(0xFF4C7044)) +// .copyWith(secondary: const Color(0xFFD9E6D6)), +// ); -ThemeData kDarkTheme7 = ThemeData( - colorScheme: const ColorScheme.dark(primary: Color(0xFF2D6079)), - canvasColor: Colors.transparent, - primaryColor: const Color(0xFF142431), - brightness: Brightness.dark, - errorColor: const Color(0xFF2D6079), - accentColor: const Color(0xFFA9CDDF), - focusColor: config.Colors().mainDarkColor(1), - hintColor: const Color(0xFF193543), - accentTextTheme: - const TextTheme(headline6: TextStyle(fontFamily: "Proxima Nova")), - textTheme: TextTheme( - button: TextStyle( - fontFamily: 'Proxima Nova', - fontSize: 16, - fontWeight: FontWeight.w800, - color: config.Colors().mainDarkColor(1), - ), - headline5: TextStyle( - fontSize: 16.0, - color: config.Colors().accentDarkColor(1), - fontFamily: "Proxima Nova", - ), - headline4: TextStyle( - fontSize: 16, - fontFamily: "Proxima Nova", - fontWeight: FontWeight.w500, - color: config.Colors().accentDarkColor(1)), - headline3: const TextStyle( - fontSize: 20, - fontFamily: "Proxima Nova", - fontWeight: FontWeight.w500, - color: Colors.white), - headline2: const TextStyle( - fontSize: 24, - fontFamily: "Proxima Nova", - fontWeight: FontWeight.w500, - color: Colors.white), - headline1: TextStyle( - fontFamily: 'Proxima Nova', - color: config.Colors().accentDarkColor(1), - fontSize: 50, - fontWeight: FontWeight.w600, - ), - subtitle1: TextStyle( - fontSize: 20, - fontWeight: FontWeight.w900, - color: config.Colors().secondDarkColor(1), - fontFamily: "Roboto", - ), - headline6: TextStyle( - fontSize: 14.0, - color: config.Colors().accentDarkColor(.85), - fontFamily: "Proxima Nova", - ), - bodyText2: TextStyle( - fontFamily: 'Proxima Nova', - fontSize: 14, - fontWeight: FontWeight.w500, - color: config.Colors().accentDarkColor(.85), - ), - bodyText1: TextStyle( - fontFamily: 'Proxima Nova', - fontSize: 22, - fontWeight: FontWeight.w500, - color: config.Colors().accentDarkColor(1), - ), - caption: TextStyle( - fontFamily: 'Roboto', - fontSize: 16, - fontWeight: FontWeight.w400, - color: config.Colors().accentDarkColor(1), - ), - ), -); +// ThemeData kDarkTheme6 = ThemeData( +// canvasColor: Colors.transparent, +// primaryColor: const Color(0xFF290D02), +// brightness: Brightness.dark, +// errorColor: const Color(0xFF703826), +// focusColor: config.Colors().mainDarkColor(1), +// hintColor: const Color(0xFF361B12), +// textTheme: TextTheme( +// button: TextStyle( +// fontFamily: 'Proxima Nova', +// fontSize: 16, +// fontWeight: FontWeight.w800, +// color: config.Colors().mainDarkColor(1), +// ), +// headline5: TextStyle( +// fontSize: 16.0, +// color: config.Colors().accentDarkColor(1), +// fontFamily: "Proxima Nova", +// ), +// headline4: TextStyle( +// fontSize: 16, +// fontFamily: "Proxima Nova", +// fontWeight: FontWeight.w500, +// color: config.Colors().accentDarkColor(1)), +// headline3: const TextStyle( +// fontSize: 20, +// fontFamily: "Proxima Nova", +// fontWeight: FontWeight.w500, +// color: Colors.white), +// headline2: const TextStyle( +// fontSize: 24, +// fontFamily: "Proxima Nova", +// fontWeight: FontWeight.w500, +// color: Colors.white), +// headline1: TextStyle( +// fontFamily: 'Proxima Nova', +// color: config.Colors().accentDarkColor(1), +// fontSize: 50, +// fontWeight: FontWeight.w600, +// ), +// subtitle1: TextStyle( +// fontSize: 20, +// fontWeight: FontWeight.w900, +// color: config.Colors().secondDarkColor(1), +// fontFamily: "Roboto", +// ), +// headline6: TextStyle( +// fontSize: 14.0, +// color: config.Colors().accentDarkColor(.85), +// fontFamily: "Proxima Nova", +// ), +// bodyText2: TextStyle( +// fontFamily: 'Proxima Nova', +// fontSize: 14, +// fontWeight: FontWeight.w500, +// color: config.Colors().accentDarkColor(.85), +// ), +// bodyText1: TextStyle( +// fontFamily: 'Proxima Nova', +// fontSize: 22, +// fontWeight: FontWeight.w500, +// color: config.Colors().accentDarkColor(1), +// ), +// caption: TextStyle( +// fontFamily: 'Roboto', +// fontSize: 16, +// fontWeight: FontWeight.w400, +// color: config.Colors().accentDarkColor(1), +// ), +// ), +// colorScheme: const ColorScheme.dark(primary: Color(0xFF703826)) +// .copyWith(secondary: const Color(0xFFDFB0A0)), +// ); -ThemeData kDarkTheme8 = ThemeData( - colorScheme: const ColorScheme.dark(primary: Color(0xFF686E80)), - canvasColor: Colors.transparent, - primaryColor: const Color(0xFF393D46), - brightness: Brightness.dark, - errorColor: const Color(0xFF686E80), - accentColor: const Color(0xFFEEEFF2), - focusColor: config.Colors().mainDarkColor(1), - hintColor: const Color(0xFF33363F), - accentTextTheme: - const TextTheme(headline6: TextStyle(fontFamily: "Proxima Nova")), - textTheme: TextTheme( - button: TextStyle( - fontFamily: 'Proxima Nova', - fontSize: 16, - fontWeight: FontWeight.w800, - color: config.Colors().mainDarkColor(1), - ), - headline5: TextStyle( - fontSize: 16.0, - color: config.Colors().accentDarkColor(1), - fontFamily: "Proxima Nova", - ), - headline4: TextStyle( - fontSize: 16, - fontFamily: "Proxima Nova", - fontWeight: FontWeight.w500, - color: config.Colors().accentDarkColor(1)), - headline3: const TextStyle( - fontSize: 20, - fontFamily: "Proxima Nova", - fontWeight: FontWeight.w500, - color: Colors.white), - headline2: const TextStyle( - fontSize: 24, - fontFamily: "Proxima Nova", - fontWeight: FontWeight.w500, - color: Colors.white), - headline1: TextStyle( - fontFamily: 'Proxima Nova', - color: config.Colors().accentDarkColor(1), - fontSize: 50, - fontWeight: FontWeight.w600, - ), - subtitle1: TextStyle( - fontSize: 20, - fontWeight: FontWeight.w900, - color: config.Colors().secondDarkColor(1), - fontFamily: "Roboto", - ), - headline6: TextStyle( - fontSize: 14.0, - color: config.Colors().accentDarkColor(.85), - fontFamily: "Proxima Nova", - ), - bodyText2: TextStyle( - fontFamily: 'Proxima Nova', - fontSize: 14, - fontWeight: FontWeight.w500, - color: config.Colors().accentDarkColor(.85), - ), - bodyText1: TextStyle( - fontFamily: 'Proxima Nova', - fontSize: 22, - fontWeight: FontWeight.w500, - color: config.Colors().accentDarkColor(1), - ), - caption: TextStyle( - fontFamily: 'Roboto', - fontSize: 16, - fontWeight: FontWeight.w400, - color: config.Colors().accentDarkColor(1), - ), - ), -); +// ThemeData kDarkTheme7 = ThemeData( +// canvasColor: Colors.transparent, +// primaryColor: const Color(0xFF142431), +// brightness: Brightness.dark, +// errorColor: const Color(0xFF2D6079), +// focusColor: config.Colors().mainDarkColor(1), +// hintColor: const Color(0xFF193543), +// textTheme: TextTheme( +// button: TextStyle( +// fontFamily: 'Proxima Nova', +// fontSize: 16, +// fontWeight: FontWeight.w800, +// color: config.Colors().mainDarkColor(1), +// ), +// headline5: TextStyle( +// fontSize: 16.0, +// color: config.Colors().accentDarkColor(1), +// fontFamily: "Proxima Nova", +// ), +// headline4: TextStyle( +// fontSize: 16, +// fontFamily: "Proxima Nova", +// fontWeight: FontWeight.w500, +// color: config.Colors().accentDarkColor(1)), +// headline3: const TextStyle( +// fontSize: 20, +// fontFamily: "Proxima Nova", +// fontWeight: FontWeight.w500, +// color: Colors.white), +// headline2: const TextStyle( +// fontSize: 24, +// fontFamily: "Proxima Nova", +// fontWeight: FontWeight.w500, +// color: Colors.white), +// headline1: TextStyle( +// fontFamily: 'Proxima Nova', +// color: config.Colors().accentDarkColor(1), +// fontSize: 50, +// fontWeight: FontWeight.w600, +// ), +// subtitle1: TextStyle( +// fontSize: 20, +// fontWeight: FontWeight.w900, +// color: config.Colors().secondDarkColor(1), +// fontFamily: "Roboto", +// ), +// headline6: TextStyle( +// fontSize: 14.0, +// color: config.Colors().accentDarkColor(.85), +// fontFamily: "Proxima Nova", +// ), +// bodyText2: TextStyle( +// fontFamily: 'Proxima Nova', +// fontSize: 14, +// fontWeight: FontWeight.w500, +// color: config.Colors().accentDarkColor(.85), +// ), +// bodyText1: TextStyle( +// fontFamily: 'Proxima Nova', +// fontSize: 22, +// fontWeight: FontWeight.w500, +// color: config.Colors().accentDarkColor(1), +// ), +// caption: TextStyle( +// fontFamily: 'Roboto', +// fontSize: 16, +// fontWeight: FontWeight.w400, +// color: config.Colors().accentDarkColor(1), +// ), +// ), +// colorScheme: const ColorScheme.dark(primary: Color(0xFF2D6079)) +// .copyWith(secondary: const Color(0xFFA9CDDF)), +// ); + +// ThemeData kDarkTheme8 = ThemeData( +// canvasColor: Colors.transparent, +// primaryColor: const Color(0xFF393D46), +// brightness: Brightness.dark, +// errorColor: const Color(0xFF686E80), +// focusColor: config.Colors().mainDarkColor(1), +// hintColor: const Color(0xFF33363F), +// textTheme: TextTheme( +// button: TextStyle( +// fontFamily: 'Proxima Nova', +// fontSize: 16, +// fontWeight: FontWeight.w800, +// color: config.Colors().mainDarkColor(1), +// ), +// headline5: TextStyle( +// fontSize: 16.0, +// color: config.Colors().accentDarkColor(1), +// fontFamily: "Proxima Nova", +// ), +// headline4: TextStyle( +// fontSize: 16, +// fontFamily: "Proxima Nova", +// fontWeight: FontWeight.w500, +// color: config.Colors().accentDarkColor(1)), +// headline3: const TextStyle( +// fontSize: 20, +// fontFamily: "Proxima Nova", +// fontWeight: FontWeight.w500, +// color: Colors.white), +// headline2: const TextStyle( +// fontSize: 24, +// fontFamily: "Proxima Nova", +// fontWeight: FontWeight.w500, +// color: Colors.white), +// headline1: TextStyle( +// fontFamily: 'Proxima Nova', +// color: config.Colors().accentDarkColor(1), +// fontSize: 50, +// fontWeight: FontWeight.w600, +// ), +// subtitle1: TextStyle( +// fontSize: 20, +// fontWeight: FontWeight.w900, +// color: config.Colors().secondDarkColor(1), +// fontFamily: "Roboto", +// ), +// headline6: TextStyle( +// fontSize: 14.0, +// color: config.Colors().accentDarkColor(.85), +// fontFamily: "Proxima Nova", +// ), +// bodyText2: TextStyle( +// fontFamily: 'Proxima Nova', +// fontSize: 14, +// fontWeight: FontWeight.w500, +// color: config.Colors().accentDarkColor(.85), +// ), +// bodyText1: TextStyle( +// fontFamily: 'Proxima Nova', +// fontSize: 22, +// fontWeight: FontWeight.w500, +// color: config.Colors().accentDarkColor(1), +// ), +// caption: TextStyle( +// fontFamily: 'Roboto', +// fontSize: 16, +// fontWeight: FontWeight.w400, +// color: config.Colors().accentDarkColor(1), +// ), +// ), +// colorScheme: const ColorScheme.dark(primary: Color(0xFF686E80)) +// .copyWith(secondary: const Color(0xFFEEEFF2)), +// ); diff --git a/lib/theme/themeModeProvider.dart b/lib/theme/themeModeProvider.dart index b6fee0ff..38851e0c 100644 --- a/lib/theme/themeModeProvider.dart +++ b/lib/theme/themeModeProvider.dart @@ -1,5 +1,5 @@ -import 'package:flutter/material.dart'; import 'package:Prism/main.dart' as main; +import 'package:flutter/material.dart'; Map modes = { "Light": ThemeMode.light, diff --git a/lib/theme/themeModel.dart b/lib/theme/themeModel.dart index e064120a..0a26fff1 100644 --- a/lib/theme/themeModel.dart +++ b/lib/theme/themeModel.dart @@ -1,13 +1,13 @@ -import 'package:flutter/material.dart'; -import 'package:Prism/theme/theme.dart'; -import 'package:Prism/main.dart' as main; import 'package:Prism/logger/logger.dart'; +import 'package:Prism/main.dart' as main; +import 'package:Prism/theme/theme.dart'; +import 'package:flutter/material.dart'; Map themes = { "kLFrost White": kLightTheme, - "kLCoffee": kLightTheme2, - "kLRose": kLightTheme3, - "kLCotton Blue": kLightTheme4, + // "kLCoffee": kLightTheme2, + // "kLRose": kLightTheme3, + // "kLCotton Blue": kLightTheme4, }; class ThemeModel extends ChangeNotifier { diff --git a/lib/ui/pages/adsNotLoading.dart b/lib/ui/pages/adsNotLoading.dart index dbd37b66..d49e5785 100644 --- a/lib/ui/pages/adsNotLoading.dart +++ b/lib/ui/pages/adsNotLoading.dart @@ -1,11 +1,11 @@ +import 'package:Prism/global/globals.dart' as globals; import 'package:Prism/logger/logger.dart'; +import 'package:Prism/main.dart' as main; import 'package:Prism/routes/router.dart'; import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; import 'package:Prism/ui/widgets/popup/signInPopUp.dart'; import 'package:flutter/material.dart'; -import 'package:Prism/global/globals.dart' as globals; -import 'package:Prism/main.dart' as main; class AdsNotLoading extends StatelessWidget { const AdsNotLoading({Key? key}) : super(key: key); @@ -30,7 +30,7 @@ class AdsNotLoading extends StatelessWidget { Navigator.pop(context); }), title: Text( - "Ads Error", + "", style: Theme.of(context).textTheme.headline3, ), ), @@ -44,17 +44,26 @@ class AdsNotLoading extends StatelessWidget { const Padding( padding: EdgeInsets.all(8.0), child: - Center(child: Text("🥲", style: TextStyle(fontSize: 80))), + Center(child: Text("😉", style: TextStyle(fontSize: 80))), ), const SizedBox( height: 10, ), Text( - "Unable to load reward ad", + "Wallpaper downloaded", textAlign: TextAlign.center, style: Theme.of(context).textTheme.bodyText2!.copyWith( color: Theme.of(context).accentColor, fontSize: 24), ), + const SizedBox( + height: 6, + ), + Text( + "Unable to load rewarded ad", + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.bodyText2!.copyWith( + color: Theme.of(context).accentColor, fontSize: 16), + ), const SizedBox( height: 10, ), @@ -113,7 +122,7 @@ class AdsNotLoading extends StatelessWidget { Padding( padding: const EdgeInsets.all(8.0), child: Text( - "Please check your network settings and try again. We have although downloaded the wall for you, because we get it, that it's frustating when the ads don't laod.", + "Please check your network settings and try again. We have although downloaded the wall for you, because we get it, that it's frustating when the ads don't load.", textAlign: TextAlign.left, style: Theme.of(context) .textTheme diff --git a/lib/ui/pages/categories/colorScreen.dart b/lib/ui/pages/categories/colorScreen.dart index 74eae5ac..0cf0381b 100644 --- a/lib/ui/pages/categories/colorScreen.dart +++ b/lib/ui/pages/categories/colorScreen.dart @@ -1,11 +1,11 @@ import 'package:Prism/data/pexels/provider/pexelsWithoutProvider.dart' as pdata; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/router.dart'; import 'package:Prism/ui/widgets/home/core/bottomNavBar.dart'; -import 'package:Prism/ui/widgets/home/wallpapers/colorLoader.dart'; import 'package:Prism/ui/widgets/home/core/headingChipBar.dart'; +import 'package:Prism/ui/widgets/home/wallpapers/colorLoader.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; -import 'package:Prism/logger/logger.dart'; class ColorScreen extends StatelessWidget { final List? arguments; diff --git a/lib/ui/pages/download/downloadScreen.dart b/lib/ui/pages/download/downloadScreen.dart index d857a39e..44bbd352 100644 --- a/lib/ui/pages/download/downloadScreen.dart +++ b/lib/ui/pages/download/downloadScreen.dart @@ -1,6 +1,8 @@ import 'dart:collection'; import 'dart:io'; + import 'package:Prism/global/svgAssets.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/router.dart'; import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/themeModeProvider.dart'; @@ -9,7 +11,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:provider/provider.dart'; -import 'package:Prism/logger/logger.dart'; class DownloadScreen extends StatefulWidget { @override diff --git a/lib/ui/pages/download/downloadWallpaperViewScreen.dart b/lib/ui/pages/download/downloadWallpaperViewScreen.dart index 3e140deb..ae317806 100644 --- a/lib/ui/pages/download/downloadWallpaperViewScreen.dart +++ b/lib/ui/pages/download/downloadWallpaperViewScreen.dart @@ -1,12 +1,13 @@ import 'dart:io'; + +import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/router.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; import 'package:Prism/ui/widgets/home/wallpapers/clockOverlay.dart'; import 'package:Prism/ui/widgets/menuButton/setWallpaperButton.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:Prism/global/globals.dart' as globals; -import 'package:Prism/logger/logger.dart'; class DownloadWallpaperScreen extends StatefulWidget { final List? arguments; diff --git a/lib/ui/pages/favourite/favouriteSetupScreen.dart b/lib/ui/pages/favourite/favouriteSetupScreen.dart index a0bdb4d2..c611193c 100644 --- a/lib/ui/pages/favourite/favouriteSetupScreen.dart +++ b/lib/ui/pages/favourite/favouriteSetupScreen.dart @@ -1,4 +1,5 @@ import 'package:Prism/data/favourites/provider/favouriteSetupProvider.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/router.dart'; import 'package:Prism/ui/widgets/favourite/favSetupLoader.dart'; import 'package:Prism/ui/widgets/home/core/bottomNavBar.dart'; @@ -6,7 +7,6 @@ import 'package:Prism/ui/widgets/home/core/headingChipBar.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:provider/provider.dart'; -import 'package:Prism/logger/logger.dart'; class FavouriteSetupScreen extends StatelessWidget { const FavouriteSetupScreen({ diff --git a/lib/ui/pages/favourite/favouriteSetupViewScreen.dart b/lib/ui/pages/favourite/favouriteSetupViewScreen.dart index 9143ac2e..89d9f391 100644 --- a/lib/ui/pages/favourite/favouriteSetupViewScreen.dart +++ b/lib/ui/pages/favourite/favouriteSetupViewScreen.dart @@ -1,31 +1,31 @@ import 'dart:ui'; +import 'package:Prism/analytics/analytics_service.dart'; import 'package:Prism/data/favourites/provider/favouriteSetupProvider.dart'; import 'package:Prism/data/informatics/dataManager.dart'; import 'package:Prism/data/share/createDynamicLink.dart'; +import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/global/svgAssets.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/router.dart'; import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; import 'package:Prism/ui/widgets/animated/favouriteIcon.dart'; +import 'package:Prism/ui/widgets/animated/showUp.dart'; import 'package:Prism/ui/widgets/home/core/collapsedPanel.dart'; import 'package:Prism/ui/widgets/home/wallpapers/clockSetupOverlay.dart'; import 'package:Prism/ui/widgets/menuButton/downloadButton.dart'; import 'package:Prism/ui/widgets/menuButton/setWallpaperButton.dart'; +import 'package:Prism/ui/widgets/popup/signInPopUp.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:device_apps/device_apps.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:hive/hive.dart'; import 'package:provider/provider.dart'; import 'package:sliding_up_panel/sliding_up_panel.dart'; import 'package:url_launcher/url_launcher.dart'; -import 'package:Prism/global/globals.dart' as globals; -import 'package:flutter_svg/flutter_svg.dart'; -import 'package:Prism/global/svgAssets.dart'; -import 'package:Prism/analytics/analytics_service.dart'; -import 'package:Prism/ui/widgets/animated/showUp.dart'; -import 'package:Prism/ui/widgets/popup/signInPopUp.dart'; -import 'package:hive/hive.dart'; -import 'package:Prism/logger/logger.dart'; class FavSetupViewScreen extends StatefulWidget { final List? arguments; @@ -1708,7 +1708,6 @@ class ModifiedDownloadButton extends StatelessWidget { Provider.of(context, listen: false) .liked![index!]["wallpaper_url"] .toString(), - colorChanged: false, ) : GestureDetector( onTap: () async { diff --git a/lib/ui/pages/favourite/favouriteWallScreen.dart b/lib/ui/pages/favourite/favouriteWallScreen.dart index 5dae15c6..a3b92bff 100644 --- a/lib/ui/pages/favourite/favouriteWallScreen.dart +++ b/lib/ui/pages/favourite/favouriteWallScreen.dart @@ -1,4 +1,5 @@ import 'package:Prism/data/favourites/provider/favouriteProvider.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/router.dart'; import 'package:Prism/ui/widgets/favourite/favLoader.dart'; import 'package:Prism/ui/widgets/home/core/bottomNavBar.dart'; @@ -6,7 +7,6 @@ import 'package:Prism/ui/widgets/home/core/headingChipBar.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:provider/provider.dart'; -import 'package:Prism/logger/logger.dart'; class FavouriteWallpaperScreen extends StatelessWidget { const FavouriteWallpaperScreen({ diff --git a/lib/ui/pages/favourite/favouriteWallViewScreen.dart b/lib/ui/pages/favourite/favouriteWallViewScreen.dart index b4634458..5e45c274 100644 --- a/lib/ui/pages/favourite/favouriteWallViewScreen.dart +++ b/lib/ui/pages/favourite/favouriteWallViewScreen.dart @@ -1,13 +1,19 @@ import 'dart:io'; +import 'dart:isolate'; +import 'dart:math'; import 'dart:typed_data'; -import 'dart:ui'; +import 'dart:ui' as ui; + import 'package:Prism/data/favourites/provider/favouriteProvider.dart'; import 'package:Prism/data/informatics/dataManager.dart'; +import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; +import 'package:Prism/main.dart' as main; import 'package:Prism/routes/router.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; import 'package:Prism/ui/widgets/home/core/collapsedPanel.dart'; -import 'package:Prism/ui/widgets/home/wallpapers/clockOverlay.dart'; import 'package:Prism/ui/widgets/home/core/colorBar.dart'; +import 'package:Prism/ui/widgets/home/wallpapers/clockOverlay.dart'; import 'package:Prism/ui/widgets/menuButton/downloadButton.dart'; import 'package:Prism/ui/widgets/menuButton/editButton.dart'; import 'package:Prism/ui/widgets/menuButton/favWallpaperButton.dart'; @@ -15,14 +21,14 @@ import 'package:Prism/ui/widgets/menuButton/setWallpaperButton.dart'; import 'package:Prism/ui/widgets/menuButton/shareButton.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; +import 'package:flutter_downloader/flutter_downloader.dart'; import 'package:palette_generator/palette_generator.dart'; +import 'package:path_provider/path_provider.dart'; +import 'package:Prism/theme/toasts.dart' as toasts; import 'package:provider/provider.dart'; -import 'package:screenshot/screenshot.dart'; import 'package:sliding_up_panel/sliding_up_panel.dart'; -import 'package:Prism/main.dart' as main; -import 'package:Prism/global/globals.dart' as globals; -import 'package:Prism/logger/logger.dart'; class FavWallpaperViewScreen extends StatefulWidget { final List? arguments; @@ -41,8 +47,15 @@ class _FavWallpaperViewScreenState extends State } final GlobalKey _scaffoldKey = GlobalKey(); + final GlobalKey genKey = GlobalKey(); late int index; late String thumb; + String? path; + int progress = 0; + bool downloading = false; + bool applying = false; + bool downloaded = false; + final ReceivePort _port = ReceivePort(); bool isLoading = true; late PaletteGenerator paletteGenerator; List? colors; @@ -51,7 +64,6 @@ class _FavWallpaperViewScreenState extends State String? downloadLinkBackwards; late File _imageFile; bool screenshotTaken = false; - ScreenshotController screenshotController = ScreenshotController(); PanelController panelController = PanelController(); late AnimationController shakeController; bool panelClosed = true; @@ -106,10 +118,65 @@ class _FavWallpaperViewScreenState extends State } } + Future _capturePng() async { + final RenderRepaintBoundary boundary = + genKey.currentContext?.findRenderObject() as RenderRepaintBoundary; + final ui.Image image = await boundary.toImage(pixelRatio: 3); + final directory = (await getTemporaryDirectory()).path; + final ByteData? byteData = + await image.toByteData(format: ui.ImageByteFormat.png); + final Uint8List pngBytes = byteData!.buffer.asUint8List(); + final r = Random(); + String rNum = ""; + for (var i = 0; i < 6; i++) { + rNum = "$rNum${r.nextInt(9)}"; + } + final File imgFile = File('$directory/photo_$rNum.png'); + await imgFile.writeAsBytes(pngBytes); + logger.d(imgFile.path); + return imgFile; + } + + void setupDownloader() { + initPlatformState(); + ui.IsolateNameServer.registerPortWithName( + _port.sendPort, 'downloader_send_port'); + _port.listen((dynamic data) { + // String id = data[0]; + final DownloadTaskStatus status = data[1] as DownloadTaskStatus; + if (status == const DownloadTaskStatus(3)) { + setState(() { + downloaded = true; + }); + toasts.codeSend("Wall Downloaded in Downloads!"); + } + setState(() { + if (status == const DownloadTaskStatus(2)) { + downloading = true; + progress = data[2] as int; + } else { + downloading = false; + progress = 0; + } + }); + }); + FlutterDownloader.registerCallback(callback); + } + + void _setPath() async { + path = (await _findLocalPath())!; + final savedDir = Directory(path??""); + final bool hasExisted = await savedDir.exists(); + if (!hasExisted) { + savedDir.create(); + } + } + @override void initState() { shakeController = AnimationController( duration: const Duration(milliseconds: 300), vsync: this); + setupDownloader(); index = widget.arguments![0] as int; thumb = widget.arguments![1] as String; isLoading = true; @@ -130,9 +197,37 @@ class _FavWallpaperViewScreenState extends State super.initState(); } + Future initPlatformState() async { + _setPath(); + if (!mounted) return; + } + + Future _findLocalPath() async { + String? externalStorageDirPath; + if (Platform.isAndroid) { + try { + externalStorageDirPath = "/storage/emulated/0/Download"; + } catch (e) { + final directory = await getExternalStorageDirectory(); + externalStorageDirPath = directory?.path; + } + } else if (Platform.isIOS) { + externalStorageDirPath = + (await getApplicationDocumentsDirectory()).absolute.path; + } + return externalStorageDirPath; + } + + static void callback(String id, DownloadTaskStatus status, int progress) { + final SendPort? send = + ui.IsolateNameServer.lookupPortByName('downloader_send_port'); + send?.send([id, status, progress]); + } + @override void dispose() { shakeController.dispose(); + ui.IsolateNameServer.removePortNameMapping('downloader_send_port'); super.dispose(); } @@ -141,11 +236,11 @@ class _FavWallpaperViewScreenState extends State final Animation offsetAnimation = Tween(begin: 0.0, end: 48.0) .chain(CurveTween(curve: Curves.easeOutCubic)) .animate(shakeController) - ..addStatusListener((status) { - if (status == AnimationStatus.completed) { - shakeController.reverse(); - } - }); + ..addStatusListener((status) { + if (status == AnimationStatus.completed) { + shakeController.reverse(); + } + }); return WillPopScope( onWillPop: onWillPop, child: Provider.of(context, listen: false) @@ -168,41 +263,6 @@ class _FavWallpaperViewScreenState extends State }); if (panelClosed) { logger.d('Screenshot Starting'); - if (colorChanged) { - screenshotController - .capture( - pixelRatio: 3, - delay: const Duration(milliseconds: 10), - ) - .then((Uint8List? image) async { - setState(() { - _imageFile = File.fromRawPath(image!); - screenshotTaken = true; - panelClosed = false; - }); - logger.d('Screenshot Taken'); - }).catchError((onError) { - logger.d(onError.toString()); - }); - } else { - (main.prefs.get('optimisedWallpapers') ?? true) == true - ? screenshotController - .capture( - pixelRatio: 3, - delay: const Duration(milliseconds: 10), - ) - .then((Uint8List? image) async { - setState(() { - _imageFile = File.fromRawPath(image!); - screenshotTaken = true; - panelClosed = false; - }); - logger.d('Screenshot Taken'); - }).catchError((onError) { - logger.d(onError.toString()); - }) - : logger.d("Wallpaper Optimisation is disabled!"); - } } }, onPanelClosed: () { @@ -237,7 +297,7 @@ class _FavWallpaperViewScreenState extends State child: ClipRRect( borderRadius: BorderRadius.circular(30), child: BackdropFilter( - filter: ImageFilter.blur(sigmaX: 12.0, sigmaY: 12.0), + filter: ui.ImageFilter.blur(sigmaX: 12.0, sigmaY: 12.0), child: AnimatedContainer( duration: const Duration(milliseconds: 750), decoration: BoxDecoration( @@ -933,25 +993,33 @@ class _FavWallpaperViewScreenState extends State mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ - DownloadButton( + DownloadButtonNew( colorChanged: colorChanged, - link: screenshotTaken - ? _imageFile.path - : Provider.of( - context, - listen: false) - .liked![index]["url"] - .toString(), + screenshotCallback: () async { + final File file = await _capturePng(); + return file; + }, + loading: downloading, + path: path??"", + progress: (progress / 100.0) + .clamp(0, 100) + .toInt(), + link: Provider.of( + context, + listen: false) + .liked![index]["url"] + .toString(), ), SetWallpaperButton( colorChanged: colorChanged, - url: screenshotTaken - ? _imageFile.path - : Provider.of( - context, - listen: false) - .liked![index]["url"] - .toString(), + screenshotCallback: () async { + final File file = await _capturePng(); + return file; + }, + url: Provider.of(context, + listen: false) + .liked![index]["url"] + .toString(), ), FavouriteWallpaperButton( id: Provider.of(context, @@ -1034,8 +1102,8 @@ class _FavWallpaperViewScreenState extends State .liked![index]["url"] .toString(), imageBuilder: (context, imageProvider) => - Screenshot( - controller: screenshotController, + RepaintBoundary( + key: genKey, child: Container( margin: EdgeInsets.symmetric( vertical: offsetAnimation.value * 1.25, @@ -1159,41 +1227,6 @@ class _FavWallpaperViewScreenState extends State }); if (panelClosed) { logger.d('Screenshot Starting'); - if (colorChanged) { - screenshotController - .capture( - pixelRatio: 3, - delay: const Duration(milliseconds: 10), - ) - .then((Uint8List? image) async { - setState(() { - _imageFile = File.fromRawPath(image!); - screenshotTaken = true; - panelClosed = false; - }); - logger.d('Screenshot Taken'); - }).catchError((onError) { - logger.d(onError.toString()); - }); - } else { - (main.prefs.get('optimisedWallpapers') ?? true) == true - ? screenshotController - .capture( - pixelRatio: 3, - delay: const Duration(milliseconds: 10), - ) - .then((Uint8List? image) async { - setState(() { - _imageFile = File.fromRawPath(image!); - screenshotTaken = true; - panelClosed = false; - }); - logger.d('Screenshot Taken'); - }).catchError((onError) { - logger.d(onError.toString()); - }) - : logger.d("Wallpaper Optimisation is disabled!"); - } } }, onPanelClosed: () { @@ -1228,7 +1261,7 @@ class _FavWallpaperViewScreenState extends State child: ClipRRect( borderRadius: BorderRadius.circular(30), child: BackdropFilter( - filter: ImageFilter.blur(sigmaX: 12.0, sigmaY: 12.0), + filter: ui.ImageFilter.blur(sigmaX: 12.0, sigmaY: 12.0), child: AnimatedContainer( duration: const Duration(milliseconds: 750), decoration: BoxDecoration( @@ -1405,21 +1438,24 @@ class _FavWallpaperViewScreenState extends State ? [ SetWallpaperButton( colorChanged: colorChanged, - url: screenshotTaken - ? _imageFile.path - : Provider.of( - context, - listen: false) - .liked![index] - ["provider"] == - null - ? "https://w.wallhaven.cc/full/${Provider.of(context, listen: false).liked![index]["id"].toString().substring(0, 2)}/wallhaven-${Provider.of(context, listen: false).liked![index]["id"]}.png" - : Provider.of< - FavouriteProvider>( - context, - listen: false) - .liked![index]["url"] - .toString(), + screenshotCallback: () async { + final File file = + await _capturePng(); + return file; + }, + url: Provider.of( + context, + listen: false) + .liked![index] + ["provider"] == + null + ? "https://w.wallhaven.cc/full/${Provider.of(context, listen: false).liked![index]["id"].toString().substring(0, 2)}/wallhaven-${Provider.of(context, listen: false).liked![index]["id"]}.png" + : Provider.of< + FavouriteProvider>( + context, + listen: false) + .liked![index]["url"] + .toString(), ), FavouriteWallpaperButton( id: Provider.of< @@ -1469,29 +1505,40 @@ class _FavWallpaperViewScreenState extends State ), ] : [ - DownloadButton( + DownloadButtonNew( colorChanged: colorChanged, - link: screenshotTaken - ? _imageFile.path - : downloadLinkBackwards, + screenshotCallback: () async { + final File file = + await _capturePng(); + return file; + }, + loading: downloading, + path: path??"", + progress: (progress / 100.0) + .clamp(0, 100) + .toInt(), + link: downloadLinkBackwards!, ), SetWallpaperButton( colorChanged: colorChanged, - url: screenshotTaken - ? _imageFile.path - : Provider.of( - context, - listen: false) - .liked![index] - ["provider"] == - null - ? "https://w.wallhaven.cc/full/${Provider.of(context, listen: false).liked![index]["id"].toString().substring(0, 2)}/wallhaven-${Provider.of(context, listen: false).liked![index]["id"]}.png" - : Provider.of< - FavouriteProvider>( - context, - listen: false) - .liked![index]["url"] - .toString(), + screenshotCallback: () async { + final File file = + await _capturePng(); + return file; + }, + url: Provider.of( + context, + listen: false) + .liked![index] + ["provider"] == + null + ? "https://w.wallhaven.cc/full/${Provider.of(context, listen: false).liked![index]["id"].toString().substring(0, 2)}/wallhaven-${Provider.of(context, listen: false).liked![index]["id"]}.png" + : Provider.of< + FavouriteProvider>( + context, + listen: false) + .liked![index]["url"] + .toString(), ), FavouriteWallpaperButton( id: Provider.of< @@ -1533,34 +1580,44 @@ class _FavWallpaperViewScreenState extends State .toString()) ] : [ - DownloadButton( + DownloadButtonNew( + colorChanged: colorChanged, + screenshotCallback: () async { + final File file = + await _capturePng(); + return file; + }, + loading: downloading, + path: path??"", + progress: (progress / 100.0) + .clamp(0, 100) + .toInt(), + link: Provider.of( + context, + listen: false) + .liked![index]["url"] + .toString(), + ), + SetWallpaperButton( colorChanged: colorChanged, - link: screenshotTaken - ? _imageFile.path + screenshotCallback: () async { + final File file = + await _capturePng(); + return file; + }, + url: Provider.of( + context, + listen: false) + .liked![index] + ["provider"] == + null + ? "https://w.wallhaven.cc/full/${Provider.of(context, listen: false).liked![index]["id"].toString().substring(0, 2)}/wallhaven-${Provider.of(context, listen: false).liked![index]["id"]}.png" : Provider.of( context, listen: false) .liked![index]["url"] .toString(), ), - SetWallpaperButton( - colorChanged: colorChanged, - url: screenshotTaken - ? _imageFile.path - : Provider.of( - context, - listen: false) - .liked![index] - ["provider"] == - null - ? "https://w.wallhaven.cc/full/${Provider.of(context, listen: false).liked![index]["id"].toString().substring(0, 2)}/wallhaven-${Provider.of(context, listen: false).liked![index]["id"]}.png" - : Provider.of< - FavouriteProvider>( - context, - listen: false) - .liked![index]["url"] - .toString(), - ), FavouriteWallpaperButton( id: Provider.of( context, @@ -1640,8 +1697,8 @@ class _FavWallpaperViewScreenState extends State imageBuilder: (context, imageProvider) { downloadLinkBackwards = "https://w.wallhaven.cc/full/${Provider.of(context, listen: false).liked![index]["id"].toString().substring(0, 2)}/wallhaven-${Provider.of(context, listen: false).liked![index]["id"]}.jpg"; - return Screenshot( - controller: screenshotController, + return RepaintBoundary( + key: genKey, child: Container( margin: EdgeInsets.symmetric( vertical: offsetAnimation.value * 1.25, @@ -1681,8 +1738,8 @@ class _FavWallpaperViewScreenState extends State imageBuilder: (context, imageProvider) { downloadLinkBackwards = "https://w.wallhaven.cc/full/${Provider.of(context, listen: false).liked![index]["id"].toString().substring(0, 2)}/wallhaven-${Provider.of(context, listen: false).liked![index]["id"]}.png"; - return Screenshot( - controller: screenshotController, + return RepaintBoundary( + key: genKey, child: Container( margin: EdgeInsets.symmetric( vertical: diff --git a/lib/ui/pages/home/collections/collectionScreen.dart b/lib/ui/pages/home/collections/collectionScreen.dart index 0a690937..acc97a14 100644 --- a/lib/ui/pages/home/collections/collectionScreen.dart +++ b/lib/ui/pages/home/collections/collectionScreen.dart @@ -1,10 +1,10 @@ +import 'package:Prism/analytics/analytics_service.dart'; import 'package:Prism/data/collections/provider/collectionsWithoutProvider.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/router.dart'; import 'package:Prism/ui/widgets/animated/loader.dart'; import 'package:Prism/ui/widgets/home/collections/collectionsGrid.dart'; import 'package:flutter/material.dart'; -import 'package:Prism/analytics/analytics_service.dart'; -import 'package:Prism/logger/logger.dart'; class CollectionScreen extends StatefulWidget { const CollectionScreen({ diff --git a/lib/ui/pages/home/collections/collectionViewScreen.dart b/lib/ui/pages/home/collections/collectionViewScreen.dart index 4792cc2d..2e91734f 100644 --- a/lib/ui/pages/home/collections/collectionViewScreen.dart +++ b/lib/ui/pages/home/collections/collectionViewScreen.dart @@ -1,11 +1,11 @@ import 'package:Prism/data/collections/provider/collectionsWithoutProvider.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/router.dart'; -import 'package:Prism/ui/widgets/home/core/bottomNavBar.dart'; import 'package:Prism/ui/widgets/home/collections/collectionsViewGrid.dart'; +import 'package:Prism/ui/widgets/home/core/bottomNavBar.dart'; import 'package:Prism/ui/widgets/home/core/headingChipBar.dart'; import 'package:Prism/ui/widgets/home/wallpapers/loading.dart'; import 'package:flutter/material.dart'; -import 'package:Prism/logger/logger.dart'; class CollectionViewScreen extends StatelessWidget { final List? arguments; diff --git a/lib/ui/pages/home/core/notificationScreen.dart b/lib/ui/pages/home/core/notificationScreen.dart index 423f7b21..89fb0745 100644 --- a/lib/ui/pages/home/core/notificationScreen.dart +++ b/lib/ui/pages/home/core/notificationScreen.dart @@ -1,20 +1,20 @@ import 'dart:ui'; import 'package:Prism/data/notifications/model/inAppNotifModel.dart'; -import 'package:animations/animations.dart'; -import 'package:flutter/material.dart'; +import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; +import 'package:Prism/main.dart' as main; import 'package:Prism/routes/router.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; +import 'package:Prism/theme/toasts.dart' as toasts; +import 'package:Prism/ui/pages/home/wallpapers/homeScreen.dart' as home; +import 'package:animations/animations.dart'; import 'package:cached_network_image/cached_network_image.dart'; +import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:hive/hive.dart'; -import 'package:url_launcher/url_launcher.dart'; -import 'package:Prism/ui/pages/home/wallpapers/homeScreen.dart' as home; -import 'package:Prism/theme/toasts.dart' as toasts; -import 'package:Prism/main.dart' as main; import 'package:intl/intl.dart'; -import 'package:Prism/global/globals.dart' as globals; -import 'package:Prism/logger/logger.dart'; +import 'package:url_launcher/url_launcher.dart'; class NotificationScreen extends StatefulWidget { @override @@ -43,10 +43,19 @@ class _NotificationScreenState extends State { child: Scaffold( backgroundColor: Theme.of(context).primaryColor, appBar: AppBar( + backgroundColor: Theme.of(context).backgroundColor, automaticallyImplyLeading: false, - title: const Text("Notifications"), + title: Text( + "Notifications", + style: Theme.of(context).textTheme.headline6?.copyWith( + color: Theme.of(context).accentColor, + ), + ), leading: IconButton( - icon: const Icon(JamIcons.close), + icon: Icon( + JamIcons.close, + color: Theme.of(context).accentColor, + ), onPressed: () { if (navStack.length > 1) navStack.removeLast(); logger.d(navStack.toString()); @@ -56,7 +65,10 @@ class _NotificationScreenState extends State { actions: [ IconButton( tooltip: "Notification Settings", - icon: const Icon(JamIcons.settings_alt), + icon: Icon( + JamIcons.settings_alt, + color: Theme.of(context).accentColor, + ), onPressed: () { showModalBottomSheet( isScrollControlled: true, @@ -122,7 +134,7 @@ class _NotificationScreenState extends State { child: Text('No new notifications', style: TextStyle(color: Theme.of(context).accentColor))), ), - floatingActionButton: notifications!.isNotEmpty + floatingActionButton: notifications.isNotEmpty ? FloatingActionButton( mini: true, tooltip: "Clear Notifications", diff --git a/lib/ui/pages/home/core/oldVersionScreen.dart b/lib/ui/pages/home/core/oldVersionScreen.dart index e31665fc..c4ee1f82 100644 --- a/lib/ui/pages/home/core/oldVersionScreen.dart +++ b/lib/ui/pages/home/core/oldVersionScreen.dart @@ -1,5 +1,5 @@ -import 'package:flutter/material.dart'; import 'package:Prism/global/globals.dart' as globals; +import 'package:flutter/material.dart'; import 'package:url_launcher/url_launcher.dart'; class OldVersion extends StatelessWidget { diff --git a/lib/ui/pages/home/core/pageManager.dart b/lib/ui/pages/home/core/pageManager.dart index 51bb7f0c..ee02eb3e 100644 --- a/lib/ui/pages/home/core/pageManager.dart +++ b/lib/ui/pages/home/core/pageManager.dart @@ -1,31 +1,24 @@ -import 'dart:io'; import 'package:Prism/data/ads/adsNotifier.dart'; +import 'package:Prism/data/favourites/provider/favouriteProvider.dart'; +import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; +import 'package:Prism/main.dart' as main; import 'package:Prism/routes/router.dart'; import 'package:Prism/routes/routing_constants.dart'; +import 'package:Prism/theme/jam_icons_icons.dart'; import 'package:Prism/ui/pages/home/collections/collectionScreen.dart'; -import 'package:Prism/ui/pages/home/wallpapers/homeScreen.dart'; import 'package:Prism/ui/pages/home/wallpapers/followingScreen.dart'; +import 'package:Prism/ui/pages/home/wallpapers/homeScreen.dart'; import 'package:Prism/ui/widgets/home/core/bottomNavBar.dart'; import 'package:Prism/ui/widgets/home/core/categoriesBar.dart'; import 'package:Prism/ui/widgets/home/core/offlineBanner.dart'; import 'package:Prism/ui/widgets/popup/signInPopUp.dart'; -import 'package:animations/animations.dart'; import 'package:data_connection_checker/data_connection_checker.dart'; -import 'package:device_info/device_info.dart'; -import 'package:flutter/material.dart'; import 'package:firebase_dynamic_links/firebase_dynamic_links.dart'; +import 'package:flutter/material.dart'; import 'package:hive/hive.dart'; import 'package:provider/provider.dart'; -// import 'package:rate_my_app/rate_my_app.dart'; -// import 'package:smooth_star_rating/smooth_star_rating.dart'; -import 'package:url_launcher/url_launcher.dart'; -import 'package:Prism/theme/toasts.dart' as toasts; -import 'package:Prism/data/favourites/provider/favouriteProvider.dart'; -import 'package:Prism/theme/jam_icons_icons.dart'; -import 'package:Prism/main.dart' as main; import 'package:quick_actions/quick_actions.dart'; -import 'package:Prism/global/globals.dart' as globals; -import 'package:Prism/logger/logger.dart'; TabController? tabController; @@ -164,45 +157,11 @@ class _PageManagerChildState extends State Future initDynamicLinks(BuildContext context) async { final PendingDynamicLinkData data = await FirebaseDynamicLinks.instance.getInitialLink(); - final Uri? deepLink = data?.link; + if (data != null) { + final Uri? deepLink = data.link; - if (deepLink != null && linkOpened == 0) { - logger.d("opened while closed altogether via deep link"); - if (deepLink.pathSegments[0] == "share") { - Future.delayed(const Duration()).then( - (value) => Navigator.pushNamed(context, shareRoute, arguments: [ - deepLink.queryParameters["id"], - deepLink.queryParameters["provider"], - deepLink.queryParameters["url"], - deepLink.queryParameters["thumb"], - ])); - linkOpened = 1; - } else if (deepLink.pathSegments[0] == "user") { - Future.delayed(const Duration()).then((value) => - Navigator.pushNamed(context, followerProfileRoute, arguments: [ - deepLink.queryParameters["email"], - ])); - linkOpened = 1; - } else if (deepLink.pathSegments[0] == "setup") { - Future.delayed(const Duration()).then((value) => - Navigator.pushNamed(context, shareSetupViewRoute, arguments: [ - deepLink.queryParameters["name"], - deepLink.queryParameters["thumbUrl"], - ])); - linkOpened = 1; - } else if (deepLink.pathSegments[0] == "refer") { - //TODO write code to add coins in friend/user account - linkOpened = 1; - } else {} - logger.d("opened while closed altogether via deep link2345"); - } - - FirebaseDynamicLinks.instance.onLink( - onSuccess: (PendingDynamicLinkData dynamicLink) async { - final Uri deepLink = dynamicLink.link; - - if (deepLink != null) { - logger.d("opened while bg via deep link1"); + if (deepLink != null && linkOpened == 0) { + logger.d("opened while closed altogether via deep link"); if (deepLink.pathSegments[0] == "share") { Future.delayed(const Duration()).then( (value) => Navigator.pushNamed(context, shareRoute, arguments: [ @@ -211,26 +170,63 @@ class _PageManagerChildState extends State deepLink.queryParameters["url"], deepLink.queryParameters["thumb"], ])); + linkOpened = 1; } else if (deepLink.pathSegments[0] == "user") { Future.delayed(const Duration()).then((value) => Navigator.pushNamed(context, followerProfileRoute, arguments: [ deepLink.queryParameters["email"], ])); + linkOpened = 1; } else if (deepLink.pathSegments[0] == "setup") { Future.delayed(const Duration()).then((value) => Navigator.pushNamed(context, shareSetupViewRoute, arguments: [ deepLink.queryParameters["name"], deepLink.queryParameters["thumbUrl"], ])); + linkOpened = 1; + } else if (deepLink.pathSegments[0] == "refer") { + //TODO write code to add coins in friend/user account + linkOpened = 1; } else {} - - logger.d("opened while bg via deep link2345"); + logger.d("opened while closed altogether via deep link2345"); } - }, onError: (OnLinkErrorException e) async { - logger.d('onLinkError'); - logger.d(e.message); - }); - return true; + + FirebaseDynamicLinks.instance.onLink( + onSuccess: (PendingDynamicLinkData dynamicLink) async { + final Uri deepLink = dynamicLink.link; + + if (deepLink != null) { + logger.d("opened while bg via deep link1"); + if (deepLink.pathSegments[0] == "share") { + Future.delayed(const Duration()).then( + (value) => Navigator.pushNamed(context, shareRoute, arguments: [ + deepLink.queryParameters["id"], + deepLink.queryParameters["provider"], + deepLink.queryParameters["url"], + deepLink.queryParameters["thumb"], + ])); + } else if (deepLink.pathSegments[0] == "user") { + Future.delayed(const Duration()).then((value) => + Navigator.pushNamed(context, followerProfileRoute, arguments: [ + deepLink.queryParameters["email"], + ])); + } else if (deepLink.pathSegments[0] == "setup") { + Future.delayed(const Duration()).then((value) => + Navigator.pushNamed(context, shareSetupViewRoute, arguments: [ + deepLink.queryParameters["name"], + deepLink.queryParameters["thumbUrl"], + ])); + } else {} + + logger.d("opened while bg via deep link2345"); + } + }, onError: (OnLinkErrorException e) async { + logger.d('onLinkError'); + logger.d(e.message); + }); + return true; + } + return false; } @override diff --git a/lib/ui/pages/home/core/splashScreen.dart b/lib/ui/pages/home/core/splashScreen.dart index 7459ff48..cc7427a0 100644 --- a/lib/ui/pages/home/core/splashScreen.dart +++ b/lib/ui/pages/home/core/splashScreen.dart @@ -1,15 +1,16 @@ import 'dart:convert'; + import 'package:Prism/data/categories/categories.dart'; import 'package:Prism/data/notifications/notifications.dart'; +import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; +import 'package:Prism/main.dart' as main; +import 'package:Prism/theme/config.dart' as config; import 'package:Prism/ui/pages/home/core/oldVersionScreen.dart'; import 'package:Prism/ui/pages/home/core/pageManager.dart'; import 'package:firebase_remote_config/firebase_remote_config.dart'; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; -import 'package:Prism/global/globals.dart' as globals; -import 'package:Prism/theme/config.dart' as config; -import 'package:Prism/main.dart' as main; -import 'package:Prism/logger/logger.dart'; late RemoteConfig remoteConfig; diff --git a/lib/ui/pages/home/wallpapers/followingScreen.dart b/lib/ui/pages/home/wallpapers/followingScreen.dart index 7a384f7b..bdbf5b34 100644 --- a/lib/ui/pages/home/wallpapers/followingScreen.dart +++ b/lib/ui/pages/home/wallpapers/followingScreen.dart @@ -1,21 +1,21 @@ import 'dart:async'; import 'package:Prism/auth/google_auth.dart'; +import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/global/svgAssets.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/router.dart'; +import 'package:Prism/routes/routing_constants.dart'; +import 'package:Prism/ui/widgets/home/core/inheritedScrollControllerProvider.dart'; +import 'package:Prism/ui/widgets/menuButton/favIconButton.dart'; +import 'package:Prism/ui/widgets/popup/signInPopUp.dart'; +import 'package:Prism/ui/widgets/premiumBanners/followingFeed.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/material.dart'; import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; -import 'package:Prism/ui/widgets/popup/signInPopUp.dart'; -import 'package:timeago/timeago.dart' as timeago; -import 'package:Prism/ui/widgets/home/core/inheritedScrollControllerProvider.dart'; -import 'package:Prism/ui/widgets/menuButton/favIconButton.dart'; -import 'package:Prism/routes/routing_constants.dart'; -import 'package:Prism/global/globals.dart' as globals; import 'package:flutter_svg/flutter_svg.dart'; -import 'package:Prism/global/svgAssets.dart'; -import 'package:Prism/ui/widgets/premiumBanners/followingFeed.dart'; -import 'package:Prism/logger/logger.dart'; +import 'package:timeago/timeago.dart' as timeago; class FollowingScreen extends StatefulWidget { const FollowingScreen({ diff --git a/lib/ui/pages/home/wallpapers/homeScreen.dart b/lib/ui/pages/home/wallpapers/homeScreen.dart index 500ee014..321f1a9c 100644 --- a/lib/ui/pages/home/wallpapers/homeScreen.dart +++ b/lib/ui/pages/home/wallpapers/homeScreen.dart @@ -1,6 +1,7 @@ import 'package:Prism/global/categoryMenu.dart'; import 'package:Prism/global/categoryProvider.dart'; import 'package:Prism/logger/logger.dart'; +import 'package:Prism/main.dart' as main; import 'package:Prism/routes/router.dart'; import 'package:Prism/ui/widgets/home/wallpapers/loading.dart'; import 'package:Prism/ui/widgets/home/wallpapers/pexelsGrid.dart'; @@ -9,7 +10,6 @@ import 'package:Prism/ui/widgets/home/wallpapers/wallpaperGrid.dart'; import 'package:Prism/ui/widgets/popup/changelogPopUp.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/material.dart'; -import 'package:Prism/main.dart' as main; import 'package:provider/provider.dart'; final FirebaseMessaging f = FirebaseMessaging.instance; diff --git a/lib/ui/pages/home/wallpapers/wallpaperFilterScreen.dart b/lib/ui/pages/home/wallpapers/wallpaperFilterScreen.dart index a79d2b45..642d97b1 100644 --- a/lib/ui/pages/home/wallpapers/wallpaperFilterScreen.dart +++ b/lib/ui/pages/home/wallpapers/wallpaperFilterScreen.dart @@ -3,31 +3,28 @@ import 'dart:io'; import 'dart:typed_data'; import 'package:Prism/analytics/analytics_service.dart'; +import 'package:Prism/global/globals.dart' as globals; import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/router.dart'; import 'package:Prism/routes/routing_constants.dart'; -import 'package:Prism/theme/darkThemeModel.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; -import 'package:Prism/theme/theme.dart'; -import 'package:Prism/theme/themeModeProvider.dart'; +import 'package:Prism/theme/toasts.dart' as toasts; import 'package:Prism/ui/pages/home/wallpapers/customFilters.dart'; import 'package:Prism/ui/widgets/animated/loader.dart'; import 'package:Prism/ui/widgets/menuButton/setWallpaperButton.dart'; import 'package:Prism/ui/widgets/popup/signInPopUp.dart'; +import 'package:async_wallpaper/async_wallpaper.dart'; +import 'package:device_info/device_info.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:gallery_saver/gallery_saver.dart'; import 'package:image/image.dart' as imagelib; +import 'package:path_provider/path_provider.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:photo_view/photo_view.dart'; import 'package:photofilters/filters/filters.dart'; -import 'package:path_provider/path_provider.dart'; import 'package:photofilters/filters/preset_filters.dart'; -import 'package:Prism/theme/toasts.dart' as toasts; -import 'package:provider/provider.dart'; -import 'package:Prism/global/globals.dart' as globals; -import 'package:Prism/main.dart' as main; class WallpaperFilterScreen extends StatefulWidget { final imagelib.Image image; @@ -134,28 +131,36 @@ class _WallpaperFilterScreenState extends State { return true; } - static const platform = MethodChannel("flutter.prism.set_wallpaper"); - - Future _setBothWallPaper(String url) async { - bool? result; + Future _setWallPaper(String link) async { + String? result; try { - if (url.contains("com.hash.prism")) { - result = await platform - .invokeMethod("set_both_wallpaper_file", { - 'url': url, - }); - } else if (url.contains("/0/")) { - result = await platform - .invokeMethod("set_both_wallpaper_file", { - 'url': "/${url.replaceAll("/0//", "/0/")}", - }); + result = await AsyncWallpaper.setWallpaperFromFileNative( + link, + ); + if (result == 'Wallpaper set') { + logger.d("Success"); + analytics.logEvent( + name: 'set_wall', + parameters: {'type': 'Both', 'result': 'Success'}); } else { - result = - await platform.invokeMethod("set_both_wallpaper", { - 'url': url, - }); + logger.d("Failed"); + toasts.error("Something went wrong!"); } - if (result!) { + } catch (e) { + analytics.logEvent( + name: 'set_wall', parameters: {'type': 'Both', 'result': 'Failure'}); + logger.d(e.toString()); + } + } + + Future _setBothWallPaper(String url) async { + String? result; + try { + result = await AsyncWallpaper.setWallpaperFromFile( + url, + AsyncWallpaper.BOTH_SCREENS, + ); + if (result == 'Wallpaper set') { logger.d("Success"); analytics.logEvent( name: 'set_wall', @@ -174,25 +179,13 @@ class _WallpaperFilterScreenState extends State { } Future _setLockWallPaper(String url) async { - bool? result; + String? result; try { - if (url.contains("com.hash.prism")) { - result = await platform - .invokeMethod("set_lock_wallpaper_file", { - 'url': url, - }); - } else if (url.contains("/0/")) { - result = await platform - .invokeMethod("set_lock_wallpaper_file", { - 'url': "/${url.replaceAll("/0//", "/0/")}", - }); - } else { - result = - await platform.invokeMethod("set_lock_wallpaper", { - 'url': url, - }); - } - if (result!) { + result = await AsyncWallpaper.setWallpaperFromFile( + url, + AsyncWallpaper.LOCK_SCREEN, + ); + if (result == 'Wallpaper set') { logger.d("Success"); analytics.logEvent( name: 'set_wall', @@ -211,25 +204,13 @@ class _WallpaperFilterScreenState extends State { } Future _setHomeWallPaper(String url) async { - bool? result; + String? result; try { - if (url.contains("com.hash.prism")) { - result = await platform - .invokeMethod("set_home_wallpaper_file", { - 'url': url, - }); - } else if (url.contains("/0/")) { - result = await platform - .invokeMethod("set_home_wallpaper_file", { - 'url': "/${url.replaceAll("/0//", "/0/")}", - }); - } else { - result = - await platform.invokeMethod("set_home_wallpaper", { - 'url': url, - }); - } - if (result!) { + result = await AsyncWallpaper.setWallpaperFromFile( + url, + AsyncWallpaper.HOME_SCREEN, + ); + if (result == 'Wallpaper set') { logger.d("Success"); analytics.logEvent( name: 'set_wall', @@ -247,6 +228,12 @@ class _WallpaperFilterScreenState extends State { Navigator.of(context).pop(); } + Future onPaint(String url) async { + HapticFeedback.vibrate(); + Future.delayed(const Duration(seconds: 1)) + .then((value) => _setWallPaper(url)); + } + void showPremiumPopUp(Function func) { if (globals.prismUser.loggedIn == false) { toasts.codeSend("Editing Wallpaper is a premium feature."); @@ -340,20 +327,40 @@ class _WallpaperFilterScreenState extends State { isScrollControlled: true, context: context, builder: (context) => SetOptionsPanel( - onTap1: () { + onTap1: () async { + HapticFeedback.vibrate(); + Navigator.of(context).pop(); + Future.delayed(const Duration(seconds: 1)) + .then((value) => _setHomeWallPaper(imageFile.path)); + }, + onTap4: () async { HapticFeedback.vibrate(); Navigator.of(context).pop(); - _setHomeWallPaper(imageFile.path); + if (Platform.isAndroid) { + final androidInfo = + await DeviceInfoPlugin().androidInfo; + final sdkInt = androidInfo.version.sdkInt; + logger.d('(SDK $sdkInt)'); + sdkInt >= 24 + ? onPaint(imageFile.path) + : toasts.error( + "Crop is supported for Android 7.0 and above!"); + } else { + toasts.error( + "Sorry crop is supported for Android 7.0 and above!"); + } }, onTap2: () { HapticFeedback.vibrate(); Navigator.of(context).pop(); - _setLockWallPaper(imageFile.path); + Future.delayed(const Duration(seconds: 1)) + .then((value) => _setLockWallPaper(imageFile.path)); }, onTap3: () { HapticFeedback.vibrate(); Navigator.of(context).pop(); - _setBothWallPaper(imageFile.path); + Future.delayed(const Duration(seconds: 1)) + .then((value) => _setBothWallPaper(imageFile.path)); }, ), ); @@ -517,7 +524,7 @@ class _WallpaperFilterScreenState extends State { } Future get _localPath async { - final directory = await getApplicationDocumentsDirectory(); + final directory = await getTemporaryDirectory(); return directory.path; } @@ -573,19 +580,20 @@ class _WallpaperFilterScreenState extends State { width: 25, child: CircularProgressIndicator( valueColor: AlwaysStoppedAnimation( - Provider.of(context) - .getCurrentModeStyle( - MediaQuery.of(context) - .platformBrightness) == - "Dark" && - Provider.of(context) - .currentTheme == - kDarkTheme2 - ? Theme.of(context).errorColor == - Colors.black - ? Theme.of(context).accentColor - : Theme.of(context).errorColor - : Theme.of(context).errorColor, + // Provider.of(context) + // .getCurrentModeStyle( + // MediaQuery.of(context) + // .platformBrightness) == + // "Dark" && + // Provider.of(context) + // .currentTheme == + // kDarkTheme2 + // ? Theme.of(context).errorColor == + // Colors.black + // ? Theme.of(context).accentColor + // : Theme.of(context).errorColor + // : + Theme.of(context).errorColor, ), ), ), @@ -621,19 +629,20 @@ class _WallpaperFilterScreenState extends State { width: 25, child: CircularProgressIndicator( valueColor: AlwaysStoppedAnimation( - Provider.of(context) - .getCurrentModeStyle( - MediaQuery.of(context) - .platformBrightness) == - "Dark" && - Provider.of(context) - .currentTheme == - kDarkTheme2 - ? Theme.of(context).errorColor == - Colors.black - ? Theme.of(context).accentColor - : Theme.of(context).errorColor - : Theme.of(context).errorColor, + // Provider.of(context) + // .getCurrentModeStyle( + // MediaQuery.of(context) + // .platformBrightness) == + // "Dark" && + // Provider.of(context) + // .currentTheme == + // kDarkTheme2 + // ? Theme.of(context).errorColor == + // Colors.black + // ? Theme.of(context).accentColor + // : Theme.of(context).errorColor + // : + Theme.of(context).errorColor, ), ), ), diff --git a/lib/ui/pages/home/wallpapers/wallpaperScreen.dart b/lib/ui/pages/home/wallpapers/wallpaperScreen.dart index d4312d39..b41dbfeb 100644 --- a/lib/ui/pages/home/wallpapers/wallpaperScreen.dart +++ b/lib/ui/pages/home/wallpapers/wallpaperScreen.dart @@ -1,6 +1,9 @@ import 'dart:io'; +import 'dart:isolate'; +import 'dart:math'; import 'dart:typed_data'; -import 'dart:ui'; +import 'dart:ui' as ui; + import 'package:Prism/data/informatics/dataManager.dart'; import 'package:Prism/data/palette/paletteNotifier.dart'; import 'package:Prism/data/pexels/provider/pexelsWithoutProvider.dart' as pdata; @@ -8,13 +11,17 @@ import 'package:Prism/data/prism/provider/prismWithoutProvider.dart' as data; import 'package:Prism/data/share/createDynamicLink.dart'; import 'package:Prism/data/wallhaven/provider/wallhavenWithoutProvider.dart' as wdata; +import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/global/svgAssets.dart'; import 'package:Prism/logger/logger.dart'; +import 'package:Prism/main.dart' as main; import 'package:Prism/routes/router.dart'; import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; +import 'package:Prism/theme/toasts.dart' as toasts; import 'package:Prism/ui/widgets/home/core/collapsedPanel.dart'; -import 'package:Prism/ui/widgets/home/wallpapers/clockOverlay.dart'; import 'package:Prism/ui/widgets/home/core/colorBar.dart'; +import 'package:Prism/ui/widgets/home/wallpapers/clockOverlay.dart'; import 'package:Prism/ui/widgets/menuButton/downloadButton.dart'; import 'package:Prism/ui/widgets/menuButton/editButton.dart'; import 'package:Prism/ui/widgets/menuButton/favWallpaperButton.dart'; @@ -22,17 +29,14 @@ import 'package:Prism/ui/widgets/menuButton/setWallpaperButton.dart'; import 'package:Prism/ui/widgets/menuButton/shareButton.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; -import 'package:palette_generator/palette_generator.dart'; +import 'package:flutter_downloader/flutter_downloader.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:path_provider/path_provider.dart'; import 'package:provider/provider.dart'; import 'package:sliding_up_panel/sliding_up_panel.dart'; -import 'package:screenshot/screenshot.dart'; -import 'package:Prism/main.dart' as main; -import 'package:Prism/global/svgAssets.dart'; import 'package:url_launcher/url_launcher.dart'; -import 'package:Prism/global/globals.dart' as globals; -import 'package:flutter_svg/flutter_svg.dart'; -import 'package:Prism/theme/toasts.dart' as toasts; class WallpaperScreen extends StatefulWidget { final List? arguments; @@ -50,16 +54,21 @@ class _WallpaperScreenState extends State } final GlobalKey _scaffoldKey = GlobalKey(); + final GlobalKey genKey = GlobalKey(); String? provider; late int index; late String link; + String? path; + int progress = 0; + bool downloading = false; + bool applying = false; + bool downloaded = false; + final ReceivePort _port = ReceivePort(); late AnimationController shakeController; List? colors; Color? accent = Colors.white; bool colorChanged = false; - late File _imageFile; bool screenshotTaken = false; - ScreenshotController screenshotController = ScreenshotController(); PanelController panelController = PanelController(); bool panelClosed = true; bool panelCollapsed = true; @@ -112,11 +121,120 @@ class _WallpaperScreenState extends State } } + Future _capturePng() async { + final RenderRepaintBoundary boundary = + genKey.currentContext?.findRenderObject() as RenderRepaintBoundary; + final ui.Image image = await boundary.toImage(pixelRatio: 3); + final directory = (await getTemporaryDirectory()).path; + final ByteData? byteData = + await image.toByteData(format: ui.ImageByteFormat.png); + final Uint8List pngBytes = byteData!.buffer.asUint8List(); + final r = Random(); + String rNum = ""; + for (var i = 0; i < 6; i++) { + rNum = "$rNum${r.nextInt(9)}"; + } + final File imgFile = File('$directory/photo_$rNum.png'); + await imgFile.writeAsBytes(pngBytes); + logger.d(imgFile.path); + return imgFile; + } + + Future _captureAMOLEDPng() async { + const int blackThreshold = 18; + final RenderRepaintBoundary boundary = + genKey.currentContext?.findRenderObject() as RenderRepaintBoundary; + final ui.Image image = await boundary.toImage(pixelRatio: 3); + final directory = (await getTemporaryDirectory()).path; + final ByteData? byteData = await image.toByteData(); + for (int i = 0; i < image.height; i++) { + for (int j = 0; j < image.width; j++) { + final pixelData = byteData?.getUint32((i * image.width + j) * 4); + if (pixelData != null) { + final int red = pixelData >> 24 & 0xFF; + final int green = pixelData >> 16 & 0xFF; + final int blue = pixelData >> 8 & 0xFF; + final int alpha = pixelData & 0xFF; + if ((red <= blackThreshold) && + (green <= blackThreshold) && + (blue <= blackThreshold) && + alpha != 0) { + byteData?.setUint32((i * image.width + j) * 4, 0x000000FF); + } + } + } + } + ui.Image? imageEdit; + File? imgFileEdit; + ui.decodeImageFromPixels( + byteData?.buffer.asUint8List() as Uint8List, + image.width, + image.height, + ui.PixelFormat.rgba8888, + (ui.Image result) async { + imageEdit = result; + final ByteData? byteDataEdit = + await imageEdit?.toByteData(format: ui.ImageByteFormat.png); + final Uint8List pngBytes = byteDataEdit!.buffer.asUint8List(); + final r = Random(); + String rNum = ""; + for (var i = 0; i < 6; i++) { + rNum = "$rNum${r.nextInt(9)}"; + } + final File imgFile = File('$directory/photo_$rNum.png'); + await imgFile.writeAsBytes(pngBytes); + logger.d(imgFile.path); + imgFileEdit = imgFile; + }, + ); + await Future.delayed(const Duration(seconds: 3)); + if (imgFileEdit == null) { + await Future.delayed(const Duration(seconds: 3)); + } + return imgFileEdit!; + } + + void setupDownloader() { + initPlatformState(); + ui.IsolateNameServer.registerPortWithName( + _port.sendPort, 'downloader_send_port'); + _port.listen((dynamic data) { + // String id = data[0]; + final DownloadTaskStatus status = data[1] as DownloadTaskStatus; + if (status == const DownloadTaskStatus(3)) { + setState(() { + downloaded = true; + }); + toasts.codeSend("Wall Downloaded in Downloads!"); + } + setState(() { + if (status == const DownloadTaskStatus(2)) { + downloading = true; + progress = data[2] as int; + } else { + downloading = false; + progress = 0; + } + }); + }); + FlutterDownloader.registerCallback(callback); + } + + void _setPath() async { + path = (await _findLocalPath())!; + final savedDir = Directory(path ?? ""); + final bool hasExisted = await savedDir.exists(); + if (!hasExisted) { + savedDir.create(); + } + } + @override void initState() { + super.initState(); shakeController = AnimationController( duration: const Duration(milliseconds: 300), vsync: this); - super.initState(); + setupDownloader(); provider = widget.arguments![0] as String; index = widget.arguments![1] as int; link = widget.arguments![2] as String; @@ -128,10 +246,38 @@ class _WallpaperScreenState extends State Future.delayed(const Duration()).then((value) => _updatePaletteGenerator()); } + Future initPlatformState() async { + _setPath(); + if (!mounted) return; + } + + Future _findLocalPath() async { + String? externalStorageDirPath; + if (Platform.isAndroid) { + try { + externalStorageDirPath = "/storage/emulated/0/Download"; + } catch (e) { + final directory = await getExternalStorageDirectory(); + externalStorageDirPath = directory?.path; + } + } else if (Platform.isIOS) { + externalStorageDirPath = + (await getApplicationDocumentsDirectory()).absolute.path; + } + return externalStorageDirPath; + } + + static void callback(String id, DownloadTaskStatus status, int progress) { + final SendPort? send = + ui.IsolateNameServer.lookupPortByName('downloader_send_port'); + send?.send([id, status, progress]); + } + @override void dispose() { - super.dispose(); shakeController.dispose(); + ui.IsolateNameServer.removePortNameMapping('downloader_send_port'); + super.dispose(); } @override @@ -141,11 +287,11 @@ class _WallpaperScreenState extends State final Animation offsetAnimation = Tween(begin: 0.0, end: 48.0) .chain(CurveTween(curve: Curves.easeOutCubic)) .animate(shakeController) - ..addStatusListener((status) { - if (status == AnimationStatus.completed) { - shakeController.reverse(); - } - }); + ..addStatusListener((status) { + if (status == AnimationStatus.completed) { + shakeController.reverse(); + } + }); return WillPopScope( onWillPop: onWillPop, child: provider == "WallHaven" @@ -167,41 +313,6 @@ class _WallpaperScreenState extends State setState(() { panelClosed = false; }); - if (colorChanged) { - screenshotController - .capture( - pixelRatio: 3, - delay: const Duration(milliseconds: 10), - ) - .then((Uint8List? image) async { - setState(() { - _imageFile = File.fromRawPath(image!); - screenshotTaken = true; - }); - logger.d('Screenshot Taken'); - }).catchError((onError) { - logger.d(onError as String); - }); - } else { - main.prefs.get('optimisedWallpapers', - defaultValue: false) == - true - ? screenshotController - .capture( - pixelRatio: 3, - delay: const Duration(milliseconds: 10), - ) - .then((Uint8List? image) async { - setState(() { - _imageFile = File.fromRawPath(image!); - screenshotTaken = true; - }); - logger.d('Screenshot Taken'); - }).catchError((onError) { - logger.d(onError.toString()); - }) - : logger.d("Wallpaper Optimisation is disabled!"); - } } }, onPanelClosed: () { @@ -235,7 +346,7 @@ class _WallpaperScreenState extends State child: ClipRRect( borderRadius: BorderRadius.circular(30), child: BackdropFilter( - filter: ImageFilter.blur(sigmaX: 12.0, sigmaY: 12.0), + filter: ui.ImageFilter.blur(sigmaX: 12.0, sigmaY: 12.0), child: AnimatedContainer( duration: const Duration(milliseconds: 750), decoration: BoxDecoration( @@ -456,16 +567,27 @@ class _WallpaperScreenState extends State mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ - DownloadButton( - colorChanged: colorChanged, - link: screenshotTaken - ? _imageFile.path - : wdata.walls[index].path.toString()), + DownloadButtonNew( + colorChanged: colorChanged, + screenshotCallback: () async { + final File file = await _capturePng(); + return file; + }, + loading: downloading, + path: path ?? "", + progress: (progress / 100.0) + .clamp(0, 100) + .toInt(), + link: wdata.walls[index].path.toString(), + ), SetWallpaperButton( - colorChanged: colorChanged, - url: screenshotTaken - ? _imageFile.path - : wdata.walls[index].path), + colorChanged: colorChanged, + screenshotCallback: () async { + final File file = await _capturePng(); + return file; + }, + url: wdata.walls[index].path, + ), FavouriteWallpaperButton( id: wdata.walls[index].id.toString(), provider: "WallHaven", @@ -522,8 +644,8 @@ class _WallpaperScreenState extends State child: CachedNetworkImage( imageUrl: wdata.walls[index].path!, imageBuilder: (context, imageProvider) => - Screenshot( - controller: screenshotController, + RepaintBoundary( + key: genKey, child: Container( margin: EdgeInsets.symmetric( vertical: offsetAnimation.value * 1.25, @@ -650,40 +772,6 @@ class _WallpaperScreenState extends State setState(() { panelClosed = false; }); - if (colorChanged) { - screenshotController - .capture( - pixelRatio: 3, - delay: const Duration(milliseconds: 10), - ) - .then((Uint8List? image) async { - setState(() { - _imageFile = File.fromRawPath(image!); - screenshotTaken = true; - }); - logger.d('Screenshot Taken'); - }).catchError((onError) { - logger.d(onError.toString()); - }); - } else { - (main.prefs.get('optimisedWallpapers') ?? true) == - true - ? screenshotController - .capture( - pixelRatio: 3, - delay: const Duration(milliseconds: 10), - ) - .then((Uint8List? image) async { - setState(() { - _imageFile = File.fromRawPath(image!); - screenshotTaken = true; - }); - logger.d('Screenshot Taken'); - }).catchError((onError) { - logger.d(onError.toString()); - }) - : logger.d("Wallpaper Optimisation is disabled!"); - } } }, onPanelClosed: () { @@ -717,7 +805,8 @@ class _WallpaperScreenState extends State child: ClipRRect( borderRadius: BorderRadius.circular(30), child: BackdropFilter( - filter: ImageFilter.blur(sigmaX: 12.0, sigmaY: 12.0), + filter: + ui.ImageFilter.blur(sigmaX: 12.0, sigmaY: 12.0), child: AnimatedContainer( duration: const Duration(milliseconds: 750), decoration: BoxDecoration( @@ -1111,20 +1200,31 @@ class _WallpaperScreenState extends State mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ - DownloadButton( - colorChanged: colorChanged, - link: screenshotTaken - ? _imageFile.path - : data.subPrismWalls![index] - ["wallpaper_url"] - .toString()), + DownloadButtonNew( + colorChanged: colorChanged, + screenshotCallback: () async { + final File file = await _capturePng(); + return file; + }, + loading: downloading, + path: path ?? "", + progress: (progress / 100.0) + .clamp(0, 100) + .toInt(), + link: data.subPrismWalls![index] + ["wallpaper_url"] + .toString(), + ), SetWallpaperButton( - colorChanged: colorChanged, - url: screenshotTaken - ? _imageFile.path - : data.subPrismWalls![index] - ["wallpaper_url"] - .toString()), + colorChanged: colorChanged, + screenshotCallback: () async { + final File file = await _capturePng(); + return file; + }, + url: data.subPrismWalls![index] + ["wallpaper_url"] + .toString(), + ), FavouriteWallpaperButton( id: data.subPrismWalls![index]["id"] .toString(), @@ -1189,8 +1289,8 @@ class _WallpaperScreenState extends State ["wallpaper_url"] .toString(), imageBuilder: (context, imageProvider) => - Screenshot( - controller: screenshotController, + RepaintBoundary( + key: genKey, child: Container( margin: EdgeInsets.symmetric( vertical: @@ -1265,7 +1365,7 @@ class _WallpaperScreenState extends State padding: EdgeInsets.fromLTRB( 8.0, globals.notchSize! + 8, 8, 8), child: IconButton( - onPressed: () { + onPressed: () async { final link = data.subPrismWalls![index]["wallpaper_url"]; Navigator.push( @@ -1321,41 +1421,6 @@ class _WallpaperScreenState extends State setState(() { panelClosed = false; }); - if (colorChanged) { - screenshotController - .capture( - pixelRatio: 3, - delay: const Duration(milliseconds: 10), - ) - .then((Uint8List? image) async { - setState(() { - _imageFile = File.fromRawPath(image!); - screenshotTaken = true; - }); - logger.d('Screenshot Taken'); - }).catchError((onError) { - logger.d(onError.toString()); - }); - } else { - (main.prefs.get('optimisedWallpapers') ?? true) == - true - ? screenshotController - .capture( - pixelRatio: 3, - delay: const Duration(milliseconds: 10), - ) - .then((Uint8List? image) async { - setState(() { - _imageFile = File.fromRawPath(image!); - screenshotTaken = true; - }); - logger.d('Screenshot Taken'); - }).catchError((onError) { - logger.d(onError.toString()); - }) - : logger - .d("Wallpaper Optimisation is disabled!"); - } } }, onPanelClosed: () { @@ -1389,8 +1454,8 @@ class _WallpaperScreenState extends State child: ClipRRect( borderRadius: BorderRadius.circular(30), child: BackdropFilter( - filter: - ImageFilter.blur(sigmaX: 12.0, sigmaY: 12.0), + filter: ui.ImageFilter.blur( + sigmaX: 12.0, sigmaY: 12.0), child: AnimatedContainer( duration: const Duration(milliseconds: 750), decoration: BoxDecoration( @@ -1649,20 +1714,33 @@ class _WallpaperScreenState extends State mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ - DownloadButton( - colorChanged: colorChanged, - link: screenshotTaken - ? _imageFile.path - : pdata.wallsP[index] - .src!["original"] - .toString()), + DownloadButtonNew( + colorChanged: colorChanged, + screenshotCallback: () async { + final File file = + await _capturePng(); + return file; + }, + loading: downloading, + path: path ?? "", + progress: (progress / 100.0) + .clamp(0, 100) + .toInt(), + link: pdata + .wallsP[index].src!["original"] + .toString(), + ), SetWallpaperButton( - colorChanged: colorChanged, - url: screenshotTaken - ? _imageFile.path - : pdata.wallsP[index] - .src!["original"] - .toString()), + colorChanged: colorChanged, + screenshotCallback: () async { + final File file = + await _capturePng(); + return file; + }, + url: pdata + .wallsP[index].src!["original"] + .toString(), + ), FavouriteWallpaperButton( id: pdata.wallsP[index].id .toString(), @@ -1726,8 +1804,8 @@ class _WallpaperScreenState extends State .wallsP[index].src!["original"] .toString(), imageBuilder: (context, imageProvider) => - Screenshot( - controller: screenshotController, + RepaintBoundary( + key: genKey, child: Container( margin: EdgeInsets.symmetric( vertical: @@ -1807,7 +1885,7 @@ class _WallpaperScreenState extends State padding: EdgeInsets.fromLTRB( 8.0, globals.notchSize! + 8, 8, 8), child: IconButton( - onPressed: () { + onPressed: () async { final link = pdata.wallsP[index].src!["original"]; Navigator.push( @@ -1864,44 +1942,6 @@ class _WallpaperScreenState extends State setState(() { panelClosed = false; }); - if (colorChanged) { - screenshotController - .capture( - pixelRatio: 3, - delay: const Duration(milliseconds: 10), - ) - .then((Uint8List? image) async { - setState(() { - _imageFile = File.fromRawPath(image!); - screenshotTaken = true; - }); - logger.d('Screenshot Taken'); - }).catchError((onError) { - logger.d(onError.toString()); - }); - } else { - main.prefs.get('optimisedWallpapers') - as bool? ?? - true - ? screenshotController - .capture( - pixelRatio: 3, - delay: - const Duration(milliseconds: 10), - ) - .then((Uint8List? image) async { - setState(() { - _imageFile = - File.fromRawPath(image!); - screenshotTaken = true; - }); - logger.d('Screenshot Taken'); - }).catchError((onError) { - logger.d(onError.toString()); - }) - : logger.d( - "Wallpaper Optimisation is disabled!"); - } } }, onPanelClosed: () { @@ -1935,7 +1975,7 @@ class _WallpaperScreenState extends State child: ClipRRect( borderRadius: BorderRadius.circular(30), child: BackdropFilter( - filter: ImageFilter.blur( + filter: ui.ImageFilter.blur( sigmaX: 12.0, sigmaY: 12.0), child: AnimatedContainer( duration: const Duration(milliseconds: 750), @@ -2212,21 +2252,33 @@ class _WallpaperScreenState extends State mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ - DownloadButton( + DownloadButtonNew( colorChanged: colorChanged, - link: screenshotTaken - ? _imageFile.path - : pdata.wallsC[index] - .src!["original"] - .toString(), + screenshotCallback: () async { + final File file = + await _capturePng(); + return file; + }, + loading: downloading, + path: path ?? "", + progress: (progress / 100.0) + .clamp(0, 100) + .toInt(), + link: pdata.wallsC[index] + .src!["original"] + .toString(), ), SetWallpaperButton( - colorChanged: colorChanged, - url: screenshotTaken - ? _imageFile.path - : pdata.wallsC[index] - .src!["original"] - .toString()), + colorChanged: colorChanged, + screenshotCallback: () async { + final File file = + await _capturePng(); + return file; + }, + url: pdata.wallsC[index] + .src!["original"] + .toString(), + ), FavouriteWallpaperButton( id: pdata.wallsC[index].id .toString(), @@ -2295,8 +2347,8 @@ class _WallpaperScreenState extends State .toString(), imageBuilder: (context, imageProvider) => - Screenshot( - controller: screenshotController, + RepaintBoundary( + key: genKey, child: Container( margin: EdgeInsets.symmetric( vertical: @@ -2386,7 +2438,7 @@ class _WallpaperScreenState extends State padding: EdgeInsets.fromLTRB( 8.0, globals.notchSize! + 8, 8, 8), child: IconButton( - onPressed: () { + onPressed: () async { final link = pdata .wallsC[index].src!["original"]; Navigator.push( @@ -2444,44 +2496,6 @@ class _WallpaperScreenState extends State setState(() { panelClosed = false; }); - if (colorChanged) { - screenshotController - .capture( - pixelRatio: 3, - delay: const Duration(milliseconds: 10), - ) - .then((Uint8List? image) async { - setState(() { - _imageFile = File.fromRawPath(image!); - screenshotTaken = true; - }); - logger.d('Screenshot Taken'); - }).catchError((onError) { - logger.d(onError.toString()); - }); - } else { - main.prefs.get('optimisedWallpapers') - as bool? ?? - true - ? screenshotController - .capture( - pixelRatio: 3, - delay: - const Duration(milliseconds: 10), - ) - .then((Uint8List? image) async { - setState(() { - _imageFile = - File.fromRawPath(image!); - screenshotTaken = true; - }); - logger.d('Screenshot Taken'); - }).catchError((onError) { - logger.d(onError.toString()); - }) - : logger.d( - "Wallpaper Optimisation is disabled!"); - } } }, onPanelClosed: () { @@ -2515,7 +2529,7 @@ class _WallpaperScreenState extends State child: ClipRRect( borderRadius: BorderRadius.circular(30), child: BackdropFilter( - filter: ImageFilter.blur( + filter: ui.ImageFilter.blur( sigmaX: 12.0, sigmaY: 12.0), child: AnimatedContainer( duration: const Duration(milliseconds: 750), @@ -2793,19 +2807,30 @@ class _WallpaperScreenState extends State mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ - DownloadButton( + DownloadButtonNew( colorChanged: colorChanged, - link: screenshotTaken - ? _imageFile.path - : wdata.wallsS[index].path - .toString(), + screenshotCallback: () async { + final File file = + await _capturePng(); + return file; + }, + loading: downloading, + path: path ?? "", + progress: (progress / 100.0) + .clamp(0, 100) + .toInt(), + link: wdata.wallsS[index].path + .toString(), ), SetWallpaperButton( - colorChanged: colorChanged, - url: screenshotTaken - ? _imageFile.path - : wdata - .wallsS[index].path), + colorChanged: colorChanged, + screenshotCallback: () async { + final File file = + await _capturePng(); + return file; + }, + url: wdata.wallsS[index].path, + ), FavouriteWallpaperButton( id: wdata.wallsS[index].id .toString(), @@ -2865,8 +2890,8 @@ class _WallpaperScreenState extends State imageUrl: wdata.wallsS[index].path!, imageBuilder: (context, imageProvider) => - Screenshot( - controller: screenshotController, + RepaintBoundary( + key: genKey, child: Container( margin: EdgeInsets.symmetric( vertical: @@ -2954,7 +2979,7 @@ class _WallpaperScreenState extends State padding: EdgeInsets.fromLTRB( 8.0, globals.notchSize! + 8, 8, 8), child: IconButton( - onPressed: () { + onPressed: () async { final link = wdata.wallsS[index].path; Navigator.push( context, diff --git a/lib/ui/pages/onboarding/onboardingScreen.dart b/lib/ui/pages/onboarding/onboardingScreen.dart index 52d4a20b..88f6a15a 100644 --- a/lib/ui/pages/onboarding/onboardingScreen.dart +++ b/lib/ui/pages/onboarding/onboardingScreen.dart @@ -1,14 +1,14 @@ +import 'package:Prism/global/globals.dart' as globals; import 'package:Prism/logger/logger.dart'; +import 'package:Prism/main.dart' as main; import 'package:Prism/theme/jam_icons_icons.dart'; import 'package:Prism/theme/themeModeProvider.dart'; +import 'package:Prism/theme/toasts.dart' as toasts; import 'package:Prism/ui/pages/home/core/splashScreen.dart'; import 'package:Prism/ui/pages/onboarding/twitterigPopUp.dart'; import 'package:Prism/ui/widgets/animated/showUp.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:Prism/global/globals.dart' as globals; -import 'package:Prism/main.dart' as main; -import 'package:Prism/theme/toasts.dart' as toasts; class OnboardingScreen extends StatefulWidget { @override diff --git a/lib/ui/pages/onboarding/twitterigPopUp.dart b/lib/ui/pages/onboarding/twitterigPopUp.dart index 387398a8..8b7d5db4 100644 --- a/lib/ui/pages/onboarding/twitterigPopUp.dart +++ b/lib/ui/pages/onboarding/twitterigPopUp.dart @@ -2,6 +2,7 @@ import 'dart:convert'; import 'package:Prism/auth/google_auth.dart'; import 'package:Prism/gitkey.dart'; +import 'package:Prism/global/globals.dart' as globals; import 'package:Prism/theme/jam_icons_icons.dart'; import 'package:Prism/theme/toasts.dart' as toasts; import 'package:Prism/ui/pages/home/core/splashScreen.dart'; @@ -10,7 +11,6 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/material.dart'; import 'package:http/http.dart' as http; -import 'package:Prism/global/globals.dart' as globals; // class OptionalInfo extends StatefulWidget { // final Image img; diff --git a/lib/ui/pages/profile/aboutScreen.dart b/lib/ui/pages/profile/aboutScreen.dart index 1a34c9ab..a884cdbd 100644 --- a/lib/ui/pages/profile/aboutScreen.dart +++ b/lib/ui/pages/profile/aboutScreen.dart @@ -1,17 +1,13 @@ +import 'package:Prism/global/globals.dart' as globals; import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/router.dart'; -import 'package:Prism/theme/darkThemeModel.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; -import 'package:Prism/theme/theme.dart'; -import 'package:Prism/theme/themeModeProvider.dart'; import 'package:Prism/ui/widgets/animated/loader.dart'; import 'package:Prism/ui/widgets/popup/contriPopUp.dart'; import 'package:Prism/ui/widgets/profile/prismList.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; -import 'package:Prism/global/globals.dart' as globals; import 'package:github/github.dart'; -import 'package:provider/provider.dart'; import 'package:url_launcher/url_launcher.dart'; class AboutScreen extends StatelessWidget { @@ -321,15 +317,17 @@ class ActionButton extends StatelessWidget { child: ActionChip( avatar: Icon( icon, - color: Provider.of(context).getCurrentModeStyle( - MediaQuery.of(context).platformBrightness) == - "Dark" && - Provider.of(context).currentTheme == - kDarkTheme2 - ? Theme.of(context).errorColor == Colors.black - ? Theme.of(context).accentColor - : Theme.of(context).errorColor - : Theme.of(context).errorColor, + color: + // Provider.of(context).getCurrentModeStyle( + // MediaQuery.of(context).platformBrightness) == + // "Dark" && + // Provider.of(context).currentTheme == + // kDarkTheme2 + // ? Theme.of(context).errorColor == Colors.black + // ? Theme.of(context).accentColor + // : Theme.of(context).errorColor + // : + Theme.of(context).errorColor, ), label: Text( text, diff --git a/lib/ui/pages/profile/editSetupDetails.dart b/lib/ui/pages/profile/editSetupDetails.dart index 172a42dc..f3364006 100644 --- a/lib/ui/pages/profile/editSetupDetails.dart +++ b/lib/ui/pages/profile/editSetupDetails.dart @@ -1,24 +1,24 @@ import 'dart:convert'; import 'dart:io'; + import 'package:Prism/analytics/analytics_service.dart'; import 'package:Prism/data/apps/appsData.dart'; +import 'package:Prism/data/upload/wallpaper/wallfirestore.dart' as WallStore; import 'package:Prism/gitkey.dart'; +import 'package:Prism/global/globals.dart' as globals; import 'package:Prism/logger/logger.dart'; +import 'package:Prism/routes/router.dart'; import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; +import 'package:Prism/theme/toasts.dart' as toasts; import 'package:cached_network_image/cached_network_image.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/cupertino.dart'; -import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; import 'package:github/github.dart'; import 'package:hive/hive.dart'; import 'package:image_picker/image_picker.dart'; import 'package:path/path.dart' as Path; -import 'package:Prism/routes/router.dart'; -import 'package:flutter/material.dart'; -import 'package:Prism/data/upload/wallpaper/wallfirestore.dart' as WallStore; -import 'package:Prism/theme/toasts.dart' as toasts; -import 'package:Prism/global/globals.dart' as globals; class EditSetupReviewScreen extends StatefulWidget { final List? arguments; diff --git a/lib/ui/pages/profile/followersScreen.dart b/lib/ui/pages/profile/followersScreen.dart index 4836046f..e036e358 100644 --- a/lib/ui/pages/profile/followersScreen.dart +++ b/lib/ui/pages/profile/followersScreen.dart @@ -1,10 +1,9 @@ -import 'package:flutter/material.dart'; -import 'package:Prism/ui/widgets/home/core/headingChipBar.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/router.dart'; import 'package:Prism/routes/routing_constants.dart'; -import 'package:flutter/foundation.dart'; +import 'package:Prism/ui/widgets/home/core/headingChipBar.dart'; +import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; -import 'package:Prism/logger/logger.dart'; class FollowersScreen extends StatefulWidget { final List? arguments; diff --git a/lib/ui/pages/profile/profileScreen.dart b/lib/ui/pages/profile/profileScreen.dart index 8b8ee24b..3c1b1bcc 100644 --- a/lib/ui/pages/profile/profileScreen.dart +++ b/lib/ui/pages/profile/profileScreen.dart @@ -1,44 +1,33 @@ import 'dart:async'; import 'dart:convert'; -import 'package:Prism/auth/google_auth.dart'; -import 'package:Prism/data/favourites/provider/favouriteProvider.dart'; -import 'package:Prism/data/favourites/provider/favouriteSetupProvider.dart'; + import 'package:Prism/data/profile/wallpaper/getUserProfile.dart'; -import 'package:Prism/data/profile/wallpaper/profileSetupProvider.dart'; -import 'package:Prism/data/profile/wallpaper/profileWallProvider.dart'; import 'package:Prism/gitkey.dart'; +import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/global/svgAssets.dart'; import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/router.dart'; -import 'package:Prism/theme/jam_icons_icons.dart'; import 'package:Prism/routes/routing_constants.dart'; +import 'package:Prism/theme/jam_icons_icons.dart'; +import 'package:Prism/theme/toasts.dart' as toasts; import 'package:Prism/ui/widgets/animated/loader.dart'; -import 'package:Prism/ui/widgets/popup/editProfilePanel.dart'; -import 'package:Prism/ui/widgets/popup/linkPopUp.dart'; +import 'package:Prism/ui/widgets/home/core/bottomNavBar.dart'; +import 'package:Prism/ui/widgets/home/core/inheritedScrollControllerProvider.dart'; import 'package:Prism/ui/widgets/popup/noLoadLinkPopUp.dart'; import 'package:Prism/ui/widgets/profile/aboutList.dart'; +import 'package:Prism/ui/widgets/profile/downloadList.dart'; import 'package:Prism/ui/widgets/profile/drawerWidget.dart'; import 'package:Prism/ui/widgets/profile/generalList.dart'; -import 'package:Prism/ui/widgets/profile/downloadList.dart'; import 'package:Prism/ui/widgets/profile/premiumList.dart'; -import 'package:Prism/ui/widgets/home/core/bottomNavBar.dart'; -import 'package:Prism/ui/widgets/home/core/inheritedScrollControllerProvider.dart'; -import 'package:Prism/ui/widgets/profile/uploadedWallsLoader.dart'; -import 'package:Prism/ui/widgets/profile/uploadedSetupsLoader.dart'; import 'package:Prism/ui/widgets/profile/userList.dart'; import 'package:Prism/ui/widgets/profile/userProfileLoader.dart'; import 'package:Prism/ui/widgets/profile/userProfileSetupLoader.dart'; import 'package:cached_network_image/cached_network_image.dart'; +import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flare_flutter/flare_actor.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:Prism/main.dart' as main; -import 'package:provider/provider.dart'; -import 'package:Prism/global/globals.dart' as globals; import 'package:flutter_svg/flutter_svg.dart'; -import 'package:Prism/global/svgAssets.dart'; -import 'package:cloud_firestore/cloud_firestore.dart'; -import 'package:intl/intl.dart'; -import 'package:Prism/theme/toasts.dart' as toasts; import 'package:http/http.dart' as http; import 'package:url_launcher/url_launcher.dart'; diff --git a/lib/ui/pages/profile/profileSetupViewScreen.dart b/lib/ui/pages/profile/profileSetupViewScreen.dart index d80c4740..8a87518f 100644 --- a/lib/ui/pages/profile/profileSetupViewScreen.dart +++ b/lib/ui/pages/profile/profileSetupViewScreen.dart @@ -1,35 +1,35 @@ import 'dart:ui'; +import 'package:Prism/analytics/analytics_service.dart'; import 'package:Prism/data/favourites/provider/favouriteSetupProvider.dart'; import 'package:Prism/data/informatics/dataManager.dart'; import 'package:Prism/data/profile/wallpaper/profileSetupProvider.dart'; import 'package:Prism/data/share/createDynamicLink.dart'; +import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/global/svgAssets.dart'; import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/router.dart'; import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; +import 'package:Prism/theme/toasts.dart' as toasts; import 'package:Prism/ui/widgets/animated/favouriteIcon.dart'; +import 'package:Prism/ui/widgets/animated/showUp.dart'; import 'package:Prism/ui/widgets/home/core/collapsedPanel.dart'; import 'package:Prism/ui/widgets/menuButton/downloadButton.dart'; import 'package:Prism/ui/widgets/menuButton/setWallpaperButton.dart'; +import 'package:Prism/ui/widgets/popup/signInPopUp.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:device_apps/device_apps.dart'; +import 'package:device_info/device_info.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:provider/provider.dart'; -import 'package:sliding_up_panel/sliding_up_panel.dart'; -import 'package:url_launcher/url_launcher.dart'; -import 'package:Prism/global/globals.dart' as globals; import 'package:flutter_svg/flutter_svg.dart'; -import 'package:Prism/global/svgAssets.dart'; -import 'package:Prism/analytics/analytics_service.dart'; -import 'package:Prism/ui/widgets/animated/showUp.dart'; -import 'package:Prism/ui/widgets/popup/signInPopUp.dart'; -import 'package:permission_handler/permission_handler.dart'; import 'package:gallery_saver/gallery_saver.dart'; -import 'package:device_info/device_info.dart'; -import 'package:Prism/theme/toasts.dart' as toasts; import 'package:hive/hive.dart'; +import 'package:permission_handler/permission_handler.dart'; +import 'package:provider/provider.dart'; +import 'package:sliding_up_panel/sliding_up_panel.dart'; +import 'package:url_launcher/url_launcher.dart'; class ProfileSetupViewScreen extends StatefulWidget { final List? arguments; @@ -1752,7 +1752,6 @@ class ModifiedDownloadButton extends StatelessWidget { link: Provider.of(context, listen: false) .profileSetups![index!]["wallpaper_url"] .toString(), - colorChanged: false, ) : GestureDetector( onTap: () async { diff --git a/lib/ui/pages/profile/profileWallViewScreen.dart b/lib/ui/pages/profile/profileWallViewScreen.dart index 1abaa88a..1cd86af2 100644 --- a/lib/ui/pages/profile/profileWallViewScreen.dart +++ b/lib/ui/pages/profile/profileWallViewScreen.dart @@ -1,13 +1,19 @@ import 'dart:io'; +import 'dart:isolate'; +import 'dart:math'; import 'dart:typed_data'; -import 'dart:ui'; +import 'dart:ui' as ui; + import 'package:Prism/data/informatics/dataManager.dart'; import 'package:Prism/data/profile/wallpaper/profileWallProvider.dart'; +import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; +import 'package:Prism/main.dart' as main; import 'package:Prism/routes/router.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; import 'package:Prism/ui/widgets/home/core/collapsedPanel.dart'; -import 'package:Prism/ui/widgets/home/wallpapers/clockOverlay.dart'; import 'package:Prism/ui/widgets/home/core/colorBar.dart'; +import 'package:Prism/ui/widgets/home/wallpapers/clockOverlay.dart'; import 'package:Prism/ui/widgets/menuButton/downloadButton.dart'; import 'package:Prism/ui/widgets/menuButton/editButton.dart'; import 'package:Prism/ui/widgets/menuButton/favWallpaperButton.dart'; @@ -15,14 +21,14 @@ import 'package:Prism/ui/widgets/menuButton/setWallpaperButton.dart'; import 'package:Prism/ui/widgets/menuButton/shareButton.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; +import 'package:flutter_downloader/flutter_downloader.dart'; import 'package:palette_generator/palette_generator.dart'; import 'package:provider/provider.dart'; -import 'package:screenshot/screenshot.dart'; +import 'package:path_provider/path_provider.dart'; +import 'package:Prism/theme/toasts.dart' as toasts; import 'package:sliding_up_panel/sliding_up_panel.dart'; -import 'package:Prism/main.dart' as main; -import 'package:Prism/global/globals.dart' as globals; -import 'package:Prism/logger/logger.dart'; class ProfileWallViewScreen extends StatefulWidget { final List? arguments; @@ -41,8 +47,15 @@ class _ProfileWallViewScreenState extends State } final GlobalKey _scaffoldKey = GlobalKey(); + final GlobalKey genKey = GlobalKey(); late int index; late String thumb; + String? path; + int progress = 0; + bool downloading = false; + bool applying = false; + bool downloaded = false; + final ReceivePort _port = ReceivePort(); bool isLoading = true; late PaletteGenerator paletteGenerator; List? colors; @@ -51,7 +64,6 @@ class _ProfileWallViewScreenState extends State String? downloadLinkBackwards; late File _imageFile; bool screenshotTaken = false; - ScreenshotController screenshotController = ScreenshotController(); PanelController panelController = PanelController(); late AnimationController shakeController; bool panelClosed = true; @@ -106,10 +118,65 @@ class _ProfileWallViewScreenState extends State } } + Future _capturePng() async { + final RenderRepaintBoundary boundary = + genKey.currentContext?.findRenderObject() as RenderRepaintBoundary; + final ui.Image image = await boundary.toImage(pixelRatio: 3); + final directory = (await getTemporaryDirectory()).path; + final ByteData? byteData = + await image.toByteData(format: ui.ImageByteFormat.png); + final Uint8List pngBytes = byteData!.buffer.asUint8List(); + final r = Random(); + String rNum = ""; + for (var i = 0; i < 6; i++) { + rNum = "$rNum${r.nextInt(9)}"; + } + final File imgFile = File('$directory/photo_$rNum.png'); + await imgFile.writeAsBytes(pngBytes); + logger.d(imgFile.path); + return imgFile; + } + + void setupDownloader() { + initPlatformState(); + ui.IsolateNameServer.registerPortWithName( + _port.sendPort, 'downloader_send_port'); + _port.listen((dynamic data) { + // String id = data[0]; + final DownloadTaskStatus status = data[1] as DownloadTaskStatus; + if (status == const DownloadTaskStatus(3)) { + setState(() { + downloaded = true; + }); + toasts.codeSend("Wall Downloaded in Downloads!"); + } + setState(() { + if (status == const DownloadTaskStatus(2)) { + downloading = true; + progress = data[2] as int; + } else { + downloading = false; + progress = 0; + } + }); + }); + FlutterDownloader.registerCallback(callback); + } + + void _setPath() async { + path = (await _findLocalPath())!; + final savedDir = Directory(path ?? ""); + final bool hasExisted = await savedDir.exists(); + if (!hasExisted) { + savedDir.create(); + } + } + @override void initState() { shakeController = AnimationController( duration: const Duration(milliseconds: 300), vsync: this); + setupDownloader(); index = widget.arguments![0] as int; thumb = widget.arguments![1].toString(); isLoading = true; @@ -128,9 +195,37 @@ class _ProfileWallViewScreenState extends State super.initState(); } + Future initPlatformState() async { + _setPath(); + if (!mounted) return; + } + + Future _findLocalPath() async { + String? externalStorageDirPath; + if (Platform.isAndroid) { + try { + externalStorageDirPath = "/storage/emulated/0/Download"; + } catch (e) { + final directory = await getExternalStorageDirectory(); + externalStorageDirPath = directory?.path; + } + } else if (Platform.isIOS) { + externalStorageDirPath = + (await getApplicationDocumentsDirectory()).absolute.path; + } + return externalStorageDirPath; + } + + static void callback(String id, DownloadTaskStatus status, int progress) { + final SendPort? send = + ui.IsolateNameServer.lookupPortByName('downloader_send_port'); + send?.send([id, status, progress]); + } + @override void dispose() { shakeController.dispose(); + ui.IsolateNameServer.removePortNameMapping('downloader_send_port'); super.dispose(); } @@ -139,11 +234,11 @@ class _ProfileWallViewScreenState extends State final Animation offsetAnimation = Tween(begin: 0.0, end: 48.0) .chain(CurveTween(curve: Curves.easeOutCubic)) .animate(shakeController) - ..addStatusListener((status) { - if (status == AnimationStatus.completed) { - shakeController.reverse(); - } - }); + ..addStatusListener((status) { + if (status == AnimationStatus.completed) { + shakeController.reverse(); + } + }); return WillPopScope( onWillPop: onWillPop, child: Scaffold( @@ -156,41 +251,6 @@ class _ProfileWallViewScreenState extends State }); if (panelClosed) { logger.d('Screenshot Starting'); - if (colorChanged) { - screenshotController - .capture( - pixelRatio: 3, - delay: const Duration(milliseconds: 10), - ) - .then((Uint8List? image) async { - setState(() { - _imageFile = File.fromRawPath(image!); - screenshotTaken = true; - panelClosed = false; - }); - logger.d('Screenshot Taken'); - }).catchError((onError) { - logger.d(onError.toString()); - }); - } else { - main.prefs.get('optimisedWallpapers') as bool? ?? true - ? screenshotController - .capture( - pixelRatio: 3, - delay: const Duration(milliseconds: 10), - ) - .then((Uint8List? image) async { - setState(() { - _imageFile = File.fromRawPath(image!); - screenshotTaken = true; - panelClosed = false; - }); - logger.d('Screenshot Taken'); - }).catchError((onError) { - logger.d(onError.toString()); - }) - : logger.d("Wallpaper Optimisation is disabled!"); - } } }, onPanelClosed: () { @@ -224,7 +284,7 @@ class _ProfileWallViewScreenState extends State child: ClipRRect( borderRadius: BorderRadius.circular(30), child: BackdropFilter( - filter: ImageFilter.blur(sigmaX: 12.0, sigmaY: 12.0), + filter: ui.ImageFilter.blur(sigmaX: 12.0, sigmaY: 12.0), child: AnimatedContainer( duration: const Duration(milliseconds: 750), decoration: BoxDecoration( @@ -515,25 +575,33 @@ class _ProfileWallViewScreenState extends State child: Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ - DownloadButton( + DownloadButtonNew( colorChanged: colorChanged, - link: screenshotTaken - ? _imageFile.path - : Provider.of(context, - listen: false) - .profileWalls![index] - .data()["wallpaper_url"] - .toString(), + screenshotCallback: () async { + final File file = await _capturePng(); + return file; + }, + loading: downloading, + path: path ?? "", + progress: + (progress / 100.0).clamp(0, 100).toInt(), + link: Provider.of(context, + listen: false) + .profileWalls![index] + .data()["wallpaper_url"] + .toString(), ), SetWallpaperButton( colorChanged: colorChanged, - url: screenshotTaken - ? _imageFile.path - : Provider.of(context, - listen: false) - .profileWalls![index] - .data()["wallpaper_url"] - .toString(), + screenshotCallback: () async { + final File file = await _capturePng(); + return file; + }, + url: Provider.of(context, + listen: false) + .profileWalls![index] + .data()["wallpaper_url"] + .toString(), ), FavouriteWallpaperButton( id: Provider.of(context, @@ -624,8 +692,9 @@ class _ProfileWallViewScreenState extends State .profileWalls![index] .data()["wallpaper_url"] .toString(), - imageBuilder: (context, imageProvider) => Screenshot( - controller: screenshotController, + imageBuilder: (context, imageProvider) => + RepaintBoundary( + key: genKey, child: Container( margin: EdgeInsets.symmetric( vertical: offsetAnimation.value * 1.25, diff --git a/lib/ui/pages/profile/reviewScreen.dart b/lib/ui/pages/profile/reviewScreen.dart index 59177f74..10ea1b0c 100644 --- a/lib/ui/pages/profile/reviewScreen.dart +++ b/lib/ui/pages/profile/reviewScreen.dart @@ -1,26 +1,26 @@ import 'dart:ui'; -import 'package:Prism/routes/routing_constants.dart'; -import 'package:flutter/material.dart'; +import 'package:Prism/analytics/analytics_service.dart'; +import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; +import 'package:Prism/main.dart' as main; import 'package:Prism/routes/router.dart'; -import 'package:cloud_firestore/cloud_firestore.dart'; +import 'package:Prism/routes/routing_constants.dart'; +import 'package:Prism/theme/jam_icons_icons.dart'; import 'package:Prism/theme/toasts.dart' as toasts; -import 'package:Prism/main.dart' as main; import 'package:Prism/ui/widgets/animated/loader.dart'; -import 'package:Prism/theme/jam_icons_icons.dart'; -import 'package:intl/intl.dart'; +import 'package:animations/animations.dart'; import 'package:cached_network_image/cached_network_image.dart'; -import 'package:photo_view/photo_view.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:permission_handler/permission_handler.dart'; -import 'package:gallery_saver/gallery_saver.dart'; +import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:device_info/device_info.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:Prism/analytics/analytics_service.dart'; -import 'package:animations/animations.dart'; +import 'package:gallery_saver/gallery_saver.dart'; +import 'package:intl/intl.dart'; +import 'package:permission_handler/permission_handler.dart'; +import 'package:photo_view/photo_view.dart'; import 'package:url_launcher/url_launcher.dart'; -import 'package:Prism/global/globals.dart' as globals; -import 'package:Prism/logger/logger.dart'; class ReviewScreen extends StatefulWidget { @override diff --git a/lib/ui/pages/profile/settings.dart b/lib/ui/pages/profile/settings.dart index 2a5a0f8a..adabbad8 100644 --- a/lib/ui/pages/profile/settings.dart +++ b/lib/ui/pages/profile/settings.dart @@ -1,21 +1,21 @@ +import 'package:Prism/data/favourites/provider/favouriteProvider.dart'; +import 'package:Prism/data/favourites/provider/favouriteSetupProvider.dart'; import 'package:Prism/data/notifications/model/inAppNotifModel.dart'; +import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; +import 'package:Prism/main.dart' as main; import 'package:Prism/routes/router.dart'; +import 'package:Prism/routes/routing_constants.dart'; +import 'package:Prism/theme/jam_icons_icons.dart'; +import 'package:Prism/theme/toasts.dart' as toasts; import 'package:Prism/ui/widgets/home/core/headingChipBar.dart'; +import 'package:Prism/ui/widgets/popup/signInPopUp.dart'; +import 'package:animations/animations.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; -import 'package:Prism/main.dart' as main; -import 'package:Prism/theme/jam_icons_icons.dart'; -import 'package:Prism/ui/widgets/popup/signInPopUp.dart'; -import 'package:Prism/routes/routing_constants.dart'; -import 'package:Prism/theme/toasts.dart' as toasts; import 'package:flutter_cache_manager/flutter_cache_manager.dart'; import 'package:hive/hive.dart'; import 'package:provider/provider.dart'; -import 'package:Prism/data/favourites/provider/favouriteProvider.dart'; -import 'package:Prism/data/favourites/provider/favouriteSetupProvider.dart'; -import 'package:animations/animations.dart'; -import 'package:Prism/global/globals.dart' as globals; -import 'package:Prism/logger/logger.dart'; class SettingsScreen extends StatefulWidget { const SettingsScreen({ @@ -27,7 +27,6 @@ class SettingsScreen extends StatefulWidget { } class _SettingsScreenState extends State { - bool optWall = (main.prefs.get('optimisedWallpapers') ?? true) as bool; bool followers = (main.prefs.get('followersTab') ?? true) as bool; int categories = (main.prefs.get('WHcategories') ?? 100) as int; int purity = (main.prefs.get('WHpurity') ?? 100) as int; @@ -159,34 +158,6 @@ class _SettingsScreenState extends State { await Hive.openBox('setups'); toasts.codeSend("Cleared cache!"); }), - // SwitchListTile( - // activeColor: Theme.of(context).errorColor, - // secondary: const Icon( - // JamIcons.dashboard, - // ), - // value: optWall, - // title: Text( - // "Wallpaper Optimisation", - // style: TextStyle( - // color: Theme.of(context).accentColor, - // fontWeight: FontWeight.w500, - // fontFamily: "Proxima Nova"), - // ), - // subtitle: optWall - // ? const Text( - // "Disabling this might lead to High Internet Usage", - // style: TextStyle(fontSize: 12), - // ) - // : const Text( - // "Enable this to optimise Wallpapers according to your device", - // style: TextStyle(fontSize: 12), - // ), - // onChanged: (bool value) async { - // setState(() { - // optWall = value; - // }); - // main.prefs.put('optimisedWallpapers', value); - // }), SwitchListTile( activeColor: Theme.of(context).errorColor, secondary: const Icon( diff --git a/lib/ui/pages/profile/sharePrismScreen.dart b/lib/ui/pages/profile/sharePrismScreen.dart index b10e3f09..e0fca2ef 100644 --- a/lib/ui/pages/profile/sharePrismScreen.dart +++ b/lib/ui/pages/profile/sharePrismScreen.dart @@ -1,11 +1,11 @@ import 'package:Prism/data/share/createDynamicLink.dart'; +import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/router.dart'; +import 'package:Prism/theme/toasts.dart' as toasts; import 'package:flare_flutter/flare_actor.dart'; import 'package:flutter/material.dart'; import 'package:share/share.dart'; -import 'package:Prism/theme/toasts.dart' as toasts; -import 'package:Prism/global/globals.dart' as globals; -import 'package:Prism/logger/logger.dart'; class SharePrismScreen extends StatefulWidget { @override diff --git a/lib/ui/pages/profile/themeView.dart b/lib/ui/pages/profile/themeView.dart index c6fd3222..a8b3813e 100644 --- a/lib/ui/pages/profile/themeView.dart +++ b/lib/ui/pages/profile/themeView.dart @@ -1,5 +1,7 @@ +import 'package:Prism/analytics/analytics_service.dart'; import 'package:Prism/global/svgAssets.dart'; import 'package:Prism/logger/logger.dart'; +import 'package:Prism/main.dart' as main; import 'package:Prism/routes/router.dart'; import 'package:Prism/theme/darkThemeModel.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; @@ -10,8 +12,6 @@ import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:provider/provider.dart'; -import 'package:Prism/main.dart' as main; -import 'package:Prism/analytics/analytics_service.dart'; List accentColors = [ const Color(0xFFE57697), @@ -95,6 +95,7 @@ class _ThemeViewState extends State { onWillPop: onWillPop, child: Scaffold( appBar: AppBar( + backgroundColor: Theme.of(context).backgroundColor, automaticallyImplyLeading: false, actions: [ IconButton( diff --git a/lib/ui/pages/profile/userProfileSetupViewScreen.dart b/lib/ui/pages/profile/userProfileSetupViewScreen.dart index 63b75907..676c6025 100644 --- a/lib/ui/pages/profile/userProfileSetupViewScreen.dart +++ b/lib/ui/pages/profile/userProfileSetupViewScreen.dart @@ -1,32 +1,32 @@ import 'dart:ui'; +import 'package:Prism/analytics/analytics_service.dart'; +import 'package:Prism/data/favourites/provider/favouriteSetupProvider.dart'; import 'package:Prism/data/informatics/dataManager.dart'; import 'package:Prism/data/profile/wallpaper/getUserProfile.dart' as user_data; import 'package:Prism/data/share/createDynamicLink.dart'; +import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/global/svgAssets.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/router.dart'; import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; import 'package:Prism/ui/widgets/animated/favouriteIcon.dart'; +import 'package:Prism/ui/widgets/animated/showUp.dart'; import 'package:Prism/ui/widgets/home/core/collapsedPanel.dart'; import 'package:Prism/ui/widgets/home/wallpapers/clockSetupOverlay.dart'; import 'package:Prism/ui/widgets/menuButton/downloadButton.dart'; import 'package:Prism/ui/widgets/menuButton/setWallpaperButton.dart'; +import 'package:Prism/ui/widgets/popup/signInPopUp.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:device_apps/device_apps.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:hive/hive.dart'; import 'package:provider/provider.dart'; import 'package:sliding_up_panel/sliding_up_panel.dart'; import 'package:url_launcher/url_launcher.dart'; -import 'package:Prism/global/globals.dart' as globals; -import 'package:flutter_svg/flutter_svg.dart'; -import 'package:Prism/global/svgAssets.dart'; -import 'package:Prism/data/favourites/provider/favouriteSetupProvider.dart'; -import 'package:Prism/analytics/analytics_service.dart'; -import 'package:Prism/ui/widgets/animated/showUp.dart'; -import 'package:Prism/ui/widgets/popup/signInPopUp.dart'; -import 'package:hive/hive.dart'; -import 'package:Prism/logger/logger.dart'; class UserProfileSetupViewScreen extends StatefulWidget { final List? arguments; @@ -1874,7 +1874,6 @@ class ModifiedDownloadButton extends StatelessWidget { .userProfileSetups![index!] .data()["wallpaper_url"] .toString(), - colorChanged: false, ) : GestureDetector( onTap: () async { diff --git a/lib/ui/pages/profile/userProfileWallViewScreen.dart b/lib/ui/pages/profile/userProfileWallViewScreen.dart index 1876a362..d870fe81 100644 --- a/lib/ui/pages/profile/userProfileWallViewScreen.dart +++ b/lib/ui/pages/profile/userProfileWallViewScreen.dart @@ -1,13 +1,19 @@ import 'dart:io'; +import 'dart:isolate'; +import 'dart:math'; import 'dart:typed_data'; -import 'dart:ui'; +import 'dart:ui' as ui; + import 'package:Prism/data/informatics/dataManager.dart'; import 'package:Prism/data/profile/wallpaper/getUserProfile.dart' as user_data; +import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; +import 'package:Prism/main.dart' as main; import 'package:Prism/routes/router.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; import 'package:Prism/ui/widgets/home/core/collapsedPanel.dart'; -import 'package:Prism/ui/widgets/home/wallpapers/clockOverlay.dart'; import 'package:Prism/ui/widgets/home/core/colorBar.dart'; +import 'package:Prism/ui/widgets/home/wallpapers/clockOverlay.dart'; import 'package:Prism/ui/widgets/menuButton/downloadButton.dart'; import 'package:Prism/ui/widgets/menuButton/editButton.dart'; import 'package:Prism/ui/widgets/menuButton/favWallpaperButton.dart'; @@ -15,14 +21,14 @@ import 'package:Prism/ui/widgets/menuButton/setWallpaperButton.dart'; import 'package:Prism/ui/widgets/menuButton/shareButton.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; +import 'package:flutter_downloader/flutter_downloader.dart'; import 'package:palette_generator/palette_generator.dart'; import 'package:provider/provider.dart'; -import 'package:screenshot/screenshot.dart'; +import 'package:path_provider/path_provider.dart'; +import 'package:Prism/theme/toasts.dart' as toasts; import 'package:sliding_up_panel/sliding_up_panel.dart'; -import 'package:Prism/main.dart' as main; -import 'package:Prism/global/globals.dart' as globals; -import 'package:Prism/logger/logger.dart'; class UserProfileWallViewScreen extends StatefulWidget { final List? arguments; @@ -42,8 +48,15 @@ class _UserProfileWallViewScreenState extends State } final GlobalKey _scaffoldKey = GlobalKey(); + final GlobalKey genKey = GlobalKey(); late int index; late String thumb; + String? path; + int progress = 0; + bool downloading = false; + bool applying = false; + bool downloaded = false; + final ReceivePort _port = ReceivePort(); bool isLoading = true; late PaletteGenerator paletteGenerator; List? colors; @@ -52,7 +65,6 @@ class _UserProfileWallViewScreenState extends State String? downloadLinkBackwards; late File _imageFile; bool screenshotTaken = false; - ScreenshotController screenshotController = ScreenshotController(); PanelController panelController = PanelController(); late AnimationController shakeController; bool panelClosed = true; @@ -107,11 +119,66 @@ class _UserProfileWallViewScreenState extends State } } + Future _capturePng() async { + final RenderRepaintBoundary boundary = + genKey.currentContext?.findRenderObject() as RenderRepaintBoundary; + final ui.Image image = await boundary.toImage(pixelRatio: 3); + final directory = (await getTemporaryDirectory()).path; + final ByteData? byteData = + await image.toByteData(format: ui.ImageByteFormat.png); + final Uint8List pngBytes = byteData!.buffer.asUint8List(); + final r = Random(); + String rNum = ""; + for (var i = 0; i < 6; i++) { + rNum = "$rNum${r.nextInt(9)}"; + } + final File imgFile = File('$directory/photo_$rNum.png'); + await imgFile.writeAsBytes(pngBytes); + logger.d(imgFile.path); + return imgFile; + } + + void setupDownloader() { + initPlatformState(); + ui.IsolateNameServer.registerPortWithName( + _port.sendPort, 'downloader_send_port'); + _port.listen((dynamic data) { + // String id = data[0]; + final DownloadTaskStatus status = data[1] as DownloadTaskStatus; + if (status == const DownloadTaskStatus(3)) { + setState(() { + downloaded = true; + }); + toasts.codeSend("Wall Downloaded in Downloads!"); + } + setState(() { + if (status == const DownloadTaskStatus(2)) { + downloading = true; + progress = data[2] as int; + } else { + downloading = false; + progress = 0; + } + }); + }); + FlutterDownloader.registerCallback(callback); + } + + void _setPath() async { + path = (await _findLocalPath())!; + final savedDir = Directory(path ?? ""); + final bool hasExisted = await savedDir.exists(); + if (!hasExisted) { + savedDir.create(); + } + } + @override void initState() { super.initState(); shakeController = AnimationController( duration: const Duration(milliseconds: 300), vsync: this); + setupDownloader(); index = widget.arguments![0] as int; thumb = widget.arguments![1].toString(); isLoading = true; @@ -132,9 +199,37 @@ class _UserProfileWallViewScreenState extends State _updatePaletteGenerator(); } + Future initPlatformState() async { + _setPath(); + if (!mounted) return; + } + + Future _findLocalPath() async { + String? externalStorageDirPath; + if (Platform.isAndroid) { + try { + externalStorageDirPath = "/storage/emulated/0/Download"; + } catch (e) { + final directory = await getExternalStorageDirectory(); + externalStorageDirPath = directory?.path; + } + } else if (Platform.isIOS) { + externalStorageDirPath = + (await getApplicationDocumentsDirectory()).absolute.path; + } + return externalStorageDirPath; + } + + static void callback(String id, DownloadTaskStatus status, int progress) { + final SendPort? send = + ui.IsolateNameServer.lookupPortByName('downloader_send_port'); + send?.send([id, status, progress]); + } + @override void dispose() { shakeController.dispose(); + ui.IsolateNameServer.removePortNameMapping('downloader_send_port'); super.dispose(); } @@ -143,11 +238,11 @@ class _UserProfileWallViewScreenState extends State final Animation offsetAnimation = Tween(begin: 0.0, end: 48.0) .chain(CurveTween(curve: Curves.easeOutCubic)) .animate(shakeController) - ..addStatusListener((status) { - if (status == AnimationStatus.completed) { - shakeController.reverse(); - } - }); + ..addStatusListener((status) { + if (status == AnimationStatus.completed) { + shakeController.reverse(); + } + }); return WillPopScope( onWillPop: onWillPop, child: Scaffold( @@ -160,41 +255,6 @@ class _UserProfileWallViewScreenState extends State }); if (panelClosed) { logger.d('Screenshot Starting'); - if (colorChanged) { - screenshotController - .capture( - pixelRatio: 3, - delay: const Duration(milliseconds: 10), - ) - .then((Uint8List? image) async { - setState(() { - _imageFile = File.fromRawPath(image!); - screenshotTaken = true; - panelClosed = false; - }); - logger.d('Screenshot Taken'); - }).catchError((onError) { - logger.d(onError.toString()); - }); - } else { - main.prefs.get('optimisedWallpapers') as bool? ?? true - ? screenshotController - .capture( - pixelRatio: 3, - delay: const Duration(milliseconds: 10), - ) - .then((Uint8List? image) async { - setState(() { - _imageFile = File.fromRawPath(image!); - screenshotTaken = true; - panelClosed = false; - }); - logger.d('Screenshot Taken'); - }).catchError((onError) { - logger.d(onError.toString()); - }) - : logger.d("Wallpaper Optimisation is disabled!"); - } } }, onPanelClosed: () { @@ -228,7 +288,7 @@ class _UserProfileWallViewScreenState extends State child: ClipRRect( borderRadius: BorderRadius.circular(30), child: BackdropFilter( - filter: ImageFilter.blur(sigmaX: 12.0, sigmaY: 12.0), + filter: ui.ImageFilter.blur(sigmaX: 12.0, sigmaY: 12.0), child: AnimatedContainer( duration: const Duration(milliseconds: 750), decoration: BoxDecoration( @@ -525,27 +585,34 @@ class _UserProfileWallViewScreenState extends State child: Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ - DownloadButton( + DownloadButtonNew( colorChanged: colorChanged, - link: screenshotTaken - ? _imageFile.path - : Provider.of< - user_data - .UserProfileProvider>(context) + screenshotCallback: () async { + final File file = await _capturePng(); + return file; + }, + loading: downloading, + path: path ?? "", + progress: + (progress / 100.0).clamp(0, 100).toInt(), + link: + Provider.of( + context) .userProfileWalls![index] .data()["wallpaper_url"] .toString(), ), SetWallpaperButton( colorChanged: colorChanged, - url: screenshotTaken - ? _imageFile.path - : Provider.of< - user_data - .UserProfileProvider>(context) - .userProfileWalls![index] - .data()["wallpaper_url"] - .toString(), + screenshotCallback: () async { + final File file = await _capturePng(); + return file; + }, + url: Provider.of( + context) + .userProfileWalls![index] + .data()["wallpaper_url"] + .toString(), ), FavouriteWallpaperButton( id: Provider.of( @@ -639,8 +706,9 @@ class _UserProfileWallViewScreenState extends State .userProfileWalls![index] .data()["wallpaper_url"] .toString(), - imageBuilder: (context, imageProvider) => Screenshot( - controller: screenshotController, + imageBuilder: (context, imageProvider) => + RepaintBoundary( + key: genKey, child: Container( margin: EdgeInsets.symmetric( vertical: offsetAnimation.value * 1.25, diff --git a/lib/ui/pages/search/searchScreen.dart b/lib/ui/pages/search/searchScreen.dart index 95ce4e57..2191e6f8 100644 --- a/lib/ui/pages/search/searchScreen.dart +++ b/lib/ui/pages/search/searchScreen.dart @@ -1,10 +1,11 @@ +import 'package:Prism/data/pexels/provider/pexelsWithoutProvider.dart' as pdata; import 'package:Prism/data/wallhaven/provider/wallhavenWithoutProvider.dart' as wdata; -import 'package:Prism/data/pexels/provider/pexelsWithoutProvider.dart' as pdata; import 'package:Prism/global/searchProviderMenu.dart'; import 'package:Prism/global/svgAssets.dart'; +import 'package:Prism/logger/logger.dart'; +import 'package:Prism/main.dart' as main; import 'package:Prism/routes/router.dart'; -import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; import 'package:Prism/theme/themeModeProvider.dart'; import 'package:Prism/ui/widgets/home/core/bottomNavBar.dart'; @@ -13,8 +14,6 @@ import 'package:Prism/ui/widgets/search/searchGrid.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:provider/provider.dart'; -import 'package:Prism/main.dart' as main; -import 'package:Prism/logger/logger.dart'; class SearchScreen extends StatefulWidget { @override @@ -68,6 +67,43 @@ class _SearchScreenState extends State { 'Summer', 'Titan', 'White', + '8bit', + 'Fantasy', + 'Fashion', + 'Fitness', + 'Fruits', + 'Futuristic', + 'Gems', + 'Graffiti', + 'Halloween', + 'Hipster', + 'Holidays', + 'Industry', + 'Interiors', + 'Kids', + 'Landscapes', + 'Macro', + 'Nature', + 'Night', + 'People', + 'Plants', + 'Portraits', + 'Retro', + 'Robots', + 'Science', + 'Sports', + 'Technics', + 'Textures', + 'Transport', + 'Travel', + 'Wedding', + 'Zombies', + 'Cute', + 'Fairy', + 'Fairytale', + 'Funny', + 'Geometric', + 'Graphic', ]; late bool isSubmitted; TextEditingController searchController = TextEditingController(); @@ -93,6 +129,7 @@ class _SearchScreenState extends State { child: Scaffold( backgroundColor: Theme.of(context).primaryColor, appBar: AppBar( + backgroundColor: Theme.of(context).backgroundColor, automaticallyImplyLeading: false, titleSpacing: 0, title: Row( @@ -109,7 +146,9 @@ class _SearchScreenState extends State { Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(500), - color: Theme.of(context).hintColor), + color: Theme.of(context) + .hintColor + .withOpacity(0.05)), child: TextField( cursorColor: Theme.of(context).errorColor, style: Theme.of(context) @@ -169,7 +208,7 @@ class _SearchScreenState extends State { onCanceled: () { logger.d('You have not choosed anything'); }, - color: Theme.of(context).hintColor, + color: Theme.of(context).backgroundColor, tooltip: 'Providers', onSelected: (dynamic choice) { setState(() { @@ -243,6 +282,7 @@ class _SearchScreenState extends State { Padding( padding: const EdgeInsets.fromLTRB(5, 0, 2, 0), child: ActionChip( + elevation: 0, pressElevation: 5, padding: const EdgeInsets.fromLTRB(14, 11, 14, 11), @@ -250,7 +290,9 @@ class _SearchScreenState extends State { searchController.text.toLowerCase() == tags[index].toLowerCase() ? Theme.of(context).accentColor - : Theme.of(context).hintColor, + : Theme.of(context) + .hintColor + .withOpacity(0.1), label: Text(tags[index], style: Theme.of(context) .textTheme diff --git a/lib/ui/pages/search/searchWallpaperScreen.dart b/lib/ui/pages/search/searchWallpaperScreen.dart index 1a969fea..ebf021a4 100644 --- a/lib/ui/pages/search/searchWallpaperScreen.dart +++ b/lib/ui/pages/search/searchWallpaperScreen.dart @@ -1,14 +1,20 @@ import 'dart:io'; +import 'dart:isolate'; +import 'dart:math'; import 'dart:typed_data'; -import 'dart:ui'; +import 'dart:ui' as ui; + import 'package:Prism/data/pexels/provider/pexelsWithoutProvider.dart' as pdata; import 'package:Prism/data/wallhaven/provider/wallhavenWithoutProvider.dart' as wdata; +import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; +import 'package:Prism/main.dart' as main; import 'package:Prism/routes/router.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; import 'package:Prism/ui/widgets/home/core/collapsedPanel.dart'; -import 'package:Prism/ui/widgets/home/wallpapers/clockOverlay.dart'; import 'package:Prism/ui/widgets/home/core/colorBar.dart'; +import 'package:Prism/ui/widgets/home/wallpapers/clockOverlay.dart'; import 'package:Prism/ui/widgets/menuButton/downloadButton.dart'; import 'package:Prism/ui/widgets/menuButton/editButton.dart'; import 'package:Prism/ui/widgets/menuButton/favWallpaperButton.dart'; @@ -16,14 +22,14 @@ import 'package:Prism/ui/widgets/menuButton/setWallpaperButton.dart'; import 'package:Prism/ui/widgets/menuButton/shareButton.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; +import 'package:flutter_downloader/flutter_downloader.dart'; import 'package:palette_generator/palette_generator.dart'; +import 'package:path_provider/path_provider.dart'; +import 'package:Prism/theme/toasts.dart' as toasts; import 'package:sliding_up_panel/sliding_up_panel.dart'; -import 'package:screenshot/screenshot.dart'; import 'package:url_launcher/url_launcher.dart'; -import 'package:Prism/main.dart' as main; -import 'package:Prism/global/globals.dart' as globals; -import 'package:Prism/logger/logger.dart'; class SearchWallpaperScreen extends StatefulWidget { final List? arguments; @@ -41,9 +47,16 @@ class _SearchWallpaperScreenState extends State } final GlobalKey _scaffoldKey = GlobalKey(); + final GlobalKey genKey = GlobalKey(); String? selectedProvider; String? query; late int index; + String? path; + int progress = 0; + bool downloading = false; + bool applying = false; + bool downloaded = false; + final ReceivePort _port = ReceivePort(); late String link; late AnimationController shakeController; bool isLoading = true; @@ -53,7 +66,6 @@ class _SearchWallpaperScreenState extends State bool colorChanged = false; late File _imageFile; bool screenshotTaken = false; - ScreenshotController screenshotController = ScreenshotController(); PanelController panelController = PanelController(); bool panelClosed = true; bool panelCollapsed = true; @@ -106,11 +118,66 @@ class _SearchWallpaperScreenState extends State } } + Future _capturePng() async { + final RenderRepaintBoundary boundary = + genKey.currentContext?.findRenderObject() as RenderRepaintBoundary; + final ui.Image image = await boundary.toImage(pixelRatio: 3); + final directory = (await getTemporaryDirectory()).path; + final ByteData? byteData = + await image.toByteData(format: ui.ImageByteFormat.png); + final Uint8List pngBytes = byteData!.buffer.asUint8List(); + final r = Random(); + String rNum = ""; + for (var i = 0; i < 6; i++) { + rNum = "$rNum${r.nextInt(9)}"; + } + final File imgFile = File('$directory/photo_$rNum.png'); + await imgFile.writeAsBytes(pngBytes); + logger.d(imgFile.path); + return imgFile; + } + + void setupDownloader() { + initPlatformState(); + ui.IsolateNameServer.registerPortWithName( + _port.sendPort, 'downloader_send_port'); + _port.listen((dynamic data) { + // String id = data[0]; + final DownloadTaskStatus status = data[1] as DownloadTaskStatus; + if (status == const DownloadTaskStatus(3)) { + setState(() { + downloaded = true; + }); + toasts.codeSend("Wall Downloaded in Downloads!"); + } + setState(() { + if (status == const DownloadTaskStatus(2)) { + downloading = true; + progress = data[2] as int; + } else { + downloading = false; + progress = 0; + } + }); + }); + FlutterDownloader.registerCallback(callback); + } + + void _setPath() async { + path = (await _findLocalPath())!; + final savedDir = Directory(path ?? ""); + final bool hasExisted = await savedDir.exists(); + if (!hasExisted) { + savedDir.create(); + } + } + @override void initState() { + super.initState(); shakeController = AnimationController( duration: const Duration(milliseconds: 300), vsync: this); - super.initState(); + setupDownloader(); selectedProvider = widget.arguments![0].toString(); query = widget.arguments![1].toString(); index = widget.arguments![2] as int; @@ -119,10 +186,38 @@ class _SearchWallpaperScreenState extends State _updatePaletteGenerator(); } + Future initPlatformState() async { + _setPath(); + if (!mounted) return; + } + + Future _findLocalPath() async { + String? externalStorageDirPath; + if (Platform.isAndroid) { + try { + externalStorageDirPath = "/storage/emulated/0/Download"; + } catch (e) { + final directory = await getExternalStorageDirectory(); + externalStorageDirPath = directory?.path; + } + } else if (Platform.isIOS) { + externalStorageDirPath = + (await getApplicationDocumentsDirectory()).absolute.path; + } + return externalStorageDirPath; + } + + static void callback(String id, DownloadTaskStatus status, int progress) { + final SendPort? send = + ui.IsolateNameServer.lookupPortByName('downloader_send_port'); + send?.send([id, status, progress]); + } + @override void dispose() { - super.dispose(); shakeController.dispose(); + ui.IsolateNameServer.removePortNameMapping('downloader_send_port'); + super.dispose(); } @override @@ -130,11 +225,11 @@ class _SearchWallpaperScreenState extends State final Animation offsetAnimation = Tween(begin: 0.0, end: 48.0) .chain(CurveTween(curve: Curves.easeOutCubic)) .animate(shakeController) - ..addStatusListener((status) { - if (status == AnimationStatus.completed) { - shakeController.reverse(); - } - }); + ..addStatusListener((status) { + if (status == AnimationStatus.completed) { + shakeController.reverse(); + } + }); return WillPopScope( onWillPop: onWillPop, child: selectedProvider == "WallHaven" @@ -152,40 +247,6 @@ class _SearchWallpaperScreenState extends State setState(() { panelClosed = false; }); - if (colorChanged) { - screenshotController - .capture( - pixelRatio: 3, - delay: const Duration(milliseconds: 10), - ) - .then((Uint8List? image) async { - setState(() { - _imageFile = File.fromRawPath(image!); - screenshotTaken = true; - panelClosed = false; - }); - logger.d('Screenshot Taken'); - }).catchError((onError) { - logger.d(onError.toString()); - }); - } else { - main.prefs.get('optimisedWallpapers') as bool? ?? true - ? screenshotController - .capture( - pixelRatio: 3, - delay: const Duration(milliseconds: 10), - ) - .then((Uint8List? image) async { - setState(() { - _imageFile = File.fromRawPath(image!); - screenshotTaken = true; - }); - logger.d('Screenshot Taken'); - }).catchError((onError) { - logger.d(onError.toString()); - }) - : logger.d("Wallpaper Optimisation is disabled!"); - } } }, onPanelClosed: () { @@ -219,7 +280,7 @@ class _SearchWallpaperScreenState extends State child: ClipRRect( borderRadius: BorderRadius.circular(30), child: BackdropFilter( - filter: ImageFilter.blur(sigmaX: 12.0, sigmaY: 12.0), + filter: ui.ImageFilter.blur(sigmaX: 12.0, sigmaY: 12.0), child: AnimatedContainer( duration: const Duration(milliseconds: 750), decoration: BoxDecoration( @@ -443,17 +504,27 @@ class _SearchWallpaperScreenState extends State mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ - DownloadButton( + DownloadButtonNew( colorChanged: colorChanged, - link: screenshotTaken - ? _imageFile.path - : wdata.wallsS[index].path.toString(), + screenshotCallback: () async { + final File file = await _capturePng(); + return file; + }, + loading: downloading, + path: path ?? "", + progress: (progress / 100.0) + .clamp(0, 100) + .toInt(), + link: wdata.wallsS[index].path.toString(), ), SetWallpaperButton( - colorChanged: colorChanged, - url: screenshotTaken - ? _imageFile.path - : wdata.wallsS[index].path), + colorChanged: colorChanged, + screenshotCallback: () async { + final File file = await _capturePng(); + return file; + }, + url: wdata.wallsS[index].path, + ), FavouriteWallpaperButton( id: wdata.wallsS[index].id.toString(), provider: "WallHaven", @@ -508,8 +579,8 @@ class _SearchWallpaperScreenState extends State child: CachedNetworkImage( imageUrl: wdata.wallsS[index].path!, imageBuilder: (context, imageProvider) => - Screenshot( - controller: screenshotController, + RepaintBoundary( + key: genKey, child: Container( margin: EdgeInsets.symmetric( vertical: offsetAnimation.value * 1.25, @@ -634,40 +705,6 @@ class _SearchWallpaperScreenState extends State setState(() { panelClosed = false; }); - if (colorChanged) { - screenshotController - .capture( - pixelRatio: 3, - delay: const Duration(milliseconds: 10), - ) - .then((Uint8List? image) async { - setState(() { - _imageFile = File.fromRawPath(image!); - screenshotTaken = true; - panelClosed = false; - }); - logger.d('Screenshot Taken'); - }).catchError((onError) { - logger.d(onError.toString()); - }); - } else { - main.prefs.get('optimisedWallpapers') as bool? ?? true - ? screenshotController - .capture( - pixelRatio: 3, - delay: const Duration(milliseconds: 10), - ) - .then((Uint8List? image) async { - setState(() { - _imageFile = File.fromRawPath(image!); - screenshotTaken = true; - }); - logger.d('Screenshot Taken'); - }).catchError((onError) { - logger.d(onError.toString()); - }) - : logger.d("Wallpaper Optimisation is disabled!"); - } } }, onPanelClosed: () { @@ -701,7 +738,7 @@ class _SearchWallpaperScreenState extends State child: ClipRRect( borderRadius: BorderRadius.circular(30), child: BackdropFilter( - filter: ImageFilter.blur(sigmaX: 12.0, sigmaY: 12.0), + filter: ui.ImageFilter.blur(sigmaX: 12.0, sigmaY: 12.0), child: AnimatedContainer( duration: const Duration(milliseconds: 750), decoration: BoxDecoration( @@ -935,20 +972,29 @@ class _SearchWallpaperScreenState extends State mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ - DownloadButton( - colorChanged: colorChanged, - link: screenshotTaken - ? _imageFile.path - : pdata - .wallsPS[index].src!["original"] - .toString()), + DownloadButtonNew( + colorChanged: colorChanged, + screenshotCallback: () async { + final File file = await _capturePng(); + return file; + }, + loading: downloading, + path: path ?? "", + progress: (progress / 100.0) + .clamp(0, 100) + .toInt(), + link: pdata.wallsPS[index].src!["original"] + .toString(), + ), SetWallpaperButton( - colorChanged: colorChanged, - url: screenshotTaken - ? _imageFile.path - : pdata - .wallsPS[index].src!["original"] - .toString()), + colorChanged: colorChanged, + screenshotCallback: () async { + final File file = await _capturePng(); + return file; + }, + url: pdata.wallsPS[index].src!["original"] + .toString(), + ), FavouriteWallpaperButton( id: pdata.wallsPS[index].id.toString(), provider: "Pexels", @@ -1006,8 +1052,8 @@ class _SearchWallpaperScreenState extends State imageUrl: pdata.wallsPS[index].src!["original"] .toString(), imageBuilder: (context, imageProvider) => - Screenshot( - controller: screenshotController, + RepaintBoundary( + key: genKey, child: Container( margin: EdgeInsets.symmetric( vertical: offsetAnimation.value * 1.25, diff --git a/lib/ui/pages/search/userSearch.dart b/lib/ui/pages/search/userSearch.dart index 238b5196..f3c27304 100644 --- a/lib/ui/pages/search/userSearch.dart +++ b/lib/ui/pages/search/userSearch.dart @@ -1,17 +1,16 @@ import 'package:Prism/auth/userModel.dart'; -import 'package:Prism/data/user/user_service.dart'; import 'package:Prism/data/user/user_notifier.dart'; +import 'package:Prism/data/user/user_service.dart'; import 'package:Prism/global/svgAssets.dart'; import 'package:Prism/locator/locator.dart'; import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/router.dart'; import 'package:Prism/routes/routing_constants.dart'; -import 'package:Prism/ui/pages/search/searchScreen.dart'; +import 'package:Prism/theme/jam_icons_icons.dart'; import 'package:Prism/ui/widgets/home/wallpapers/loading.dart'; import 'package:Prism/ui/widgets/popup/noLoadLinkPopUp.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; -import 'package:Prism/theme/jam_icons_icons.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:provider/provider.dart'; import 'package:url_launcher/url_launcher.dart'; @@ -264,7 +263,7 @@ class _UsersResultListState extends State { width: MediaQuery.of(context).size.width * 0.7, child: Text( - "${user.name}", + user.name, textAlign: TextAlign.center, maxLines: 1, overflow: TextOverflow.ellipsis, @@ -427,7 +426,7 @@ class _UsersResultListState extends State { onPressed: () { if (user.links != null) { final links = user.links; - if (links![e] + if (links[e] .toString() .contains( "@gmail.com")) { diff --git a/lib/ui/pages/setup/setupScreen.dart b/lib/ui/pages/setup/setupScreen.dart index a2ec8ef0..acd05b13 100644 --- a/lib/ui/pages/setup/setupScreen.dart +++ b/lib/ui/pages/setup/setupScreen.dart @@ -1,21 +1,19 @@ import 'package:Prism/data/setups/provider/setupProvider.dart'; +import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/router.dart'; import 'package:Prism/routes/routing_constants.dart'; -import 'package:Prism/theme/darkThemeModel.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; -import 'package:Prism/theme/theme.dart'; import 'package:Prism/theme/themeModeProvider.dart'; import 'package:Prism/ui/widgets/animated/loader.dart'; -import 'package:Prism/ui/widgets/premiumBanners/setupOld.dart'; import 'package:Prism/ui/widgets/home/core/bottomNavBar.dart'; import 'package:Prism/ui/widgets/popup/signInPopUp.dart'; +import 'package:Prism/ui/widgets/premiumBanners/setupOld.dart'; import 'package:Prism/ui/widgets/setups/arrowAnimation.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:provider/provider.dart'; -import 'package:Prism/global/globals.dart' as globals; -import 'package:Prism/logger/logger.dart'; class SetupScreen extends StatefulWidget { const SetupScreen({ @@ -314,26 +312,26 @@ class _SetupPageState extends State { child: Center( child: CircularProgressIndicator( valueColor: AlwaysStoppedAnimation( - Provider.of( - context) - .getCurrentModeStyle( - MediaQuery.of( - context) - .platformBrightness) == - "Dark" && - Provider.of( - context) - .currentTheme == - kDarkTheme2 - ? Theme.of(context) - .errorColor == - Colors.black - ? Theme.of(context) - .accentColor - : Theme.of(context) - .errorColor - : Theme.of(context) - .errorColor, + // Provider.of( + // context) + // .getCurrentModeStyle( + // MediaQuery.of( + // context) + // .platformBrightness) == + // "Dark" && + // Provider.of( + // context) + // .currentTheme == + // kDarkTheme2 + // ? Theme.of(context) + // .errorColor == + // Colors.black + // ? Theme.of(context) + // .accentColor + // : Theme.of(context) + // .errorColor + // : + Theme.of(context).errorColor, ), value: downloadProgress.progress), ), @@ -369,16 +367,18 @@ class _SetupPageState extends State { }, child: Icon( JamIcons.chevron_left, - color: Provider.of(context) - .getCurrentModeStyle(MediaQuery.of(context) - .platformBrightness) == - "Dark" && - Provider.of(context).currentTheme == - kDarkTheme2 - ? Theme.of(context).errorColor == Colors.black - ? Theme.of(context).accentColor - : Theme.of(context).errorColor - : Theme.of(context).errorColor, + color: + // Provider.of(context) + // .getCurrentModeStyle(MediaQuery.of(context) + // .platformBrightness) == + // "Dark" && + // Provider.of(context).currentTheme == + // kDarkTheme2 + // ? Theme.of(context).errorColor == Colors.black + // ? Theme.of(context).accentColor + // : Theme.of(context).errorColor + // : + Theme.of(context).errorColor, ), ), ), @@ -399,16 +399,18 @@ class _SetupPageState extends State { }, child: Icon( JamIcons.chevron_right, - color: Provider.of(context) - .getCurrentModeStyle(MediaQuery.of(context) - .platformBrightness) == - "Dark" && - Provider.of(context).currentTheme == - kDarkTheme2 - ? Theme.of(context).errorColor == Colors.black - ? Theme.of(context).accentColor - : Theme.of(context).errorColor - : Theme.of(context).errorColor, + color: + // Provider.of(context) + // .getCurrentModeStyle(MediaQuery.of(context) + // .platformBrightness) == + // "Dark" && + // Provider.of(context).currentTheme == + // kDarkTheme2 + // ? Theme.of(context).errorColor == Colors.black + // ? Theme.of(context).accentColor + // : Theme.of(context).errorColor + // : + Theme.of(context).errorColor, ), ), ), diff --git a/lib/ui/pages/setup/setupViewScreen.dart b/lib/ui/pages/setup/setupViewScreen.dart index 49e35bf7..cd53c2d5 100644 --- a/lib/ui/pages/setup/setupViewScreen.dart +++ b/lib/ui/pages/setup/setupViewScreen.dart @@ -5,6 +5,9 @@ import 'package:Prism/data/favourites/provider/favouriteSetupProvider.dart'; import 'package:Prism/data/informatics/dataManager.dart'; import 'package:Prism/data/setups/provider/setupProvider.dart'; import 'package:Prism/data/share/createDynamicLink.dart'; +import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/global/svgAssets.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/router.dart'; import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; @@ -19,14 +22,11 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:device_apps/device_apps.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:flutter_svg/flutter_svg.dart'; import 'package:hive/hive.dart'; import 'package:provider/provider.dart'; import 'package:sliding_up_panel/sliding_up_panel.dart'; import 'package:url_launcher/url_launcher.dart'; -import 'package:Prism/global/globals.dart' as globals; -import 'package:flutter_svg/flutter_svg.dart'; -import 'package:Prism/global/svgAssets.dart'; -import 'package:Prism/logger/logger.dart'; class SetupViewScreen extends StatefulWidget { final List? arguments; @@ -1669,7 +1669,6 @@ class ModifiedDownloadButton extends StatelessWidget { link: Provider.of(context, listen: false) .setups![index!]["wallpaper_url"] .toString(), - colorChanged: false, ) : GestureDetector( onTap: () async { diff --git a/lib/ui/pages/setup/shareSetupViewScreen.dart b/lib/ui/pages/setup/shareSetupViewScreen.dart index eaa985e5..e1d84ceb 100644 --- a/lib/ui/pages/setup/shareSetupViewScreen.dart +++ b/lib/ui/pages/setup/shareSetupViewScreen.dart @@ -4,9 +4,13 @@ import 'package:Prism/analytics/analytics_service.dart'; import 'package:Prism/data/favourites/provider/favouriteSetupProvider.dart'; import 'package:Prism/data/informatics/dataManager.dart'; import 'package:Prism/data/setups/provider/setupProvider.dart' as sdata; +import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/global/svgAssets.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/router.dart'; import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; +import 'package:Prism/theme/toasts.dart' as toasts; import 'package:Prism/ui/widgets/animated/favouriteIcon.dart'; import 'package:Prism/ui/widgets/animated/loader.dart'; import 'package:Prism/ui/widgets/animated/showUp.dart'; @@ -21,15 +25,11 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:device_apps/device_apps.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:flutter_svg/flutter_svg.dart'; import 'package:hive/hive.dart'; import 'package:provider/provider.dart'; import 'package:sliding_up_panel/sliding_up_panel.dart'; import 'package:url_launcher/url_launcher.dart'; -import 'package:Prism/global/globals.dart' as globals; -import 'package:flutter_svg/flutter_svg.dart'; -import 'package:Prism/global/svgAssets.dart'; -import 'package:Prism/theme/toasts.dart' as toasts; -import 'package:Prism/logger/logger.dart'; class ShareSetupViewScreen extends StatefulWidget { final List? arguments; @@ -100,11 +100,11 @@ class _ShareSetupViewScreenState extends State final Animation offsetAnimation = Tween(begin: 0.0, end: 48.0) .chain(CurveTween(curve: Curves.easeOutCubic)) .animate(shakeController) - ..addStatusListener((status) { - if (status == AnimationStatus.completed) { - shakeController.reverse(); - } - }); + ..addStatusListener((status) { + if (status == AnimationStatus.completed) { + shakeController.reverse(); + } + }); return WillPopScope( onWillPop: onWillPop, child: Scaffold( @@ -1517,7 +1517,6 @@ class ModifiedShareDownloadButton extends StatelessWidget { ? sdata.setup!["wall_id"] != null && sdata.setup!["wall_id"] != "" ? DownloadButton( link: sdata.setup!["wallpaper_url"].toString(), - colorChanged: false, ) : GestureDetector( onTap: () async { diff --git a/lib/ui/pages/share/shareWallViewScreen.dart b/lib/ui/pages/share/shareWallViewScreen.dart index 6550474b..bf2b6945 100644 --- a/lib/ui/pages/share/shareWallViewScreen.dart +++ b/lib/ui/pages/share/shareWallViewScreen.dart @@ -1,6 +1,9 @@ import 'dart:io'; +import 'dart:isolate'; +import 'dart:math'; import 'dart:typed_data'; -import 'dart:ui'; +import 'dart:ui' as ui; + import 'package:Prism/data/informatics/dataManager.dart'; import 'package:Prism/data/palette/paletteNotifier.dart'; import 'package:Prism/data/pexels/model/wallpaperp.dart'; @@ -9,14 +12,18 @@ import 'package:Prism/data/prism/provider/prismWithoutProvider.dart' as Data; import 'package:Prism/data/wallhaven/model/wallpaper.dart'; import 'package:Prism/data/wallhaven/provider/wallhavenWithoutProvider.dart' as WData; +import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/global/svgAssets.dart'; +import 'package:Prism/logger/logger.dart'; +import 'package:Prism/main.dart' as main; import 'package:Prism/routes/router.dart'; import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; import 'package:Prism/theme/toasts.dart' as toasts; import 'package:Prism/ui/widgets/animated/loader.dart'; import 'package:Prism/ui/widgets/home/core/collapsedPanel.dart'; -import 'package:Prism/ui/widgets/home/wallpapers/clockOverlay.dart'; import 'package:Prism/ui/widgets/home/core/colorBar.dart'; +import 'package:Prism/ui/widgets/home/wallpapers/clockOverlay.dart'; import 'package:Prism/ui/widgets/menuButton/downloadButton.dart'; import 'package:Prism/ui/widgets/menuButton/editButton.dart'; import 'package:Prism/ui/widgets/menuButton/favWallpaperButton.dart'; @@ -27,16 +34,15 @@ import 'package:Prism/ui/widgets/popup/signInPopUp.dart'; import 'package:animations/animations.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; +import 'package:flutter_downloader/flutter_downloader.dart'; import 'package:palette_generator/palette_generator.dart'; +import 'package:path_provider/path_provider.dart'; +import 'package:Prism/theme/toasts.dart' as toasts; +import 'package:flutter_svg/flutter_svg.dart'; import 'package:provider/provider.dart'; -import 'package:screenshot/screenshot.dart'; import 'package:sliding_up_panel/sliding_up_panel.dart'; -import 'package:Prism/main.dart' as main; -import 'package:Prism/global/globals.dart' as globals; -import 'package:flutter_svg/flutter_svg.dart'; -import 'package:Prism/global/svgAssets.dart'; -import 'package:Prism/logger/logger.dart'; class ShareWallpaperViewScreen extends StatefulWidget { final List? arguments; @@ -50,16 +56,22 @@ class ShareWallpaperViewScreen extends StatefulWidget { class _ShareWallpaperViewScreenState extends State with SingleTickerProviderStateMixin { final GlobalKey _scaffoldKey = GlobalKey(); + final GlobalKey genKey = GlobalKey(); String? id; String? provider; String? url; late String thumb; + String? path; + int progress = 0; + bool downloading = false; + bool applying = false; + bool downloaded = false; + final ReceivePort _port = ReceivePort(); List? colors; Color? accent = Colors.white; bool colorChanged = false; late File _imageFile; bool screenshotTaken = false; - ScreenshotController screenshotController = ScreenshotController(); late AnimationController shakeController; late Future futureW; late Future futureP; @@ -113,10 +125,65 @@ class _ShareWallpaperViewScreenState extends State } } + Future _capturePng() async { + final RenderRepaintBoundary boundary = + genKey.currentContext?.findRenderObject() as RenderRepaintBoundary; + final ui.Image image = await boundary.toImage(pixelRatio: 3); + final directory = (await getTemporaryDirectory()).path; + final ByteData? byteData = + await image.toByteData(format: ui.ImageByteFormat.png); + final Uint8List pngBytes = byteData!.buffer.asUint8List(); + final r = Random(); + String rNum = ""; + for (var i = 0; i < 6; i++) { + rNum = "$rNum${r.nextInt(9)}"; + } + final File imgFile = File('$directory/photo_$rNum.png'); + await imgFile.writeAsBytes(pngBytes); + logger.d(imgFile.path); + return imgFile; + } + + void setupDownloader() { + initPlatformState(); + ui.IsolateNameServer.registerPortWithName( + _port.sendPort, 'downloader_send_port'); + _port.listen((dynamic data) { + // String id = data[0]; + final DownloadTaskStatus status = data[1] as DownloadTaskStatus; + if (status == const DownloadTaskStatus(3)) { + setState(() { + downloaded = true; + }); + toasts.codeSend("Wall Downloaded in Downloads!"); + } + setState(() { + if (status == const DownloadTaskStatus(2)) { + downloading = true; + progress = data[2] as int; + } else { + downloading = false; + progress = 0; + } + }); + }); + FlutterDownloader.registerCallback(callback); + } + + void _setPath() async { + path = (await _findLocalPath())!; + final savedDir = Directory(path ?? ""); + final bool hasExisted = await savedDir.exists(); + if (!hasExisted) { + savedDir.create(); + } + } + @override void initState() { shakeController = AnimationController( duration: const Duration(milliseconds: 300), vsync: this); + setupDownloader(); id = widget.arguments![0].toString(); provider = widget.arguments![1].toString(); url = widget.arguments![2].toString(); @@ -134,9 +201,37 @@ class _ShareWallpaperViewScreenState extends State super.initState(); } + Future initPlatformState() async { + _setPath(); + if (!mounted) return; + } + + Future _findLocalPath() async { + String? externalStorageDirPath; + if (Platform.isAndroid) { + try { + externalStorageDirPath = "/storage/emulated/0/Download"; + } catch (e) { + final directory = await getExternalStorageDirectory(); + externalStorageDirPath = directory?.path; + } + } else if (Platform.isIOS) { + externalStorageDirPath = + (await getApplicationDocumentsDirectory()).absolute.path; + } + return externalStorageDirPath; + } + + static void callback(String id, DownloadTaskStatus status, int progress) { + final SendPort? send = + ui.IsolateNameServer.lookupPortByName('downloader_send_port'); + send?.send([id, status, progress]); + } + @override void dispose() { shakeController.dispose(); + ui.IsolateNameServer.removePortNameMapping('downloader_send_port'); super.dispose(); } @@ -153,11 +248,11 @@ class _ShareWallpaperViewScreenState extends State final Animation offsetAnimation = Tween(begin: 0.0, end: 48.0) .chain(CurveTween(curve: Curves.easeOutCubic)) .animate(shakeController) - ..addStatusListener((status) { - if (status == AnimationStatus.completed) { - shakeController.reverse(); - } - }); + ..addStatusListener((status) { + if (status == AnimationStatus.completed) { + shakeController.reverse(); + } + }); return WillPopScope( onWillPop: onWillPop, child: provider == "WallHaven" @@ -173,41 +268,6 @@ class _ShareWallpaperViewScreenState extends State }); if (panelClosed) { logger.d('Screenshot Starting'); - if (colorChanged) { - screenshotController - .capture( - pixelRatio: 3, - delay: const Duration(milliseconds: 10), - ) - .then((Uint8List? image) async { - setState(() { - _imageFile = File.fromRawPath(image!); - screenshotTaken = true; - panelClosed = false; - }); - logger.d('Screenshot Taken'); - }).catchError((onError) { - logger.d(onError.toString()); - }); - } else { - (main.prefs.get('optimisedWallpapers') ?? true) == true - ? screenshotController - .capture( - pixelRatio: 3, - delay: const Duration(milliseconds: 10), - ) - .then((Uint8List? image) async { - setState(() { - _imageFile = File.fromRawPath(image!); - screenshotTaken = true; - panelClosed = false; - }); - logger.d('Screenshot Taken'); - }).catchError((onError) { - logger.d(onError.toString()); - }) - : logger.d("Wallpaper Optimisation is disabled!"); - } } }, onPanelClosed: () { @@ -241,7 +301,7 @@ class _ShareWallpaperViewScreenState extends State child: ClipRRect( borderRadius: BorderRadius.circular(30), child: BackdropFilter( - filter: ImageFilter.blur(sigmaX: 12.0, sigmaY: 12.0), + filter: ui.ImageFilter.blur(sigmaX: 12.0, sigmaY: 12.0), child: AnimatedContainer( duration: const Duration(milliseconds: 750), decoration: BoxDecoration( @@ -487,22 +547,32 @@ class _ShareWallpaperViewScreenState extends State mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ - DownloadButton( - colorChanged: colorChanged, - link: screenshotTaken - ? _imageFile.path - : WData.wall == null - ? "" - : WData.wall.path - .toString()), + DownloadButtonNew( + colorChanged: colorChanged, + screenshotCallback: () async { + final File file = + await _capturePng(); + return file; + }, + loading: downloading, + path: path ?? "", + progress: (progress / 100.0) + .clamp(0, 100) + .toInt(), + link: WData.wall == null + ? "" + : WData.wall.path.toString(), + ), SetWallpaperButton( colorChanged: colorChanged, - url: screenshotTaken - ? _imageFile.path - : WData.wall == null - ? "" - : WData.wall.path - .toString(), + screenshotCallback: () async { + final File file = + await _capturePng(); + return file; + }, + url: WData.wall == null + ? "" + : WData.wall.path.toString(), ), FavouriteWallpaperButton( id: WData.wall == null @@ -573,8 +643,8 @@ class _ShareWallpaperViewScreenState extends State child: CachedNetworkImage( imageUrl: url!, imageBuilder: (context, imageProvider) => - Screenshot( - controller: screenshotController, + RepaintBoundary( + key: genKey, child: Container( margin: EdgeInsets.symmetric( vertical: offsetAnimation.value * 1.25, @@ -698,42 +768,6 @@ class _ShareWallpaperViewScreenState extends State }); if (panelClosed) { logger.d('Screenshot Starting'); - if (colorChanged) { - screenshotController - .capture( - pixelRatio: 3, - delay: const Duration(milliseconds: 10), - ) - .then((Uint8List? image) async { - setState(() { - _imageFile = File.fromRawPath(image!); - screenshotTaken = true; - panelClosed = false; - }); - logger.d('Screenshot Taken'); - }).catchError((onError) { - logger.d(onError.toString()); - }); - } else { - (main.prefs.get('optimisedWallpapers') ?? true) == - true - ? screenshotController - .capture( - pixelRatio: 3, - delay: const Duration(milliseconds: 10), - ) - .then((Uint8List? image) async { - setState(() { - _imageFile = File.fromRawPath(image!); - screenshotTaken = true; - panelClosed = false; - }); - logger.d('Screenshot Taken'); - }).catchError((onError) { - logger.d(onError.toString()); - }) - : logger.d("Wallpaper Optimisation is disabled!"); - } } }, onPanelClosed: () { @@ -767,7 +801,8 @@ class _ShareWallpaperViewScreenState extends State child: ClipRRect( borderRadius: BorderRadius.circular(30), child: BackdropFilter( - filter: ImageFilter.blur(sigmaX: 12.0, sigmaY: 12.0), + filter: + ui.ImageFilter.blur(sigmaX: 12.0, sigmaY: 12.0), child: AnimatedContainer( duration: const Duration(milliseconds: 750), decoration: BoxDecoration( @@ -834,7 +869,7 @@ class _ShareWallpaperViewScreenState extends State crossAxisAlignment: CrossAxisAlignment.start, children: [ - Container( + SizedBox( width: MediaQuery.of(context) .size @@ -1261,24 +1296,36 @@ class _ShareWallpaperViewScreenState extends State mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ - DownloadButton( - colorChanged: colorChanged, - link: screenshotTaken - ? _imageFile.path - : Data.wall == null - ? "" - : Data.wall[ - "wallpaper_url"] - .toString()), + DownloadButtonNew( + colorChanged: colorChanged, + screenshotCallback: () async { + final File file = + await _capturePng(); + return file; + }, + loading: downloading, + path: path ?? "", + progress: (progress / 100.0) + .clamp(0, 100) + .toInt(), + link: Data.wall == null + ? "" + : Data + .wall["wallpaper_url"] + .toString(), + ), SetWallpaperButton( colorChanged: colorChanged, - url: screenshotTaken - ? _imageFile.path - : Data.wall == null - ? "" - : Data.wall[ - "wallpaper_url"] - .toString(), + screenshotCallback: () async { + final File file = + await _capturePng(); + return file; + }, + url: Data.wall == null + ? "" + : Data + .wall["wallpaper_url"] + .toString(), ), FavouriteWallpaperButton( id: Data.wall == null @@ -1346,8 +1393,8 @@ class _ShareWallpaperViewScreenState extends State child: CachedNetworkImage( imageUrl: url!, imageBuilder: (context, imageProvider) => - Screenshot( - controller: screenshotController, + RepaintBoundary( + key: genKey, child: Container( margin: EdgeInsets.symmetric( vertical: @@ -1474,43 +1521,6 @@ class _ShareWallpaperViewScreenState extends State }); if (panelClosed) { logger.d('Screenshot Starting'); - if (colorChanged) { - screenshotController - .capture( - pixelRatio: 3, - delay: const Duration(milliseconds: 10), - ) - .then((Uint8List? image) async { - setState(() { - _imageFile = File.fromRawPath(image!); - screenshotTaken = true; - panelClosed = false; - }); - logger.d('Screenshot Taken'); - }).catchError((onError) { - logger.d(onError.toString()); - }); - } else { - (main.prefs.get('optimisedWallpapers') ?? true) == - true - ? screenshotController - .capture( - pixelRatio: 3, - delay: const Duration(milliseconds: 10), - ) - .then((Uint8List? image) async { - setState(() { - _imageFile = File.fromRawPath(image!); - screenshotTaken = true; - panelClosed = false; - }); - logger.d('Screenshot Taken'); - }).catchError((onError) { - logger.d(onError.toString()); - }) - : logger - .d("Wallpaper Optimisation is disabled!"); - } } }, onPanelClosed: () { @@ -1544,7 +1554,7 @@ class _ShareWallpaperViewScreenState extends State child: ClipRRect( borderRadius: BorderRadius.circular(30), child: BackdropFilter( - filter: ImageFilter.blur( + filter: ui.ImageFilter.blur( sigmaX: 12.0, sigmaY: 12.0), child: AnimatedContainer( duration: const Duration(milliseconds: 750), @@ -1828,19 +1838,33 @@ class _ShareWallpaperViewScreenState extends State MainAxisAlignment .spaceEvenly, children: [ - DownloadButton( + DownloadButtonNew( colorChanged: colorChanged, - link: screenshotTaken - ? _imageFile.path - : url.toString(), + screenshotCallback: + () async { + final File file = + await _capturePng(); + return file; + }, + loading: downloading, + path: path ?? "", + progress: + (progress / 100.0) + .clamp(0, 100) + .toInt(), + link: url.toString(), ), SetWallpaperButton( colorChanged: colorChanged, - url: screenshotTaken - ? _imageFile.path - : url.toString(), + screenshotCallback: + () async { + final File file = + await _capturePng(); + return file; + }, + url: url.toString(), ), FavouriteWallpaperButton( id: PData.wall == null @@ -1907,8 +1931,8 @@ class _ShareWallpaperViewScreenState extends State child: CachedNetworkImage( imageUrl: url!, imageBuilder: (context, imageProvider) => - Screenshot( - controller: screenshotController, + RepaintBoundary( + key: genKey, child: Container( margin: EdgeInsets.symmetric( vertical: diff --git a/lib/ui/pages/upload/draftSetupScreen.dart b/lib/ui/pages/upload/draftSetupScreen.dart index cd042e99..6edf0266 100644 --- a/lib/ui/pages/upload/draftSetupScreen.dart +++ b/lib/ui/pages/upload/draftSetupScreen.dart @@ -1,19 +1,11 @@ -import 'dart:io'; -import 'package:Prism/global/svgAssets.dart'; -import 'package:Prism/routes/routing_constants.dart'; +import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; +import 'package:Prism/routes/router.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; -import 'package:Prism/theme/themeModeProvider.dart'; import 'package:Prism/ui/pages/profile/reviewScreen.dart'; import 'package:Prism/ui/widgets/animated/loader.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter_svg/flutter_svg.dart'; -import 'package:image_picker/image_picker.dart'; -import 'package:Prism/routes/router.dart'; import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; -import 'package:Prism/logger/logger.dart'; -import 'package:Prism/global/globals.dart' as globals; class DraftSetupScreen extends StatefulWidget { const DraftSetupScreen(); @@ -38,6 +30,18 @@ class _DraftSetupScreenState extends State { child: Scaffold( backgroundColor: Theme.of(context).primaryColor, appBar: AppBar( + leading: IconButton( + icon: Icon( + JamIcons.close, + color: Theme.of(context).accentColor, + ), + onPressed: () { + if (navStack.length > 1) navStack.removeLast(); + logger.d(navStack.toString()); + Navigator.pop(context); + }, + ), + backgroundColor: Theme.of(context).backgroundColor, title: Text( "Setup Drafts", style: TextStyle(color: Theme.of(context).accentColor), diff --git a/lib/ui/pages/upload/editWallScreen.dart b/lib/ui/pages/upload/editWallScreen.dart index 9e25e28a..bc17b9ec 100644 --- a/lib/ui/pages/upload/editWallScreen.dart +++ b/lib/ui/pages/upload/editWallScreen.dart @@ -1,13 +1,14 @@ import 'dart:convert'; import 'dart:io'; import 'dart:typed_data'; + +import 'package:Prism/logger/logger.dart'; +import 'package:Prism/routes/router.dart'; import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; -import 'package:Prism/routes/router.dart'; -import 'package:flutter/material.dart'; import 'package:extended_image/extended_image.dart'; +import 'package:flutter/material.dart'; import 'package:image_editor/image_editor.dart' hide ImageSource; -import 'package:Prism/logger/logger.dart'; class EditWallScreen extends StatefulWidget { final List? arguments; @@ -110,6 +111,7 @@ class _EditWallScreenState extends State { child: Scaffold( backgroundColor: Theme.of(context).primaryColor, appBar: AppBar( + backgroundColor: Theme.of(context).backgroundColor, title: Text( "Edit Wallpaper", style: Theme.of(context) @@ -306,6 +308,14 @@ class _EditWallScreenState extends State { Widget _buildFunctions() { return BottomNavigationBar( + unselectedLabelStyle: TextStyle( + fontSize: 12, + color: Theme.of(context).accentColor.withOpacity(0.5), + ), + selectedLabelStyle: TextStyle( + fontSize: 12, + color: Theme.of(context).accentColor.withOpacity(0.5), + ), backgroundColor: Theme.of(context).primaryColor, showUnselectedLabels: true, type: BottomNavigationBarType.fixed, @@ -315,56 +325,36 @@ class _EditWallScreenState extends State { Icons.flip, color: Theme.of(context).accentColor, ), - title: Text( - 'Flip', - style: Theme.of(context).textTheme.bodyText2!.copyWith( - color: Theme.of(context).accentColor, - ), - ), + label: 'Flip', ), BottomNavigationBarItem( icon: Icon( Icons.rotate_left, color: Theme.of(context).accentColor, ), - title: Text( - 'Rotate Left', - style: Theme.of(context).textTheme.bodyText2!.copyWith( - color: Theme.of(context).accentColor, - ), - ), + label: 'Rotate Left', ), BottomNavigationBarItem( icon: Icon( Icons.rotate_right, color: Theme.of(context).accentColor, ), - title: Text( - 'Rotate Right', - style: Theme.of(context).textTheme.bodyText2!.copyWith( - color: Theme.of(context).accentColor, - ), - ), + label: 'Rotate Right', ), BottomNavigationBarItem( icon: Icon( Icons.crop, color: Theme.of(context).accentColor, ), - title: Text( - cropRatio == 1 / 2 - ? "9:18" - : cropRatio == 9 / 16 - ? "9:16" - : cropRatio == 9 / 21 - ? "9:21" - : cropRatio == 9 / 19.5 - ? "9:19.5" - : "9:18", - style: Theme.of(context).textTheme.bodyText2!.copyWith( - color: Theme.of(context).accentColor, - ), - ), + label: cropRatio == 1 / 2 + ? "9:18" + : cropRatio == 9 / 16 + ? "9:16" + : cropRatio == 9 / 21 + ? "9:21" + : cropRatio == 9 / 19.5 + ? "9:19.5" + : "9:18", ), ], onTap: (int index) { @@ -400,7 +390,7 @@ class _EditWallScreenState extends State { final ImageEditorOption option = ImageEditorOption(); - option.addOption(ClipOption.fromRect(rect)); + option.addOption(ClipOption.fromRect(rect!)); option.addOption( FlipOption(horizontal: flipHorizontal, vertical: flipVertical)); if (action.hasRotateAngle) { @@ -416,15 +406,15 @@ class _EditWallScreenState extends State { logger.d(const JsonEncoder.withIndent(' ').convert(option.toJson())); final DateTime start = DateTime.now(); - final Uint8List result = await ImageEditor.editImage( + final Uint8List? result = await ImageEditor.editImage( image: img, imageEditorOption: option, ); - logger.d('result.length = ${result.length}'); + logger.d('result.length = ${result?.length}'); final Duration diff = DateTime.now().difference(start); - image!.writeAsBytesSync(result); + image!.writeAsBytesSync(result!); logger.d('image_editor time : $diff'); if (navStack.length > 1) navStack.removeLast(); logger.d(navStack.toString()); diff --git a/lib/ui/pages/upload/setupGuidelines.dart b/lib/ui/pages/upload/setupGuidelines.dart index 409c9337..5f813317 100644 --- a/lib/ui/pages/upload/setupGuidelines.dart +++ b/lib/ui/pages/upload/setupGuidelines.dart @@ -1,15 +1,15 @@ import 'dart:io'; + import 'package:Prism/global/svgAssets.dart'; +import 'package:Prism/logger/logger.dart'; +import 'package:Prism/routes/router.dart'; import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; import 'package:Prism/theme/themeModeProvider.dart'; -import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:image_picker/image_picker.dart'; -import 'package:Prism/routes/router.dart'; -import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:Prism/logger/logger.dart'; class SetupGuidelinesScreen extends StatefulWidget { const SetupGuidelinesScreen(); @@ -50,6 +50,18 @@ class _SetupGuidelinesScreenState extends State { child: Scaffold( backgroundColor: Theme.of(context).primaryColor, appBar: AppBar( + leading: IconButton( + icon: Icon( + JamIcons.close, + color: Theme.of(context).accentColor, + ), + onPressed: () { + if (navStack.length > 1) navStack.removeLast(); + logger.d(navStack.toString()); + Navigator.pop(context); + }, + ), + backgroundColor: Theme.of(context).backgroundColor, title: Text( "Upload Setup", style: TextStyle(color: Theme.of(context).accentColor), diff --git a/lib/ui/pages/upload/uploadSetupScreen.dart b/lib/ui/pages/upload/uploadSetupScreen.dart index 23e23614..8d5e1316 100644 --- a/lib/ui/pages/upload/uploadSetupScreen.dart +++ b/lib/ui/pages/upload/uploadSetupScreen.dart @@ -1,25 +1,25 @@ import 'dart:convert'; import 'dart:io'; import 'dart:math'; + import 'package:Prism/analytics/analytics_service.dart'; import 'package:Prism/data/apps/appsData.dart'; +import 'package:Prism/data/upload/wallpaper/wallfirestore.dart' as WallStore; import 'package:Prism/gitkey.dart'; +import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; +import 'package:Prism/routes/router.dart'; import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; +import 'package:Prism/theme/toasts.dart' as toasts; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/cupertino.dart'; -import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; import 'package:github/github.dart'; import 'package:hive/hive.dart'; import 'package:image_picker/image_picker.dart'; import 'package:path/path.dart' as Path; -import 'package:Prism/routes/router.dart'; -import 'package:flutter/material.dart'; import 'package:photo_view/photo_view.dart'; -import 'package:Prism/data/upload/wallpaper/wallfirestore.dart' as WallStore; -import 'package:Prism/theme/toasts.dart' as toasts; -import 'package:Prism/global/globals.dart' as globals; -import 'package:Prism/logger/logger.dart'; class UploadSetupScreen extends StatefulWidget { final List? arguments; diff --git a/lib/ui/pages/upload/uploadWallScreen.dart b/lib/ui/pages/upload/uploadWallScreen.dart index 7c834574..da43442e 100644 --- a/lib/ui/pages/upload/uploadWallScreen.dart +++ b/lib/ui/pages/upload/uploadWallScreen.dart @@ -2,22 +2,22 @@ import 'dart:convert'; import 'dart:io'; import 'dart:math'; import 'dart:typed_data'; + import 'package:Prism/analytics/analytics_service.dart'; +import 'package:Prism/data/upload/wallpaper/wallfirestore.dart' as WallStore; +import 'package:Prism/gitkey.dart'; +import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; +import 'package:Prism/routes/router.dart'; import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; +import 'package:Prism/theme/toasts.dart' as toasts; import 'package:flare_flutter/flare_actor.dart'; -import 'package:flutter/foundation.dart'; -import 'package:path/path.dart' as Path; -import 'package:Prism/routes/router.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_image_compress/flutter_image_compress.dart'; import 'package:github/github.dart'; -import 'package:Prism/gitkey.dart'; +import 'package:path/path.dart' as Path; import 'package:photo_view/photo_view.dart'; -import 'package:Prism/data/upload/wallpaper/wallfirestore.dart' as WallStore; -import 'package:Prism/theme/toasts.dart' as toasts; -import 'package:flutter_image_compress/flutter_image_compress.dart'; -import 'package:Prism/global/globals.dart' as globals; -import 'package:Prism/logger/logger.dart'; class UploadWallScreen extends StatefulWidget { final List? arguments; @@ -184,6 +184,18 @@ class _UploadWallScreenState extends State { child: Scaffold( backgroundColor: Theme.of(context).primaryColor, appBar: AppBar( + leading: IconButton( + icon: Icon( + JamIcons.close, + color: Theme.of(context).accentColor, + ), + onPressed: () async { + if (await onWillPop() == true) { + Navigator.pop(context); + } + }, + ), + backgroundColor: Theme.of(context).backgroundColor, title: Text( "Upload Wallpaper", style: TextStyle(color: Theme.of(context).accentColor), diff --git a/lib/ui/widgets/animated/loader.dart b/lib/ui/widgets/animated/loader.dart index bf3c9cb7..77c7107d 100644 --- a/lib/ui/widgets/animated/loader.dart +++ b/lib/ui/widgets/animated/loader.dart @@ -1,8 +1,4 @@ -import 'package:Prism/theme/darkThemeModel.dart'; -import 'package:Prism/theme/theme.dart'; -import 'package:Prism/theme/themeModeProvider.dart'; import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; class Loader extends StatefulWidget { @override @@ -70,15 +66,17 @@ class _LoaderState extends State with TickerProviderStateMixin { child: Container( decoration: BoxDecoration( shape: BoxShape.circle, - color: Provider.of(context).getCurrentModeStyle( - MediaQuery.of(context).platformBrightness) == - "Dark" && - Provider.of(context).currentTheme == - kDarkTheme2 - ? Theme.of(context).errorColor == Colors.black - ? Theme.of(context).accentColor - : Theme.of(context).errorColor - : Theme.of(context).errorColor, + color: + // Provider.of(context).getCurrentModeStyle( + // MediaQuery.of(context).platformBrightness) == + // "Dark" && + // Provider.of(context).currentTheme == + // kDarkTheme2 + // ? Theme.of(context).errorColor == Colors.black + // ? Theme.of(context).accentColor + // : Theme.of(context).errorColor + // : + Theme.of(context).errorColor, ), child: const SizedBox( width: 45, diff --git a/lib/ui/widgets/auth/googleButton.dart b/lib/ui/widgets/auth/googleButton.dart index f7be9b5d..5620452e 100644 --- a/lib/ui/widgets/auth/googleButton.dart +++ b/lib/ui/widgets/auth/googleButton.dart @@ -1,6 +1,6 @@ import 'package:Prism/auth/google_auth.dart'; -import 'package:flutter/material.dart'; import 'package:Prism/theme/config.dart' as config; +import 'package:flutter/material.dart'; final GoogleAuth gAuth = GoogleAuth(); diff --git a/lib/ui/widgets/favourite/favLoader.dart b/lib/ui/widgets/favourite/favLoader.dart index 775176da..6b79a038 100644 --- a/lib/ui/widgets/favourite/favLoader.dart +++ b/lib/ui/widgets/favourite/favLoader.dart @@ -1,8 +1,8 @@ +import 'package:Prism/logger/logger.dart'; import 'package:Prism/ui/widgets/favourite/favGrid.dart'; import 'package:Prism/ui/widgets/home/wallpapers/loading.dart'; -import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; -import 'package:Prism/logger/logger.dart'; +import 'package:flutter/material.dart'; class FavLoader extends StatefulWidget { final Future? future; diff --git a/lib/ui/widgets/favourite/favSetupLoader.dart b/lib/ui/widgets/favourite/favSetupLoader.dart index 9c02bea2..9eb900fd 100644 --- a/lib/ui/widgets/favourite/favSetupLoader.dart +++ b/lib/ui/widgets/favourite/favSetupLoader.dart @@ -1,8 +1,8 @@ +import 'package:Prism/logger/logger.dart'; import 'package:Prism/ui/widgets/favourite/favSetupGrid.dart'; import 'package:Prism/ui/widgets/setups/loadingSetups.dart'; -import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; -import 'package:Prism/logger/logger.dart'; +import 'package:flutter/material.dart'; class FavSetupLoader extends StatefulWidget { final Future? future; diff --git a/lib/ui/widgets/focussedMenu/focusedMenu.dart b/lib/ui/widgets/focussedMenu/focusedMenu.dart index b122e833..09008f8a 100644 --- a/lib/ui/widgets/focussedMenu/focusedMenu.dart +++ b/lib/ui/widgets/focussedMenu/focusedMenu.dart @@ -69,7 +69,7 @@ class _FocusedMenuHolderState extends State { }, child: Container( decoration: BoxDecoration( - color: Theme.of(context).hintColor, + color: Theme.of(context).backgroundColor, borderRadius: const BorderRadius.only( topLeft: Radius.circular(20), bottomRight: Radius.circular(20))), diff --git a/lib/ui/widgets/focussedMenu/focusedMenuDetails.dart b/lib/ui/widgets/focussedMenu/focusedMenuDetails.dart index dd6fda9c..495dc233 100644 --- a/lib/ui/widgets/focussedMenu/focusedMenuDetails.dart +++ b/lib/ui/widgets/focussedMenu/focusedMenuDetails.dart @@ -1,12 +1,15 @@ import 'dart:ui'; + import 'package:Prism/data/favourites/provider/favouriteProvider.dart'; import 'package:Prism/data/pexels/provider/pexelsWithoutProvider.dart' as PData; import 'package:Prism/data/prism/provider/prismWithoutProvider.dart' as Data; -import 'package:Prism/data/profile/wallpaper/profileWallProvider.dart'; import 'package:Prism/data/profile/wallpaper/getUserProfile.dart' as UserData; +import 'package:Prism/data/profile/wallpaper/profileWallProvider.dart'; import 'package:Prism/data/wallhaven/provider/wallhavenWithoutProvider.dart' as WData; +import 'package:Prism/global/globals.dart' as globals; import 'package:Prism/global/svgAssets.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; import 'package:Prism/theme/themeModeProvider.dart'; @@ -18,8 +21,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:provider/provider.dart'; import 'package:url_launcher/url_launcher.dart'; -import 'package:Prism/global/globals.dart' as globals; -import 'package:Prism/logger/logger.dart'; class FocusedMenuDetails extends StatefulWidget { final String? provider; @@ -176,7 +177,7 @@ class _FocusedMenuDetailsState extends State { width: widget.childSize!.width, height: widget.childSize!.height * 6 / 10, decoration: BoxDecoration( - color: Theme.of(context).hintColor, + color: Theme.of(context).backgroundColor, borderRadius: const BorderRadius.all(Radius.circular(20.0)), ), @@ -311,7 +312,7 @@ class _FocusedMenuDetailsState extends State { }, child: Container( decoration: BoxDecoration( - color: Theme.of(context).hintColor, + color: Theme.of(context).backgroundColor, borderRadius: const BorderRadius.only( topLeft: Radius.circular(20), bottomRight: Radius.circular(20))), @@ -354,7 +355,7 @@ class _FocusedMenuDetailsState extends State { width: widget.childSize!.width, height: widget.childSize!.height * 6 / 10, decoration: BoxDecoration( - color: Theme.of(context).hintColor, + color: Theme.of(context).backgroundColor, borderRadius: const BorderRadius.all(Radius.circular(20.0)), ), @@ -520,7 +521,8 @@ class _FocusedMenuDetailsState extends State { }, child: Container( decoration: BoxDecoration( - color: Theme.of(context).hintColor, + color: + Theme.of(context).backgroundColor, borderRadius: const BorderRadius.only( topLeft: Radius.circular(20), bottomRight: @@ -563,7 +565,7 @@ class _FocusedMenuDetailsState extends State { width: widget.childSize!.width, height: widget.childSize!.height * 6 / 10, decoration: BoxDecoration( - color: Theme.of(context).hintColor, + color: Theme.of(context).backgroundColor, borderRadius: const BorderRadius.all( Radius.circular(20.0)), ), @@ -698,8 +700,8 @@ class _FocusedMenuDetailsState extends State { }, child: Container( decoration: BoxDecoration( - color: - Theme.of(context).hintColor, + color: Theme.of(context) + .backgroundColor, borderRadius: const BorderRadius.only( topLeft: @@ -745,7 +747,7 @@ class _FocusedMenuDetailsState extends State { width: widget.childSize!.width, height: widget.childSize!.height * 6 / 10, decoration: BoxDecoration( - color: Theme.of(context).hintColor, + color: Theme.of(context).backgroundColor, borderRadius: const BorderRadius.all( Radius.circular(20.0)), ), @@ -891,7 +893,7 @@ class _FocusedMenuDetailsState extends State { child: Container( decoration: BoxDecoration( color: Theme.of(context) - .hintColor, + .backgroundColor, borderRadius: const BorderRadius.only( topLeft: @@ -940,7 +942,8 @@ class _FocusedMenuDetailsState extends State { width: widget.childSize!.width, height: widget.childSize!.height * 6 / 10, decoration: BoxDecoration( - color: Theme.of(context).hintColor, + color: + Theme.of(context).backgroundColor, borderRadius: const BorderRadius.all( Radius.circular(20.0)), ), @@ -1068,7 +1071,7 @@ class _FocusedMenuDetailsState extends State { child: Container( decoration: BoxDecoration( color: Theme.of(context) - .hintColor, + .backgroundColor, borderRadius: const BorderRadius .only( @@ -1127,8 +1130,8 @@ class _FocusedMenuDetailsState extends State { 6 / 8, decoration: BoxDecoration( - color: - Theme.of(context).hintColor, + color: Theme.of(context) + .backgroundColor, borderRadius: const BorderRadius.all( Radius.circular(20.0)), @@ -1371,7 +1374,7 @@ class _FocusedMenuDetailsState extends State { 8, decoration: BoxDecoration( color: Theme.of(context) - .hintColor, + .backgroundColor, borderRadius: const BorderRadius.all( Radius.circular( @@ -1972,7 +1975,8 @@ class _FocusedMenuDetailsState extends State { height: widget.childSize!.height * 6 / 8, decoration: BoxDecoration( - color: Theme.of(context).hintColor, + color: Theme.of(context) + .backgroundColor, borderRadius: const BorderRadius.all( Radius.circular(20.0)), @@ -2255,42 +2259,41 @@ class _FocusedMenuDetailsState extends State { trash: false, ), ), - Positioned( - top: topOffset! + fabWallTopOffset, - left: leftOffset! + fabWallLeftOffset, - child: DownloadButton( - colorChanged: false, - link: widget.provider == "WallHaven" - ? WData.walls[widget.index].path.toString() - : widget.provider == "Prism" - ? Data.subPrismWalls![widget.index]["wallpaper_url"] - .toString() - : widget.provider == "ProfileWall" - ? Provider.of(context, - listen: false) - .profileWalls![widget.index]["wallpaper_url"] - .toString() - : widget.provider == "UserProfileWall" - ? Provider.of( - context) - .userProfileWalls![widget.index] - .data()["wallpaper_url"] - .toString() - : widget.provider == "Pexels" - ? PData - .wallsP[widget.index].src!["original"] - .toString() - : widget.provider == "Liked" - ? Provider.of( - context, - listen: false) - .liked![widget.index]["url"] - .toString() - : PData.wallsC[widget.index] - .src!["original"] - .toString(), - ), - ), + // Positioned( + // top: topOffset! + fabWallTopOffset, + // left: leftOffset! + fabWallLeftOffset, + // child: DownloadButton( + // link: widget.provider == "WallHaven" + // ? WData.walls[widget.index].path.toString() + // : widget.provider == "Prism" + // ? Data.subPrismWalls![widget.index]["wallpaper_url"] + // .toString() + // : widget.provider == "ProfileWall" + // ? Provider.of(context, + // listen: false) + // .profileWalls![widget.index]["wallpaper_url"] + // .toString() + // : widget.provider == "UserProfileWall" + // ? Provider.of( + // context) + // .userProfileWalls![widget.index] + // .data()["wallpaper_url"] + // .toString() + // : widget.provider == "Pexels" + // ? PData + // .wallsP[widget.index].src!["original"] + // .toString() + // : widget.provider == "Liked" + // ? Provider.of( + // context, + // listen: false) + // .liked![widget.index]["url"] + // .toString() + // : PData.wallsC[widget.index] + // .src!["original"] + // .toString(), + // ), + // ), ], ), ); diff --git a/lib/ui/widgets/focussedMenu/searchFocusedMenu.dart b/lib/ui/widgets/focussedMenu/searchFocusedMenu.dart index 69bbf54d..8a3e33b8 100644 --- a/lib/ui/widgets/focussedMenu/searchFocusedMenu.dart +++ b/lib/ui/widgets/focussedMenu/searchFocusedMenu.dart @@ -69,7 +69,7 @@ class _SearchFocusedMenuHolderState extends State { }, child: Container( decoration: BoxDecoration( - color: Theme.of(context).hintColor, + color: Theme.of(context).backgroundColor, borderRadius: const BorderRadius.only( topLeft: Radius.circular(20), bottomRight: Radius.circular(20))), diff --git a/lib/ui/widgets/focussedMenu/searchFocusedMenuDetails.dart b/lib/ui/widgets/focussedMenu/searchFocusedMenuDetails.dart index 1c48f87e..f3f76ee6 100644 --- a/lib/ui/widgets/focussedMenu/searchFocusedMenuDetails.dart +++ b/lib/ui/widgets/focussedMenu/searchFocusedMenuDetails.dart @@ -1,7 +1,9 @@ import 'dart:ui'; + import 'package:Prism/data/pexels/provider/pexelsWithoutProvider.dart' as pdata; import 'package:Prism/data/wallhaven/provider/wallhavenWithoutProvider.dart' as wdata; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; import 'package:Prism/theme/themeModeProvider.dart'; import 'package:Prism/ui/widgets/menuButton/downloadButton.dart'; @@ -10,7 +12,6 @@ import 'package:Prism/ui/widgets/menuButton/setWallpaperButton.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:url_launcher/url_launcher.dart'; -import 'package:Prism/logger/logger.dart'; class SearchFocusedMenuDetails extends StatelessWidget { final String? selectedProvider; @@ -136,7 +137,7 @@ class SearchFocusedMenuDetails extends StatelessWidget { width: childSize!.width, height: childSize!.height * 6 / 8, decoration: BoxDecoration( - color: Theme.of(context).hintColor, + color: Theme.of(context).backgroundColor, borderRadius: const BorderRadius.all(Radius.circular(20.0)), ), @@ -265,7 +266,7 @@ class SearchFocusedMenuDetails extends StatelessWidget { }, child: Container( decoration: BoxDecoration( - color: Theme.of(context).hintColor, + color: Theme.of(context).backgroundColor, borderRadius: const BorderRadius.only( topLeft: Radius.circular(20), bottomRight: Radius.circular(20))), @@ -305,7 +306,7 @@ class SearchFocusedMenuDetails extends StatelessWidget { width: childSize!.width, height: childSize!.height * 6 / 10, decoration: BoxDecoration( - color: Theme.of(context).hintColor, + color: Theme.of(context).backgroundColor, borderRadius: const BorderRadius.all(Radius.circular(20.0)), ), @@ -423,7 +424,7 @@ class SearchFocusedMenuDetails extends StatelessWidget { }, child: Container( decoration: BoxDecoration( - color: Theme.of(context).hintColor, + color: Theme.of(context).backgroundColor, borderRadius: const BorderRadius.only( topLeft: Radius.circular(20), bottomRight: Radius.circular(20))), @@ -472,16 +473,15 @@ class SearchFocusedMenuDetails extends StatelessWidget { trash: false, ), ), - Positioned( - top: topOffset + fabWallTopOffset, - left: leftOffset + fabWallLeftOffset, - child: DownloadButton( - colorChanged: false, - link: selectedProvider == "WallHaven" - ? wdata.wallsS[index].path.toString() - : pdata.wallsPS[index].src!["original"].toString(), - ), - ), + // Positioned( + // top: topOffset + fabWallTopOffset, + // left: leftOffset + fabWallLeftOffset, + // child: DownloadButton( + // link: selectedProvider == "WallHaven" + // ? wdata.wallsS[index].path.toString() + // : pdata.wallsPS[index].src!["original"].toString(), + // ), + // ), ], ), ); diff --git a/lib/ui/widgets/home/collections/collectionsGrid.dart b/lib/ui/widgets/home/collections/collectionsGrid.dart index 3ed867e5..5adb018a 100644 --- a/lib/ui/widgets/home/collections/collectionsGrid.dart +++ b/lib/ui/widgets/home/collections/collectionsGrid.dart @@ -1,5 +1,10 @@ import 'dart:math'; +import 'package:Prism/data/collections/provider/collectionsWithoutProvider.dart' + as CData; +import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; +import 'package:Prism/main.dart' as main; import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/themeModeProvider.dart'; import 'package:Prism/ui/widgets/home/core/inheritedScrollControllerProvider.dart'; @@ -9,11 +14,6 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; import 'package:provider/provider.dart'; -import 'package:Prism/main.dart' as main; -import 'package:Prism/global/globals.dart' as globals; -import 'package:Prism/data/collections/provider/collectionsWithoutProvider.dart' - as CData; -import 'package:Prism/logger/logger.dart'; class CollectionsGrid extends StatefulWidget { @override diff --git a/lib/ui/widgets/home/collections/collectionsViewGrid.dart b/lib/ui/widgets/home/collections/collectionsViewGrid.dart index 009526ed..a592ae8c 100644 --- a/lib/ui/widgets/home/collections/collectionsViewGrid.dart +++ b/lib/ui/widgets/home/collections/collectionsViewGrid.dart @@ -1,15 +1,15 @@ import 'package:Prism/data/collections/provider/collectionsWithoutProvider.dart'; +import 'package:Prism/data/share/createDynamicLink.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/themeModeProvider.dart'; import 'package:Prism/ui/widgets/home/core/inheritedScrollControllerProvider.dart'; -import 'package:Prism/data/share/createDynamicLink.dart'; import 'package:Prism/ui/widgets/home/wallpapers/seeMoreButton.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; import 'package:flutter/services.dart'; import 'package:provider/provider.dart'; -import 'package:Prism/logger/logger.dart'; class CollectionViewGrid extends StatefulWidget { const CollectionViewGrid(); diff --git a/lib/ui/widgets/home/collections/loadingCardsCollection.dart b/lib/ui/widgets/home/collections/loadingCardsCollection.dart index 13d208ca..8e228142 100644 --- a/lib/ui/widgets/home/collections/loadingCardsCollection.dart +++ b/lib/ui/widgets/home/collections/loadingCardsCollection.dart @@ -1,9 +1,9 @@ +import 'package:Prism/logger/logger.dart'; import 'package:Prism/theme/themeModeProvider.dart'; import 'package:Prism/ui/widgets/home/core/inheritedScrollControllerProvider.dart'; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; import 'package:provider/provider.dart'; -import 'package:Prism/logger/logger.dart'; class LoadingCardsCollection extends StatefulWidget { const LoadingCardsCollection({ diff --git a/lib/ui/widgets/home/core/bottomNavBar.dart b/lib/ui/widgets/home/core/bottomNavBar.dart index 41b7f745..9f58ceff 100644 --- a/lib/ui/widgets/home/core/bottomNavBar.dart +++ b/lib/ui/widgets/home/core/bottomNavBar.dart @@ -1,8 +1,12 @@ import 'dart:io'; +import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; +import 'package:Prism/main.dart' as main; import 'package:Prism/routes/router.dart'; import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; +import 'package:Prism/theme/toasts.dart' as toasts; import 'package:Prism/ui/widgets/home/core/inheritedScrollControllerProvider.dart'; import 'package:Prism/ui/widgets/popup/signInPopUp.dart'; import 'package:flutter/foundation.dart'; @@ -10,11 +14,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:google_mobile_ads/google_mobile_ads.dart'; import 'package:image_picker/image_picker.dart'; -import 'package:Prism/global/globals.dart' as globals; -import 'package:Prism/main.dart' as main; import 'package:intl/intl.dart'; -import 'package:Prism/theme/toasts.dart' as toasts; -import 'package:Prism/logger/logger.dart'; class BottomBar extends StatefulWidget { final Widget? child; diff --git a/lib/ui/widgets/home/core/categoriesBar.dart b/lib/ui/widgets/home/core/categoriesBar.dart index f5155620..2a9a327b 100644 --- a/lib/ui/widgets/home/core/categoriesBar.dart +++ b/lib/ui/widgets/home/core/categoriesBar.dart @@ -1,6 +1,11 @@ +import 'package:Prism/analytics/analytics_service.dart'; import 'package:Prism/data/notifications/model/inAppNotifModel.dart'; import 'package:Prism/global/categoryProvider.dart'; +import 'package:Prism/global/globals.dart' as globals; import 'package:Prism/global/svgAssets.dart'; +import 'package:Prism/logger/logger.dart'; +import 'package:Prism/main.dart' as main; +import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; import 'package:Prism/ui/widgets/popup/categoryPopUp.dart'; import 'package:flutter/material.dart'; @@ -8,11 +13,6 @@ import 'package:flutter_svg/svg.dart'; import 'package:hive/hive.dart'; import 'package:in_app_update/in_app_update.dart'; import 'package:provider/provider.dart'; -import 'package:Prism/routes/routing_constants.dart'; -import 'package:Prism/analytics/analytics_service.dart'; -import 'package:Prism/global/globals.dart' as globals; -import 'package:Prism/main.dart' as main; -import 'package:Prism/logger/logger.dart'; class CategoriesBar extends StatefulWidget { const CategoriesBar({ @@ -97,6 +97,7 @@ class _CategoriesBarState extends State { }); } return AppBar( + backgroundColor: Theme.of(context).backgroundColor, automaticallyImplyLeading: false, elevation: 0, titleSpacing: 0, diff --git a/lib/ui/widgets/home/core/colorBar.dart b/lib/ui/widgets/home/core/colorBar.dart index 5b5c69b4..82dff7da 100644 --- a/lib/ui/widgets/home/core/colorBar.dart +++ b/lib/ui/widgets/home/core/colorBar.dart @@ -1,7 +1,7 @@ import 'package:Prism/routes/routing_constants.dart'; +import 'package:Prism/theme/toasts.dart' as toasts; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:Prism/theme/toasts.dart' as toasts; class ColorBar extends StatelessWidget { const ColorBar({ diff --git a/lib/ui/widgets/home/core/headingChipBar.dart b/lib/ui/widgets/home/core/headingChipBar.dart index 6f96fa0c..e34e30b8 100644 --- a/lib/ui/widgets/home/core/headingChipBar.dart +++ b/lib/ui/widgets/home/core/headingChipBar.dart @@ -1,7 +1,7 @@ +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/router.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; import 'package:flutter/material.dart'; -import 'package:Prism/logger/logger.dart'; class HeadingChipBar extends StatefulWidget { final String current; @@ -15,6 +15,7 @@ class _HeadingChipBarState extends State { @override Widget build(BuildContext context) { return AppBar( + backgroundColor: Theme.of(context).backgroundColor, automaticallyImplyLeading: false, titleSpacing: 0, leading: IconButton( diff --git a/lib/ui/widgets/home/wallpapers/clockOverlay.dart b/lib/ui/widgets/home/wallpapers/clockOverlay.dart index 593af2b7..374bac02 100644 --- a/lib/ui/widgets/home/wallpapers/clockOverlay.dart +++ b/lib/ui/widgets/home/wallpapers/clockOverlay.dart @@ -1,7 +1,8 @@ import 'dart:io'; -import 'package:intl/intl.dart'; + import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; +import 'package:intl/intl.dart'; class ClockOverlay extends StatefulWidget { final String? link; diff --git a/lib/ui/widgets/home/wallpapers/colorGrid.dart b/lib/ui/widgets/home/wallpapers/colorGrid.dart index fe8e57c5..a01cbf48 100644 --- a/lib/ui/widgets/home/wallpapers/colorGrid.dart +++ b/lib/ui/widgets/home/wallpapers/colorGrid.dart @@ -1,16 +1,16 @@ import 'package:Prism/data/pexels/provider/pexelsWithoutProvider.dart' as PData; +import 'package:Prism/data/share/createDynamicLink.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/themeModeProvider.dart'; import 'package:Prism/ui/widgets/animated/loader.dart'; import 'package:Prism/ui/widgets/focussedMenu/focusedMenu.dart'; import 'package:Prism/ui/widgets/home/core/inheritedScrollControllerProvider.dart'; -import 'package:Prism/data/share/createDynamicLink.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; import 'package:flutter/services.dart'; import 'package:provider/provider.dart'; -import 'package:Prism/logger/logger.dart'; class ColorGrid extends StatefulWidget { final String provider; diff --git a/lib/ui/widgets/home/wallpapers/colorLoader.dart b/lib/ui/widgets/home/wallpapers/colorLoader.dart index f5723851..5f8c4d27 100644 --- a/lib/ui/widgets/home/wallpapers/colorLoader.dart +++ b/lib/ui/widgets/home/wallpapers/colorLoader.dart @@ -1,8 +1,8 @@ import 'package:Prism/data/pexels/provider/pexelsWithoutProvider.dart' as PData; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/ui/widgets/home/wallpapers/colorGrid.dart'; import 'package:Prism/ui/widgets/home/wallpapers/loading.dart'; import 'package:flutter/material.dart'; -import 'package:Prism/logger/logger.dart'; class ColorLoader extends StatefulWidget { final Future future; diff --git a/lib/ui/widgets/home/wallpapers/loading.dart b/lib/ui/widgets/home/wallpapers/loading.dart index 84a02344..8cf03259 100644 --- a/lib/ui/widgets/home/wallpapers/loading.dart +++ b/lib/ui/widgets/home/wallpapers/loading.dart @@ -1,9 +1,9 @@ +import 'package:Prism/logger/logger.dart'; import 'package:Prism/theme/themeModeProvider.dart'; import 'package:Prism/ui/widgets/home/core/inheritedScrollControllerProvider.dart'; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; import 'package:provider/provider.dart'; -import 'package:Prism/logger/logger.dart'; class LoadingCards extends StatefulWidget { const LoadingCards({ diff --git a/lib/ui/widgets/home/wallpapers/pexelsGrid.dart b/lib/ui/widgets/home/wallpapers/pexelsGrid.dart index d490ccc6..68ffe8ca 100644 --- a/lib/ui/widgets/home/wallpapers/pexelsGrid.dart +++ b/lib/ui/widgets/home/wallpapers/pexelsGrid.dart @@ -1,5 +1,6 @@ import 'package:Prism/data/pexels/provider/pexelsWithoutProvider.dart' as PData; import 'package:Prism/global/categoryProvider.dart'; +import 'package:Prism/global/globals.dart' as globals; import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/themeModeProvider.dart'; import 'package:Prism/ui/widgets/focussedMenu/focusedMenu.dart'; @@ -8,11 +9,10 @@ import 'package:Prism/ui/widgets/home/wallpapers/carouselDots.dart'; import 'package:Prism/ui/widgets/home/wallpapers/pexelsTile.dart'; import 'package:Prism/ui/widgets/home/wallpapers/seeMoreButton.dart'; import 'package:cached_network_image/cached_network_image.dart'; +import 'package:carousel_slider/carousel_slider.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:url_launcher/url_launcher.dart'; -import 'package:carousel_slider/carousel_slider.dart'; -import 'package:Prism/global/globals.dart' as globals; class PexelsGrid extends StatefulWidget { final String? provider; diff --git a/lib/ui/widgets/home/wallpapers/pexelsTile.dart b/lib/ui/widgets/home/wallpapers/pexelsTile.dart index 132349b3..0fd0c0f8 100644 --- a/lib/ui/widgets/home/wallpapers/pexelsTile.dart +++ b/lib/ui/widgets/home/wallpapers/pexelsTile.dart @@ -1,9 +1,9 @@ +import 'package:Prism/data/pexels/provider/pexelsWithoutProvider.dart' as PData; import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/themeModeProvider.dart'; import 'package:Prism/ui/widgets/home/wallpapers/pexelsGrid.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; -import 'package:Prism/data/pexels/provider/pexelsWithoutProvider.dart' as PData; import 'package:provider/provider.dart'; class PexelsTile extends StatelessWidget { diff --git a/lib/ui/widgets/home/wallpapers/wallhavenGrid.dart b/lib/ui/widgets/home/wallpapers/wallhavenGrid.dart index 9e449473..788ba8f1 100644 --- a/lib/ui/widgets/home/wallpapers/wallhavenGrid.dart +++ b/lib/ui/widgets/home/wallpapers/wallhavenGrid.dart @@ -1,6 +1,7 @@ import 'package:Prism/data/wallhaven/provider/wallhavenWithoutProvider.dart' as wData; import 'package:Prism/global/categoryProvider.dart'; +import 'package:Prism/global/globals.dart' as globals; import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/themeModeProvider.dart'; import 'package:Prism/ui/widgets/focussedMenu/focusedMenu.dart'; @@ -11,9 +12,8 @@ import 'package:Prism/ui/widgets/home/wallpapers/wallhavenTile.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:carousel_slider/carousel_slider.dart'; import 'package:flutter/material.dart'; -import 'package:url_launcher/url_launcher.dart'; import 'package:provider/provider.dart'; -import 'package:Prism/global/globals.dart' as globals; +import 'package:url_launcher/url_launcher.dart'; class WallHavenGrid extends StatefulWidget { final String? provider; diff --git a/lib/ui/widgets/home/wallpapers/wallhavenTile.dart b/lib/ui/widgets/home/wallpapers/wallhavenTile.dart index bf002f07..f7ef45c1 100644 --- a/lib/ui/widgets/home/wallpapers/wallhavenTile.dart +++ b/lib/ui/widgets/home/wallpapers/wallhavenTile.dart @@ -1,10 +1,10 @@ +import 'package:Prism/data/wallhaven/provider/wallhavenWithoutProvider.dart' + as wData; import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/themeModeProvider.dart'; import 'package:Prism/ui/widgets/home/wallpapers/wallhavenGrid.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; -import 'package:Prism/data/wallhaven/provider/wallhavenWithoutProvider.dart' - as wData; import 'package:provider/provider.dart'; class WallhavenTile extends StatelessWidget { diff --git a/lib/ui/widgets/home/wallpapers/wallpaperGrid.dart b/lib/ui/widgets/home/wallpapers/wallpaperGrid.dart index 88c82462..e354e8d2 100644 --- a/lib/ui/widgets/home/wallpapers/wallpaperGrid.dart +++ b/lib/ui/widgets/home/wallpapers/wallpaperGrid.dart @@ -1,21 +1,21 @@ +import 'package:Prism/data/prism/provider/prismWithoutProvider.dart' as Data; +import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/themeModeProvider.dart'; import 'package:Prism/ui/widgets/focussedMenu/focusedMenu.dart'; -import 'package:Prism/ui/widgets/premiumBanners/wallsCarousel.dart'; -import 'package:Prism/ui/widgets/premiumBanners/walls.dart'; import 'package:Prism/ui/widgets/home/core/inheritedScrollControllerProvider.dart'; import 'package:Prism/ui/widgets/home/wallpapers/carouselDots.dart'; import 'package:Prism/ui/widgets/home/wallpapers/seeMoreButton.dart'; import 'package:Prism/ui/widgets/home/wallpapers/wallpaperTile.dart'; import 'package:Prism/ui/widgets/popup/signInPopUp.dart'; +import 'package:Prism/ui/widgets/premiumBanners/walls.dart'; +import 'package:Prism/ui/widgets/premiumBanners/wallsCarousel.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:carousel_slider/carousel_slider.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:Prism/data/prism/provider/prismWithoutProvider.dart' as Data; -import 'package:Prism/global/globals.dart' as globals; import 'package:url_launcher/url_launcher.dart'; -import 'package:Prism/logger/logger.dart'; class WallpaperGrid extends StatefulWidget { final String? provider; diff --git a/lib/ui/widgets/home/wallpapers/wallpaperLoader.dart b/lib/ui/widgets/home/wallpapers/wallpaperLoader.dart index 8e54261f..fc0986ee 100644 --- a/lib/ui/widgets/home/wallpapers/wallpaperLoader.dart +++ b/lib/ui/widgets/home/wallpapers/wallpaperLoader.dart @@ -1,7 +1,7 @@ +import 'package:Prism/logger/logger.dart'; import 'package:Prism/ui/widgets/home/wallpapers/loading.dart'; import 'package:Prism/ui/widgets/home/wallpapers/wallpaperGrid.dart'; import 'package:flutter/material.dart'; -import 'package:Prism/logger/logger.dart'; class WallpaperLoader extends StatefulWidget { final Future future; diff --git a/lib/ui/widgets/home/wallpapers/wallpaperTile.dart b/lib/ui/widgets/home/wallpapers/wallpaperTile.dart index cadd1d2a..dbaaa257 100644 --- a/lib/ui/widgets/home/wallpapers/wallpaperTile.dart +++ b/lib/ui/widgets/home/wallpapers/wallpaperTile.dart @@ -1,15 +1,15 @@ import 'dart:developer'; +import 'package:Prism/data/prism/provider/prismWithoutProvider.dart' as Data; +import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/themeModeProvider.dart'; import 'package:Prism/ui/widgets/home/wallpapers/wallpaperGrid.dart'; import 'package:Prism/ui/widgets/popup/signInPopUp.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; -import 'package:Prism/data/prism/provider/prismWithoutProvider.dart' as Data; import 'package:provider/provider.dart'; -import 'package:Prism/global/globals.dart' as globals; -import 'package:Prism/logger/logger.dart'; class WallpaperTile extends StatelessWidget { const WallpaperTile({ diff --git a/lib/ui/widgets/menuButton/downloadButton.dart b/lib/ui/widgets/menuButton/downloadButton.dart index c97b7fee..f28ff3ae 100644 --- a/lib/ui/widgets/menuButton/downloadButton.dart +++ b/lib/ui/widgets/menuButton/downloadButton.dart @@ -1,29 +1,200 @@ +import 'dart:io'; +import 'dart:math'; +import 'dart:isolate'; +import 'dart:ui'; + import 'package:Prism/analytics/analytics_service.dart'; import 'package:Prism/data/ads/adsNotifier.dart'; -import 'package:Prism/theme/jam_icons_icons.dart'; +import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/routing_constants.dart'; +import 'package:Prism/theme/jam_icons_icons.dart'; +import 'package:Prism/theme/toasts.dart' as toasts; import 'package:Prism/ui/widgets/popup/signInPopUp.dart'; import 'package:animations/animations.dart'; import 'package:device_info/device_info.dart'; import 'package:flare_flutter/flare_actor.dart'; +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:Prism/theme/toasts.dart' as toasts; import 'package:flutter/services.dart'; -import 'package:Prism/main.dart' as main; +import 'package:flutter_downloader/flutter_downloader.dart'; import 'package:gallery_saver/gallery_saver.dart'; +import 'package:path_provider/path_provider.dart'; import 'package:permission_handler/permission_handler.dart'; -import 'package:Prism/global/globals.dart' as globals; -import 'package:flutter/foundation.dart'; -import 'package:Prism/logger/logger.dart'; import 'package:provider/provider.dart'; +class DownloadButtonNew extends StatefulWidget { + final String link; + final bool colorChanged; + final bool loading; + final int progress; + final String path; + final Future Function()? screenshotCallback; + + const DownloadButtonNew({ + required this.link, + required this.loading, + required this.progress, + required this.path, + required this.colorChanged, + required this.screenshotCallback, + Key? key, + }) : super(key: key); + + @override + _DownloadButtonNewState createState() => _DownloadButtonNewState(); +} + +class _DownloadButtonNewState extends State { + ReceivePort _port = ReceivePort(); + + @override + void initState() { + super.initState(); + IsolateNameServer.registerPortWithName( + _port.sendPort, 'downloader_send_port'); + _port.listen((dynamic data) { + String id = data[0] as String; + DownloadTaskStatus status = data[1] as DownloadTaskStatus; + int progress = data[2] as int; + setState(() {}); + }); + + FlutterDownloader.registerCallback(downloadCallback); + } + + static void downloadCallback( + String id, DownloadTaskStatus status, int progress) { + final SendPort send = + IsolateNameServer.lookupPortByName('downloader_send_port')!; + send.send([id, status, progress]); + } + + @override + void dispose() { + IsolateNameServer.removePortNameMapping('downloader_send_port'); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: () async { + if (!widget.loading) { + if (globals.prismUser.loggedIn == true) { + if (globals.prismUser.premium == true) { + finalDownload(widget.link, widget.path); + } else { + showDownloadPopup(context, () { + logger.d("Download"); + finalDownload(widget.link, widget.path); + }); + } + } else { + showDownloadPopup(context, () { + logger.d("Download"); + finalDownload(widget.link, widget.path); + }); + } + } else { + toasts.error("Wait for download to complete!"); + } + }, + child: Stack( + children: [ + Container( + decoration: BoxDecoration( + color: Theme.of(context).primaryColor, + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(.25), + blurRadius: 4, + offset: const Offset(0, 4)) + ], + borderRadius: BorderRadius.circular(500), + ), + padding: const EdgeInsets.all(17), + child: Icon( + JamIcons.download, + color: Theme.of(context).accentColor, + size: 20, + ), + ), + Positioned( + top: 0, + left: 0, + height: 53, + width: 53, + child: widget.loading + ? const CircularProgressIndicator() + : Container()) + ], + ), + ); + } + + void showPremiumPopUp(Function func) { + if (globals.prismUser.premium == false) { + toasts.codeSend("Variants are a premium feature."); + Navigator.pushNamed(context, premiumRoute); + } else { + func(); + } + } + + Future finalDownload(String link, String path) async { + if (await Permission.storage.request().isGranted) { + String url = link; + logger.d('Already not downloaded, downloading $url'); + final r = Random(); + String rNum = ""; + for (var i = 0; i < 6; i++) { + rNum = "$rNum${r.nextInt(9)}"; + } + if (widget.colorChanged) { + final File? file = await widget.screenshotCallback?.call(); + url = file?.path ?? link; + GallerySaver.saveImage(url, albumName: "Prism").then((value) { + analytics.logEvent( + name: 'download_wallpaper', parameters: {'link': widget.link}); + toasts.codeSend("Wall Downloaded in Pictures/Prism!"); + }).catchError((e, StackTrace s) { + logger.e(e, s, s); + }); + } else { + if (Platform.isAndroid) { + final androidInfo = await DeviceInfoPlugin().androidInfo; + logger.d(androidInfo.version.sdkInt); + final taskId = await FlutterDownloader.enqueue( + url: url, + savedDir: path, + fileName: + "${url.split('/').last.toString().split(".")[0]}$rNum.${url.split('/').last.toString().split(".")[1]}", + saveInPublicStorage: + (androidInfo.version.sdkInt >= 29) ? true : false, + ); + logger.d('Downloaded wallpaper, saving taskID $taskId $url'); + } else { + final taskId = await FlutterDownloader.enqueue( + url: url, + savedDir: path, + fileName: + "${url.split('/').last.toString().split(".")[0]}$rNum.${url.split('/').last.toString().split(".")[1]}", + ); + logger.d('Downloaded wallpaper, saving taskID $taskId $url'); + } + } + } else { + toasts.error("No storage permission"); + } + } +} + class DownloadButton extends StatefulWidget { final String? link; - final bool colorChanged; const DownloadButton({ required this.link, - required this.colorChanged, Key? key, }) : super(key: key); @@ -33,14 +204,36 @@ class DownloadButton extends StatefulWidget { class _DownloadButtonState extends State { late bool isLoading; + ReceivePort _port = ReceivePort(); @override void initState() { isLoading = false; + IsolateNameServer.registerPortWithName( + _port.sendPort, 'downloader_send_port'); + _port.listen((dynamic data) { + String id = data[0] as String; + DownloadTaskStatus status = data[1] as DownloadTaskStatus; + int progress = data[2] as int; + setState(() {}); + }); + + FlutterDownloader.registerCallback(downloadCallback); super.initState(); } - static const platform = MethodChannel('flutter.prism.set_wallpaper'); + static void downloadCallback( + String id, DownloadTaskStatus status, int progress) { + final SendPort send = + IsolateNameServer.lookupPortByName('downloader_send_port')!; + send.send([id, status, progress]); + } + + @override + void dispose() { + IsolateNameServer.removePortNameMapping('downloader_send_port'); + super.dispose(); + } @override Widget build(BuildContext context) { @@ -49,17 +242,17 @@ class _DownloadButtonState extends State { if (!isLoading) { if (globals.prismUser.loggedIn == true) { if (globals.prismUser.premium == true) { - onDownload(); + onDownload(widget.link!); } else { showDownloadPopup(context, () { logger.d("Download"); - onDownload(); + onDownload(widget.link!); }); } } else { showDownloadPopup(context, () { logger.d("Download"); - onDownload(); + onDownload(widget.link!); }); } } else { @@ -107,132 +300,51 @@ class _DownloadButtonState extends State { } } - Future onDownload() async { - final status = await Permission.storage.status; - if (!status.isGranted) { - await Permission.storage.request(); - } - setState(() { - isLoading = true; - }); - logger.d(widget.link); - - final androidInfo = await DeviceInfoPlugin().androidInfo; - final sdkInt = androidInfo.version.sdkInt; - logger.d('(SDK $sdkInt)'); - // toasts.codeSend("Starting Download"); - // main.localNotification.createDownloadNotification(); - // if (sdkInt >= 30) { - // if (widget.link!.contains("com.hash.prism")) { - // await platform.invokeMethod( - // 'save_image_file', {"link": widget.link}).then((value) { - // if (value as bool) { - // analytics.logEvent( - // name: 'download_wallpaper', parameters: {'link': widget.link}); - // toasts.codeSend("Wall Downloaded in Pictures/Prism!"); - // } else { - // toasts.error("Couldn't download! Please Retry!"); - // } - // setState(() { - // isLoading = false; - // }); - // main.localNotification.cancelDownloadNotification(); - // }).catchError((e) { - // logger.d(e.toString()); - // setState(() { - // isLoading = false; - // }); - // }); - // } else { - // await platform - // .invokeMethod('save_image', {"link": widget.link}).then((value) { - // if (value as bool) { - // analytics.logEvent( - // name: 'download_wallpaper', parameters: {'link': widget.link}); - // toasts.codeSend("Wall Downloaded in Pictures/Prism!"); - // } else { - // toasts.error("Couldn't download! Please Retry!"); - // } - // setState(() { - // isLoading = false; - // }); - // main.localNotification.cancelDownloadNotification(); - // }).catchError((e) { - // logger.d(e.toString()); - // setState(() { - // isLoading = false; - // }); - // }); - // } - // } else { - if (widget.link!.contains("com.hash.prism")) { - debugPrint("Downloading using Picasso"); - await platform - .invokeMethod('save_image_file', {"link": widget.link}).then((value) { - if (value as bool) { - analytics.logEvent( - name: 'download_wallpaper', parameters: {'link': widget.link}); - toasts.codeSend("Wall Downloaded in Pictures/Prism!"); - } else { - toasts.error("Couldn't download! Please Retry!"); + Future onDownload(String link) async { + if (await Permission.storage.request().isGranted) { + final String url = link; + String? externalStorageDirPath; + if (Platform.isAndroid) { + try { + externalStorageDirPath = "/storage/emulated/0/Download"; + } catch (e) { + final directory = await getExternalStorageDirectory(); + externalStorageDirPath = directory?.path; } - setState(() { - isLoading = false; - }); - // main.localNotification.cancelDownloadNotification(); - }).catchError((e) { - logger.d(e.toString()); - setState(() { - isLoading = false; - }); - }); - // GallerySaver.saveImage(widget.link!, albumName: "Prism").then((value) { - // analytics.logEvent( - // name: 'download_wallpaper', parameters: {'link': widget.link}); - // toasts.codeSend("Wall Downloaded in Pictures/Prism!"); - // setState(() { - // isLoading = false; - // }); - // // main.localNotification.cancelDownloadNotification(); - // }).catchError((e) { - // setState(() { - // isLoading = false; - // }); - // // TODO Cancel all - // // main.localNotification.cancelDownloadNotification(); - // }); + } else if (Platform.isIOS) { + externalStorageDirPath = + (await getApplicationDocumentsDirectory()).absolute.path; + } + logger.d('Already not downloaded, downloading $url'); + final r = Random(); + String rNum = ""; + for (var i = 0; i < 6; i++) { + rNum = "$rNum${r.nextInt(9)}"; + } + if (Platform.isAndroid) { + final androidInfo = await DeviceInfoPlugin().androidInfo; + logger.d(androidInfo.version.sdkInt); + final taskId = await FlutterDownloader.enqueue( + url: url, + savedDir: externalStorageDirPath ?? "", + fileName: + "${url.split('/').last.toString().split(".")[0]}$rNum.${url.split('/').last.toString().split(".")[1]}", + saveInPublicStorage: + (androidInfo.version.sdkInt >= 29) ? true : false, + ); + logger.d('Downloaded wallpaper, saving taskID $taskId $url'); + } else { + final taskId = await FlutterDownloader.enqueue( + url: url, + savedDir: externalStorageDirPath ?? "", + fileName: + "${url.split('/').last.toString().split(".")[0]}$rNum.${url.split('/').last.toString().split(".")[1]}", + ); + logger.d('Downloaded wallpaper, saving taskID $taskId $url'); + } } else { - debugPrint("Downloading using Platform Method"); - Future.delayed(const Duration(seconds: 2)).then((value) => setState(() { - isLoading = false; - })); - platform.invokeMethod('download_image_dm', { - "link": widget.link, - "filename": widget.link! - .split('/') - .last - .replaceAll(".jpg", "") - .replaceAll(".png", "") - }).then((value) { - toasts.codeSend("Wall Downloaded in Pictures/Prism!"); - analytics.logEvent( - name: 'download_wallpaper', parameters: {'link': widget.link}); - }); + toasts.error("No storage permission"); } - // .then((value) { - // if (value as bool) { - // toasts.codeSend("Wall Downloaded in Pictures/Prism!"); - // } else { - // toasts.error("Couldn't download! Please Retry!"); - // } - // main.localNotification.cancelDownloadNotification(); - // }).catchError((e) { - // logger.d(e.toString()); - // setState(() { - // isLoading = false; - // }); - // }); - // } } } diff --git a/lib/ui/widgets/menuButton/editButton.dart b/lib/ui/widgets/menuButton/editButton.dart index 133203a0..c06adf3a 100644 --- a/lib/ui/widgets/menuButton/editButton.dart +++ b/lib/ui/widgets/menuButton/editButton.dart @@ -2,13 +2,13 @@ import 'dart:io'; import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; +import 'package:Prism/theme/toasts.dart' as toasts; +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:path_provider/path_provider.dart'; -import 'package:image/image.dart' as imagelib; import 'package:http/http.dart' as http; +import 'package:image/image.dart' as imagelib; import 'package:path/path.dart' as path; -import 'package:flutter/foundation.dart'; -import 'package:Prism/theme/toasts.dart' as toasts; +import 'package:path_provider/path_provider.dart'; class EditButton extends StatefulWidget { final String? url; diff --git a/lib/ui/widgets/menuButton/favIconButton.dart b/lib/ui/widgets/menuButton/favIconButton.dart index 9614c2bc..36e3dca8 100644 --- a/lib/ui/widgets/menuButton/favIconButton.dart +++ b/lib/ui/widgets/menuButton/favIconButton.dart @@ -2,12 +2,12 @@ import 'package:Prism/analytics/analytics_service.dart'; import 'package:Prism/data/favourites/provider/favouriteProvider.dart'; import 'package:Prism/data/pexels/model/wallpaperp.dart'; import 'package:Prism/data/wallhaven/model/wallpaper.dart'; +import 'package:Prism/global/globals.dart' as globals; import 'package:Prism/ui/widgets/animated/favouriteIcon.dart'; import 'package:Prism/ui/widgets/popup/signInPopUp.dart'; import 'package:flutter/material.dart'; import 'package:hive/hive.dart'; import 'package:provider/provider.dart'; -import 'package:Prism/global/globals.dart' as globals; class FavIconButton extends StatefulWidget { final String? id; diff --git a/lib/ui/widgets/menuButton/favWallpaperButton.dart b/lib/ui/widgets/menuButton/favWallpaperButton.dart index e1670a9e..42eb2c7f 100644 --- a/lib/ui/widgets/menuButton/favWallpaperButton.dart +++ b/lib/ui/widgets/menuButton/favWallpaperButton.dart @@ -2,14 +2,14 @@ import 'package:Prism/analytics/analytics_service.dart'; import 'package:Prism/data/favourites/provider/favouriteProvider.dart'; import 'package:Prism/data/pexels/model/wallpaperp.dart'; import 'package:Prism/data/wallhaven/model/wallpaper.dart'; +import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; +import 'package:Prism/routes/router.dart'; import 'package:Prism/ui/widgets/animated/favouriteIcon.dart'; import 'package:Prism/ui/widgets/popup/signInPopUp.dart'; import 'package:flutter/material.dart'; import 'package:hive/hive.dart'; import 'package:provider/provider.dart'; -import 'package:Prism/routes/router.dart'; -import 'package:Prism/global/globals.dart' as globals; -import 'package:Prism/logger/logger.dart'; class FavouriteWallpaperButton extends StatefulWidget { final String id; diff --git a/lib/ui/widgets/menuButton/setWallpaperButton.dart b/lib/ui/widgets/menuButton/setWallpaperButton.dart index 41037673..983f60ec 100644 --- a/lib/ui/widgets/menuButton/setWallpaperButton.dart +++ b/lib/ui/widgets/menuButton/setWallpaperButton.dart @@ -1,19 +1,23 @@ -import 'dart:io' show Platform; +import 'dart:io'; + import 'package:Prism/analytics/analytics_service.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; +import 'package:Prism/theme/toasts.dart' as toasts; +import 'package:async_wallpaper/async_wallpaper.dart'; import 'package:device_info/device_info.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:Prism/theme/toasts.dart' as toasts; -import 'package:Prism/logger/logger.dart'; class SetWallpaperButton extends StatefulWidget { final String? url; final bool colorChanged; + final Future Function()? screenshotCallback; const SetWallpaperButton({ Key? key, required this.url, required this.colorChanged, + this.screenshotCallback, }) : super(key: key); @override @@ -21,28 +25,28 @@ class SetWallpaperButton extends StatefulWidget { } class _SetWallpaperButtonState extends State { - static const platform = MethodChannel("flutter.prism.set_wallpaper"); bool isLoading = false; + late String url; + + @override + void initState() { + super.initState(); + url = widget.url ?? ""; + } Future _setWallPaper() async { - bool? result; + String? result; try { - if (widget.url!.contains("com.hash.prism")) { - result = - await platform.invokeMethod("set_wallpaper_file", { - 'url': widget.url, - }); - } else if (widget.url!.contains("/0/")) { - result = - await platform.invokeMethod("set_wallpaper_file", { - 'url': "/${widget.url!.replaceAll("/0//", "/0/")}", - }); + if (widget.colorChanged) { + result = await AsyncWallpaper.setWallpaperFromFileNative( + url, + ); } else { - result = await platform.invokeMethod("set_wallpaper", { - 'url': widget.url, - }); + result = await AsyncWallpaper.setWallpaperNative( + url, + ); } - if (result!) { + if (result == 'Wallpaper set') { logger.d("Success"); analytics.logEvent( name: 'set_wall', @@ -64,25 +68,20 @@ class _SetWallpaperButtonState extends State { } Future _setBothWallPaper() async { - bool? result; + String? result; try { - if (widget.url!.contains("com.hash.prism")) { - result = await platform - .invokeMethod("set_both_wallpaper_file", { - 'url': widget.url, - }); - } else if (widget.url!.contains("/0/")) { - result = await platform - .invokeMethod("set_both_wallpaper_file", { - 'url': "/${widget.url!.replaceAll("/0//", "/0/")}", - }); + if (widget.colorChanged) { + result = await AsyncWallpaper.setWallpaperFromFile( + url, + AsyncWallpaper.BOTH_SCREENS, + ); } else { - result = - await platform.invokeMethod("set_both_wallpaper", { - 'url': widget.url, - }); + result = await AsyncWallpaper.setWallpaper( + url, + AsyncWallpaper.BOTH_SCREENS, + ); } - if (result!) { + if (result == 'Wallpaper set') { logger.d("Success"); analytics.logEvent( name: 'set_wall', @@ -105,25 +104,20 @@ class _SetWallpaperButtonState extends State { } Future _setLockWallPaper() async { - bool? result; + String? result; try { - if (widget.url!.contains("com.hash.prism")) { - result = await platform - .invokeMethod("set_lock_wallpaper_file", { - 'url': widget.url, - }); - } else if (widget.url!.contains("/0/")) { - result = await platform - .invokeMethod("set_lock_wallpaper_file", { - 'url': "/${widget.url!.replaceAll("/0//", "/0/")}", - }); + if (widget.colorChanged) { + result = await AsyncWallpaper.setWallpaperFromFile( + url, + AsyncWallpaper.LOCK_SCREEN, + ); } else { - result = - await platform.invokeMethod("set_lock_wallpaper", { - 'url': widget.url, - }); + result = await AsyncWallpaper.setWallpaper( + url, + AsyncWallpaper.LOCK_SCREEN, + ); } - if (result!) { + if (result == 'Wallpaper set') { logger.d("Success"); analytics.logEvent( name: 'set_wall', @@ -146,25 +140,20 @@ class _SetWallpaperButtonState extends State { } Future _setHomeWallPaper() async { - bool? result; + String? result; try { - if (widget.url!.contains("com.hash.prism")) { - result = await platform - .invokeMethod("set_home_wallpaper_file", { - 'url': widget.url, - }); - } else if (widget.url!.contains("/0/")) { - result = await platform - .invokeMethod("set_home_wallpaper_file", { - 'url': "/${widget.url!.replaceAll("/0//", "/0/")}", - }); + if (widget.colorChanged) { + result = await AsyncWallpaper.setWallpaperFromFile( + url, + AsyncWallpaper.HOME_SCREEN, + ); } else { - result = - await platform.invokeMethod("set_home_wallpaper", { - 'url': widget.url, - }); + result = await AsyncWallpaper.setWallpaper( + url, + AsyncWallpaper.HOME_SCREEN, + ); } - if (result!) { + if (result == 'Wallpaper set') { logger.d("Success"); analytics.logEvent( name: 'set_wall', @@ -189,8 +178,10 @@ class _SetWallpaperButtonState extends State { Future onPaint() async { HapticFeedback.vibrate(); if (widget.colorChanged) { + final File file = await widget.screenshotCallback?.call() as File; setState(() { isLoading = true; + url = file.path; }); Future.delayed(const Duration(seconds: 1)) .then((value) => _setWallPaper()); @@ -206,21 +197,6 @@ class _SetWallpaperButtonState extends State { @override Widget build(BuildContext context) { return GestureDetector( - onLongPress: () async { - if (Platform.isAndroid) { - final androidInfo = await DeviceInfoPlugin().androidInfo; - final sdkInt = androidInfo.version.sdkInt; - logger.d('(SDK $sdkInt)'); - isLoading - ? logger.d("") - : sdkInt >= 24 - ? onPaint() - : toasts - .error("Crop is supported for Android 7.0 and above!"); - } else { - toasts.error("Sorry crop is supported for Android 7.0 and above!"); - } - }, onTap: () { isLoading ? logger.d("") @@ -228,33 +204,76 @@ class _SetWallpaperButtonState extends State { isScrollControlled: true, context: context, builder: (context) => SetOptionsPanel( - onTap1: () { + onTap1: () async { + logger.d(widget.colorChanged); HapticFeedback.vibrate(); Navigator.of(context).pop(); + File? file; + if (widget.colorChanged) { + file = await widget.screenshotCallback?.call() as File; + } setState(() { isLoading = true; + if (widget.colorChanged && file != null) { + url = file.path; + } }); Future.delayed(const Duration(seconds: 1)) .then((value) => _setHomeWallPaper()); }, - onTap2: () { + onTap2: () async { + logger.d(widget.colorChanged); HapticFeedback.vibrate(); Navigator.of(context).pop(); + File? file; + if (widget.colorChanged) { + file = await widget.screenshotCallback?.call() as File; + } setState(() { isLoading = true; + if (widget.colorChanged && file != null) { + url = file.path; + } }); Future.delayed(const Duration(seconds: 1)) .then((value) => _setLockWallPaper()); }, - onTap3: () { + onTap3: () async { + logger.d(widget.colorChanged); HapticFeedback.vibrate(); Navigator.of(context).pop(); + File? file; + if (widget.colorChanged) { + file = await widget.screenshotCallback?.call() as File; + } setState(() { isLoading = true; + if (widget.colorChanged && file != null) { + url = file.path; + } }); Future.delayed(const Duration(seconds: 1)) .then((value) => _setBothWallPaper()); }, + onTap4: () async { + logger.d(widget.colorChanged); + HapticFeedback.vibrate(); + Navigator.of(context).pop(); + if (Platform.isAndroid) { + final androidInfo = await DeviceInfoPlugin().androidInfo; + final sdkInt = androidInfo.version.sdkInt; + logger.d('(SDK $sdkInt)'); + isLoading + ? logger.d("") + : sdkInt >= 24 + ? onPaint() + : toasts.error( + "Crop is supported for Android 7.0 and above!"); + } else { + toasts.error( + "Sorry crop is supported for Android 7.0 and above!"); + } + }, ), ); }, @@ -295,11 +314,13 @@ class SetOptionsPanel extends StatefulWidget { final Function? onTap1; final Function? onTap2; final Function? onTap3; + final Function? onTap4; const SetOptionsPanel({ Key? key, this.onTap1, this.onTap2, this.onTap3, + this.onTap4, }) : super(key: key); @override @@ -316,8 +337,8 @@ class _SetOptionsPanelState extends State { Widget build(BuildContext context) { final width = MediaQuery.of(context).size.width * 0.85; return Container( - height: MediaQuery.of(context).size.height / 2 > 400 - ? MediaQuery.of(context).size.height / 2 + height: MediaQuery.of(context).size.height / 1.7 > 400 + ? MediaQuery.of(context).size.height / 1.7 : 400, decoration: BoxDecoration( color: Theme.of(context).primaryColor, @@ -446,6 +467,38 @@ class _SetOptionsPanelState extends State { ), ), ), + Padding( + padding: const EdgeInsets.all(8.0), + child: GestureDetector( + onTap: () { + widget.onTap4!(); + }, + child: SizedBox( + width: width - 20, + height: 60, + child: Container( + width: width - 14, + height: 60, + decoration: BoxDecoration( + color: Theme.of(context).errorColor.withOpacity(0.2), + border: Border.all( + color: Theme.of(context).errorColor, width: 3), + borderRadius: BorderRadius.circular(20), + ), + child: Center( + child: Text( + "External...", + style: TextStyle( + fontSize: 16, + color: Theme.of(context).accentColor, + fontWeight: FontWeight.bold, + ), + ), + ), + ), + ), + ), + ), ], ), const Spacer(flex: 2), diff --git a/lib/ui/widgets/menuButton/shareButton.dart b/lib/ui/widgets/menuButton/shareButton.dart index 536cc803..dfc44e9b 100644 --- a/lib/ui/widgets/menuButton/shareButton.dart +++ b/lib/ui/widgets/menuButton/shareButton.dart @@ -1,10 +1,10 @@ import 'package:Prism/analytics/analytics_service.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; import 'package:firebase_dynamic_links/firebase_dynamic_links.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:share/share.dart'; -import 'package:Prism/logger/logger.dart'; class ShareButton extends StatefulWidget { final String? id; diff --git a/lib/ui/widgets/popup/categoryPopUp.dart b/lib/ui/widgets/popup/categoryPopUp.dart index 6bf12a50..efbfa01e 100644 --- a/lib/ui/widgets/popup/categoryPopUp.dart +++ b/lib/ui/widgets/popup/categoryPopUp.dart @@ -1,12 +1,12 @@ import 'package:Prism/global/categoryMenu.dart'; import 'package:Prism/global/categoryProvider.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; +import 'package:Prism/ui/pages/home/core/pageManager.dart' as PM; import 'package:animations/animations.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:Prism/ui/pages/home/core/pageManager.dart' as PM; -import 'package:Prism/logger/logger.dart'; void showCategories(BuildContext context, CategoryMenu initialValue) { final controller = ScrollController(); diff --git a/lib/ui/widgets/popup/changelogPopUp.dart b/lib/ui/widgets/popup/changelogPopUp.dart index d34a59fe..a07d5cf9 100644 --- a/lib/ui/widgets/popup/changelogPopUp.dart +++ b/lib/ui/widgets/popup/changelogPopUp.dart @@ -1,11 +1,7 @@ -import 'package:Prism/theme/darkThemeModel.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; -import 'package:Prism/theme/theme.dart'; -import 'package:Prism/theme/themeModeProvider.dart'; import 'package:animations/animations.dart'; import 'package:flare_flutter/flare_actor.dart'; import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; import 'package:url_launcher/url_launcher.dart'; void showChangelog(BuildContext context, Function func) { @@ -46,6 +42,13 @@ void showChangelog(BuildContext context, Function func) { child: Column( mainAxisSize: MainAxisSize.min, children: const [ + ChangeVersion(number: 'v2.7.0'), + Change( + icon: JamIcons.download, + text: "Fix wallpaper download bugs."), + Change( + icon: JamIcons.eye, + text: "Temporarily removed themes for now."), ChangeVersion(number: 'v2.6.9'), Change( icon: JamIcons.eye, @@ -205,16 +208,18 @@ class Change extends StatelessWidget { Icon( icon, size: 22, - color: Provider.of(context) - .getCurrentModeStyle( - MediaQuery.of(context).platformBrightness) == - "Dark" && - Provider.of(context).currentTheme == - kDarkTheme2 - ? Theme.of(context).errorColor == Colors.black - ? Theme.of(context).accentColor - : Theme.of(context).errorColor - : Theme.of(context).errorColor, + color: + // Provider.of(context) + // .getCurrentModeStyle( + // MediaQuery.of(context).platformBrightness) == + // "Dark" && + // Provider.of(context).currentTheme == + // kDarkTheme2 + // ? Theme.of(context).errorColor == Colors.black + // ? Theme.of(context).accentColor + // : Theme.of(context).errorColor + // : + Theme.of(context).errorColor, ), const SizedBox( width: 20, diff --git a/lib/ui/widgets/popup/colorsPopUp.dart b/lib/ui/widgets/popup/colorsPopUp.dart index a9cbe401..a1ea5707 100644 --- a/lib/ui/widgets/popup/colorsPopUp.dart +++ b/lib/ui/widgets/popup/colorsPopUp.dart @@ -1,10 +1,10 @@ +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/router.dart'; import 'package:Prism/routes/routing_constants.dart'; import 'package:animations/animations.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flare_flutter/flare_actor.dart'; import 'package:flutter/material.dart'; -import 'package:Prism/logger/logger.dart'; final databaseReference = FirebaseFirestore.instance; List colors = [ diff --git a/lib/ui/widgets/popup/contriPopUp.dart b/lib/ui/widgets/popup/contriPopUp.dart index 9b91c0da..d9ff984f 100644 --- a/lib/ui/widgets/popup/contriPopUp.dart +++ b/lib/ui/widgets/popup/contriPopUp.dart @@ -1,3 +1,4 @@ +import 'package:Prism/logger/logger.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; import 'package:Prism/ui/pages/profile/aboutScreen.dart'; import 'package:Prism/ui/widgets/animated/loader.dart'; @@ -5,7 +6,6 @@ import 'package:animations/animations.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:github/github.dart'; -import 'package:Prism/logger/logger.dart'; void showContributorDetails(BuildContext context, String username) { Future getUser(String username) async { diff --git a/lib/ui/widgets/popup/editProfilePanel.dart b/lib/ui/widgets/popup/editProfilePanel.dart index a105f528..72517452 100644 --- a/lib/ui/widgets/popup/editProfilePanel.dart +++ b/lib/ui/widgets/popup/editProfilePanel.dart @@ -4,17 +4,17 @@ import 'dart:typed_data'; import 'package:Prism/auth/google_auth.dart'; import 'package:Prism/gitkey.dart'; +import 'package:Prism/global/globals.dart' as globals; import 'package:Prism/global/svgAssets.dart'; import 'package:Prism/logger/logger.dart'; +import 'package:Prism/main.dart' as main; import 'package:Prism/routes/router.dart'; +import 'package:Prism/theme/jam_icons_icons.dart'; +import 'package:Prism/theme/toasts.dart' as toasts; import 'package:animations/animations.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; -import 'package:Prism/global/globals.dart' as globals; -import 'package:Prism/theme/toasts.dart' as toasts; import 'package:flutter/material.dart'; -import 'package:Prism/theme/jam_icons_icons.dart'; -import 'package:Prism/main.dart' as main; import 'package:flutter_image_compress/flutter_image_compress.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:github/github.dart'; @@ -233,11 +233,11 @@ class _EditProfilePanelState extends State { linkIcons .sort((a, b) => a['name'].toString().compareTo(b['name'].toString())); final links = globals.prismUser.links; - linkIcons.forEach((element) { + for (final element in linkIcons) { if (links[element['name']] != "" && links[element['name']] != null) { element['value'] = links[element['name']]; } - }); + } _link = linkIcons[3]; bioController = TextEditingController(text: globals.prismUser.bio); usernameController = @@ -424,8 +424,12 @@ class _EditProfilePanelState extends State { onWillPop: onWillPop, child: Scaffold( appBar: AppBar( + backgroundColor: Theme.of(context).backgroundColor, leading: IconButton( - icon: const Icon(JamIcons.close), + icon: Icon( + JamIcons.close, + color: Theme.of(context).accentColor, + ), onPressed: () { navStack.removeLast(); logger.d(navStack.toString()); @@ -981,7 +985,7 @@ class _EditProfilePanelState extends State { showRemoveAlertDialog(context, () async { linkController.text = ""; - var links = globals.prismUser.links; + final links = globals.prismUser.links; links.remove( _link?["name"].toString()); globals.prismUser.links = links; @@ -1101,7 +1105,7 @@ class _EditProfilePanelState extends State { }); } if (linkEdit) { - Map links = globals.prismUser.links; + final Map links = globals.prismUser.links; for (int p = 0; p < linkIcons.length; p++) { if (linkIcons[p]["value"] != "") { links[linkIcons[p]["name"]] = @@ -1185,7 +1189,7 @@ class _EditProfilePanelState extends State { }); } if (linkEdit) { - Map links = globals.prismUser.links; + final Map links = globals.prismUser.links; for (int p = 0; p < linkIcons.length; p++) { if (linkIcons[p]["value"] != "") { links[linkIcons[p]["name"]] = diff --git a/lib/ui/widgets/popup/enterCodePanel.dart b/lib/ui/widgets/popup/enterCodePanel.dart index a9cbad16..88f2eb07 100644 --- a/lib/ui/widgets/popup/enterCodePanel.dart +++ b/lib/ui/widgets/popup/enterCodePanel.dart @@ -1,8 +1,8 @@ -import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/theme/jam_icons_icons.dart'; import 'package:Prism/theme/toasts.dart' as toasts; +import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/material.dart'; -import 'package:Prism/theme/jam_icons_icons.dart'; class EnterCodePanel extends StatefulWidget { const EnterCodePanel({ @@ -66,7 +66,7 @@ class _EnterCodePanelState extends State { Column( mainAxisAlignment: MainAxisAlignment.center, children: [ - Container( + SizedBox( height: 80, width: width - 24, child: Center( diff --git a/lib/ui/widgets/popup/linkPopUp.dart b/lib/ui/widgets/popup/linkPopUp.dart index ddd77438..f2c72e2f 100644 --- a/lib/ui/widgets/popup/linkPopUp.dart +++ b/lib/ui/widgets/popup/linkPopUp.dart @@ -1,11 +1,11 @@ import 'package:Prism/auth/google_auth.dart'; import 'package:Prism/data/links/model/linksModel.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/ui/pages/profile/aboutScreen.dart'; import 'package:Prism/ui/widgets/animated/loader.dart'; import 'package:animations/animations.dart'; -import 'package:flutter/material.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; -import 'package:Prism/logger/logger.dart'; +import 'package:flutter/material.dart'; void showLinksPopUp(BuildContext context, String id) { Future> getLinks(String id) async { diff --git a/lib/ui/widgets/popup/noLoadLinkPopUp.dart b/lib/ui/widgets/popup/noLoadLinkPopUp.dart index c1ea84f2..5f1cc0ee 100644 --- a/lib/ui/widgets/popup/noLoadLinkPopUp.dart +++ b/lib/ui/widgets/popup/noLoadLinkPopUp.dart @@ -1,9 +1,9 @@ +import 'package:Prism/global/globals.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; // import 'package:Prism/data/links/model/linksModel.dart'; import 'package:Prism/ui/pages/profile/aboutScreen.dart'; import 'package:animations/animations.dart'; import 'package:flutter/material.dart'; -import 'package:Prism/global/globals.dart'; void showNoLoadLinksPopUp(BuildContext context, Map link) { // List links = []; diff --git a/lib/ui/widgets/popup/signInPopUp.dart b/lib/ui/widgets/popup/signInPopUp.dart index 4b6359dc..10f9e3f2 100644 --- a/lib/ui/widgets/popup/signInPopUp.dart +++ b/lib/ui/widgets/popup/signInPopUp.dart @@ -1,11 +1,11 @@ +import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; +import 'package:Prism/main.dart' as main; import 'package:Prism/theme/jam_icons_icons.dart'; +import 'package:Prism/theme/toasts.dart' as toasts; import 'package:animations/animations.dart'; import 'package:flare_flutter/flare_actor.dart'; import 'package:flutter/material.dart'; -import 'package:Prism/global/globals.dart' as globals; -import 'package:Prism/main.dart' as main; -import 'package:Prism/theme/toasts.dart' as toasts; -import 'package:Prism/logger/logger.dart'; void googleSignInPopUp(BuildContext context, Function func) { final Dialog loaderDialog = Dialog( diff --git a/lib/ui/widgets/premiumBanners/followingFeed.dart b/lib/ui/widgets/premiumBanners/followingFeed.dart index 7ae316b2..5d87fedb 100644 --- a/lib/ui/widgets/premiumBanners/followingFeed.dart +++ b/lib/ui/widgets/premiumBanners/followingFeed.dart @@ -1,5 +1,5 @@ -import 'package:flutter/material.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; +import 'package:flutter/material.dart'; class PremiumBannerFollowingFeed extends StatelessWidget { final bool? comparator; diff --git a/lib/ui/widgets/premiumBanners/premiumBanner.dart b/lib/ui/widgets/premiumBanners/premiumBanner.dart index 3ba2a1e1..722d285b 100644 --- a/lib/ui/widgets/premiumBanners/premiumBanner.dart +++ b/lib/ui/widgets/premiumBanners/premiumBanner.dart @@ -1,5 +1,5 @@ -import 'package:flutter/material.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; +import 'package:flutter/material.dart'; class PremiumBanner extends StatelessWidget { final bool? comparator; diff --git a/lib/ui/widgets/premiumBanners/setup.dart b/lib/ui/widgets/premiumBanners/setup.dart index 9e9d937d..9db4bfcc 100644 --- a/lib/ui/widgets/premiumBanners/setup.dart +++ b/lib/ui/widgets/premiumBanners/setup.dart @@ -1,5 +1,5 @@ -import 'package:flutter/material.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; +import 'package:flutter/material.dart'; class PremiumBannerSetup extends StatelessWidget { final bool? comparator; diff --git a/lib/ui/widgets/premiumBanners/setupOld.dart b/lib/ui/widgets/premiumBanners/setupOld.dart index ab1e6de5..74a63d4e 100644 --- a/lib/ui/widgets/premiumBanners/setupOld.dart +++ b/lib/ui/widgets/premiumBanners/setupOld.dart @@ -1,5 +1,5 @@ -import 'package:flutter/material.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; +import 'package:flutter/material.dart'; class PremiumBannerSetupOld extends StatelessWidget { final bool? comparator; diff --git a/lib/ui/widgets/premiumBanners/setupPhotographer.dart b/lib/ui/widgets/premiumBanners/setupPhotographer.dart index ba5774af..c6839d9a 100644 --- a/lib/ui/widgets/premiumBanners/setupPhotographer.dart +++ b/lib/ui/widgets/premiumBanners/setupPhotographer.dart @@ -1,5 +1,5 @@ -import 'package:flutter/material.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; +import 'package:flutter/material.dart'; class PremiumBannerSetupPhotographer extends StatelessWidget { final bool? comparator; diff --git a/lib/ui/widgets/premiumBanners/walls.dart b/lib/ui/widgets/premiumBanners/walls.dart index 61fd4dff..fb2d2ced 100644 --- a/lib/ui/widgets/premiumBanners/walls.dart +++ b/lib/ui/widgets/premiumBanners/walls.dart @@ -1,5 +1,5 @@ -import 'package:flutter/material.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; +import 'package:flutter/material.dart'; class PremiumBannerWalls extends StatelessWidget { final bool? comparator; diff --git a/lib/ui/widgets/premiumBanners/wallsCarousel.dart b/lib/ui/widgets/premiumBanners/wallsCarousel.dart index fbdd7723..4fa40f5f 100644 --- a/lib/ui/widgets/premiumBanners/wallsCarousel.dart +++ b/lib/ui/widgets/premiumBanners/wallsCarousel.dart @@ -1,5 +1,5 @@ -import 'package:flutter/material.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; +import 'package:flutter/material.dart'; class PremiumBannerWallsCarousel extends StatelessWidget { final bool? comparator; diff --git a/lib/ui/widgets/profile/downloadList.dart b/lib/ui/widgets/profile/downloadList.dart index 4020b142..7e317e2e 100644 --- a/lib/ui/widgets/profile/downloadList.dart +++ b/lib/ui/widgets/profile/downloadList.dart @@ -1,11 +1,12 @@ import 'dart:io'; + +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; import 'package:animations/animations.dart'; import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:permission_handler/permission_handler.dart'; -import 'package:Prism/logger/logger.dart'; class DownloadList extends StatelessWidget { @override diff --git a/lib/ui/widgets/profile/generalList.dart b/lib/ui/widgets/profile/generalList.dart index f3dcd5dd..8fa1f268 100644 --- a/lib/ui/widgets/profile/generalList.dart +++ b/lib/ui/widgets/profile/generalList.dart @@ -1,10 +1,10 @@ import 'package:Prism/data/notifications/model/inAppNotifModel.dart'; +import 'package:Prism/main.dart' as main; import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; -import 'package:flutter/material.dart'; import 'package:Prism/theme/toasts.dart' as toasts; +import 'package:flutter/material.dart'; import 'package:flutter_cache_manager/flutter_cache_manager.dart'; -import 'package:Prism/main.dart' as main; import 'package:hive/hive.dart'; class GeneralList extends StatefulWidget { @@ -15,7 +15,6 @@ class GeneralList extends StatefulWidget { } class _GeneralListState extends State { - bool optWall = (main.prefs.get('optimisedWallpapers') ?? true) as bool; bool followers = (main.prefs.get('followersTab') ?? true) as bool; int categories = (main.prefs.get('WHcategories') ?? 100) as int; int purity = (main.prefs.get('WHpurity') ?? 100) as int; @@ -84,34 +83,6 @@ class _GeneralListState extends State { await Hive.openBox('setups'); toasts.codeSend("Cleared cache!"); }), - // SwitchListTile( - // activeColor: Theme.of(context).errorColor, - // secondary: const Icon( - // JamIcons.dashboard, - // ), - // value: optWall, - // title: Text( - // "Wallpaper Optimisation", - // style: TextStyle( - // color: Theme.of(context).accentColor, - // fontWeight: FontWeight.w500, - // fontFamily: "Proxima Nova"), - // ), - // subtitle: optWall - // ? const Text( - // "Disabling this might lead to High Internet Usage", - // style: TextStyle(fontSize: 12), - // ) - // : const Text( - // "Enable this to optimise Wallpapers according to your device", - // style: TextStyle(fontSize: 12), - // ), - // onChanged: (bool value) async { - // setState(() { - // optWall = value; - // }); - // main.prefs.put('optimisedWallpapers', value); - // }), SwitchListTile( activeColor: Theme.of(context).errorColor, secondary: const Icon( diff --git a/lib/ui/widgets/profile/premiumList.dart b/lib/ui/widgets/profile/premiumList.dart index c5855217..b186bc0b 100644 --- a/lib/ui/widgets/profile/premiumList.dart +++ b/lib/ui/widgets/profile/premiumList.dart @@ -1,9 +1,9 @@ +import 'package:Prism/global/globals.dart' as globals; import 'package:Prism/main.dart' as main; +import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; import 'package:Prism/ui/widgets/popup/signInPopUp.dart'; -import 'package:Prism/routes/routing_constants.dart'; import 'package:flutter/material.dart'; -import 'package:Prism/global/globals.dart' as globals; class PremiumList extends StatelessWidget { @override diff --git a/lib/ui/widgets/profile/prismList.dart b/lib/ui/widgets/profile/prismList.dart index 2a35a99a..e7529b6f 100644 --- a/lib/ui/widgets/profile/prismList.dart +++ b/lib/ui/widgets/profile/prismList.dart @@ -1,6 +1,8 @@ import 'dart:io' show Platform; + import 'package:Prism/logger/logger.dart'; import 'package:Prism/theme/jam_icons_icons.dart'; +import 'package:Prism/theme/toasts.dart' as toasts; import 'package:Prism/ui/widgets/popup/changelogPopUp.dart'; import 'package:animations/animations.dart'; import 'package:device_info/device_info.dart'; @@ -9,7 +11,6 @@ import 'package:flutter/services.dart'; import 'package:flutter_mailer/flutter_mailer.dart'; import 'package:share/share.dart'; import 'package:url_launcher/url_launcher.dart'; -import 'package:Prism/theme/toasts.dart' as toasts; class PrismList extends StatelessWidget { @override diff --git a/lib/ui/widgets/profile/uploadedSetupsLoader.dart b/lib/ui/widgets/profile/uploadedSetupsLoader.dart index c74c7b5f..34b77ce4 100644 --- a/lib/ui/widgets/profile/uploadedSetupsLoader.dart +++ b/lib/ui/widgets/profile/uploadedSetupsLoader.dart @@ -1,7 +1,7 @@ +import 'package:Prism/logger/logger.dart'; import 'package:Prism/ui/widgets/animated/loader.dart'; import 'package:Prism/ui/widgets/profile/uploadedSetupsGrid.dart'; import 'package:flutter/material.dart'; -import 'package:Prism/logger/logger.dart'; class UploadedSetupsLoader extends StatefulWidget { final Future future; diff --git a/lib/ui/widgets/profile/uploadedWallsLoader.dart b/lib/ui/widgets/profile/uploadedWallsLoader.dart index 0edd913c..a467548d 100644 --- a/lib/ui/widgets/profile/uploadedWallsLoader.dart +++ b/lib/ui/widgets/profile/uploadedWallsLoader.dart @@ -1,7 +1,7 @@ +import 'package:Prism/logger/logger.dart'; import 'package:Prism/ui/widgets/animated/loader.dart'; import 'package:Prism/ui/widgets/profile/uploadedWallsGrid.dart'; import 'package:flutter/material.dart'; -import 'package:Prism/logger/logger.dart'; class ProfileLoader extends StatefulWidget { final Future future; diff --git a/lib/ui/widgets/profile/userList.dart b/lib/ui/widgets/profile/userList.dart index 4674cd37..6b8bb3cc 100644 --- a/lib/ui/widgets/profile/userList.dart +++ b/lib/ui/widgets/profile/userList.dart @@ -1,17 +1,17 @@ import 'package:Prism/data/favourites/provider/favouriteProvider.dart'; import 'package:Prism/data/favourites/provider/favouriteSetupProvider.dart'; +import 'package:Prism/global/globals.dart' as globals; +import 'package:Prism/logger/logger.dart'; +import 'package:Prism/main.dart' as main; import 'package:Prism/theme/jam_icons_icons.dart'; +import 'package:Prism/theme/toasts.dart' as toasts; import 'package:animations/animations.dart'; import 'package:flutter/material.dart'; -import 'package:Prism/main.dart' as main; -import 'package:Prism/global/globals.dart' as globals; -import 'package:Prism/theme/toasts.dart' as toasts; import 'package:provider/provider.dart'; -import 'package:Prism/logger/logger.dart'; class UserList extends StatelessWidget { final bool expanded; - UserList({required this.expanded}); + const UserList({required this.expanded}); @override Widget build(BuildContext context) { if (globals.prismUser.loggedIn == false) { diff --git a/lib/ui/widgets/profile/userProfileGrid.dart b/lib/ui/widgets/profile/userProfileGrid.dart index f6595e4c..a550b389 100644 --- a/lib/ui/widgets/profile/userProfileGrid.dart +++ b/lib/ui/widgets/profile/userProfileGrid.dart @@ -1,19 +1,19 @@ import 'package:Prism/data/profile/wallpaper/getUserProfile.dart'; +import 'package:Prism/global/globals.dart' as globals; import 'package:Prism/global/svgAssets.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/themeModeProvider.dart'; import 'package:Prism/ui/widgets/focussedMenu/focusedMenu.dart'; -import 'package:Prism/ui/widgets/home/wallpapers/seeMoreButton.dart'; -import 'package:Prism/ui/widgets/premiumBanners/walls.dart'; import 'package:Prism/ui/widgets/home/wallpapers/loading.dart'; +import 'package:Prism/ui/widgets/home/wallpapers/seeMoreButton.dart'; import 'package:Prism/ui/widgets/popup/signInPopUp.dart'; +import 'package:Prism/ui/widgets/premiumBanners/walls.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:provider/provider.dart'; -import 'package:Prism/global/globals.dart' as globals; -import 'package:Prism/logger/logger.dart'; class UserProfileGrid extends StatefulWidget { final String? email; diff --git a/lib/ui/widgets/profile/userProfileLoader.dart b/lib/ui/widgets/profile/userProfileLoader.dart index e330efd6..e6ae7ea7 100644 --- a/lib/ui/widgets/profile/userProfileLoader.dart +++ b/lib/ui/widgets/profile/userProfileLoader.dart @@ -1,9 +1,9 @@ import 'package:Prism/data/profile/wallpaper/getUserProfile.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/ui/widgets/home/wallpapers/loading.dart'; import 'package:Prism/ui/widgets/profile/userProfileGrid.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:Prism/logger/logger.dart'; class UserProfileLoader extends StatefulWidget { final String? email; diff --git a/lib/ui/widgets/profile/userProfileSetupGrid.dart b/lib/ui/widgets/profile/userProfileSetupGrid.dart index 2379a967..5450a0f6 100644 --- a/lib/ui/widgets/profile/userProfileSetupGrid.dart +++ b/lib/ui/widgets/profile/userProfileSetupGrid.dart @@ -1,19 +1,19 @@ import 'package:Prism/data/profile/wallpaper/getUserProfile.dart'; +import 'package:Prism/global/globals.dart' as globals; import 'package:Prism/global/svgAssets.dart'; +import 'package:Prism/logger/logger.dart'; +import 'package:Prism/main.dart' as main; import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/themeModeProvider.dart'; import 'package:Prism/ui/widgets/home/wallpapers/seeMoreButton.dart'; -import 'package:Prism/ui/widgets/premiumBanners/setupPhotographer.dart'; import 'package:Prism/ui/widgets/popup/signInPopUp.dart'; +import 'package:Prism/ui/widgets/premiumBanners/setupPhotographer.dart'; import 'package:Prism/ui/widgets/setups/loadingSetups.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:provider/provider.dart'; -import 'package:Prism/main.dart' as main; -import 'package:Prism/global/globals.dart' as globals; -import 'package:Prism/logger/logger.dart'; class UserProfileSetupGrid extends StatefulWidget { final String? email; diff --git a/lib/ui/widgets/profile/userProfileSetupLoader.dart b/lib/ui/widgets/profile/userProfileSetupLoader.dart index 00c8a685..d73d2964 100644 --- a/lib/ui/widgets/profile/userProfileSetupLoader.dart +++ b/lib/ui/widgets/profile/userProfileSetupLoader.dart @@ -1,9 +1,9 @@ import 'package:Prism/data/profile/wallpaper/getUserProfile.dart'; +import 'package:Prism/logger/logger.dart'; import 'package:Prism/ui/widgets/profile/userProfileSetupGrid.dart'; import 'package:Prism/ui/widgets/setups/loadingSetups.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:Prism/logger/logger.dart'; class UserProfileSetupLoader extends StatefulWidget { final String? email; diff --git a/lib/ui/widgets/search/searchGrid.dart b/lib/ui/widgets/search/searchGrid.dart index e14f077b..51f3966b 100644 --- a/lib/ui/widgets/search/searchGrid.dart +++ b/lib/ui/widgets/search/searchGrid.dart @@ -1,19 +1,19 @@ +import 'package:Prism/data/pexels/provider/pexelsWithoutProvider.dart' as pData; +import 'package:Prism/data/share/createDynamicLink.dart'; import 'package:Prism/data/wallhaven/provider/wallhavenWithoutProvider.dart' as wData; -import 'package:Prism/data/pexels/provider/pexelsWithoutProvider.dart' as pData; +import 'package:Prism/logger/logger.dart'; +import 'package:Prism/main.dart' as main; import 'package:Prism/routes/routing_constants.dart'; import 'package:Prism/theme/themeModeProvider.dart'; import 'package:Prism/ui/widgets/animated/loader.dart'; import 'package:Prism/ui/widgets/focussedMenu/searchFocusedMenu.dart'; import 'package:Prism/ui/widgets/home/core/inheritedScrollControllerProvider.dart'; -import 'package:Prism/data/share/createDynamicLink.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; import 'package:flutter/services.dart'; import 'package:provider/provider.dart'; -import 'package:Prism/main.dart' as main; -import 'package:Prism/logger/logger.dart'; class SearchGrid extends StatefulWidget { final String query; diff --git a/lib/ui/widgets/setups/loadingSetups.dart b/lib/ui/widgets/setups/loadingSetups.dart index fdfe4a16..93c937f5 100644 --- a/lib/ui/widgets/setups/loadingSetups.dart +++ b/lib/ui/widgets/setups/loadingSetups.dart @@ -1,9 +1,9 @@ +import 'package:Prism/logger/logger.dart'; import 'package:Prism/theme/themeModeProvider.dart'; import 'package:Prism/ui/widgets/home/core/inheritedScrollControllerProvider.dart'; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; import 'package:provider/provider.dart'; -import 'package:Prism/logger/logger.dart'; class LoadingSetupCards extends StatefulWidget { const LoadingSetupCards({ diff --git a/pubspec.lock b/pubspec.lock index c3704cf3..da49a80b 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -7,28 +7,28 @@ packages: name: _fe_analyzer_shared url: "https://pub.dartlang.org" source: hosted - version: "21.0.0" + version: "30.0.0" analyzer: dependency: "direct dev" description: name: analyzer url: "https://pub.dartlang.org" source: hosted - version: "1.5.0" + version: "2.7.0" animations: dependency: "direct main" description: name: animations url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.0.2" archive: dependency: transitive description: name: archive url: "https://pub.dartlang.org" source: hosted - version: "3.1.2" + version: "3.1.6" args: dependency: transitive description: @@ -43,6 +43,15 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.8.2" + async_wallpaper: + dependency: "direct main" + description: + path: "." + ref: HEAD + resolved-ref: "66c1239e86622336e3216361f40cfb26a38a3c4c" + url: "https://github.com/codenameakshay/async_wallpaper.git" + source: git + version: "1.0.1" bloc: dependency: transitive description: @@ -56,7 +65,7 @@ packages: name: build url: "https://pub.dartlang.org" source: hosted - version: "2.0.1" + version: "2.1.1" build_config: dependency: transitive description: @@ -70,70 +79,84 @@ packages: name: build_daemon url: "https://pub.dartlang.org" source: hosted - version: "3.0.0" + version: "3.0.1" build_resolvers: dependency: transitive description: name: build_resolvers url: "https://pub.dartlang.org" source: hosted - version: "2.0.1" + version: "2.0.4" build_runner: dependency: "direct dev" description: name: build_runner url: "https://pub.dartlang.org" source: hosted - version: "2.0.1" + version: "2.1.4" build_runner_core: dependency: transitive description: name: build_runner_core url: "https://pub.dartlang.org" source: hosted - version: "7.0.0" + version: "7.2.2" built_collection: dependency: transitive description: name: built_collection url: "https://pub.dartlang.org" source: hosted - version: "5.0.0" + version: "5.1.1" built_value: dependency: transitive description: name: built_value url: "https://pub.dartlang.org" source: hosted - version: "8.0.5" + version: "8.1.3" cached_network_image: dependency: "direct main" description: name: cached_network_image url: "https://pub.dartlang.org" source: hosted - version: "3.0.0" + version: "3.1.0" + 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" carousel_slider: dependency: "direct main" description: name: carousel_slider url: "https://pub.dartlang.org" source: hosted - version: "3.0.0" + version: "4.0.0" 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" checked_yaml: dependency: transitive description: @@ -147,7 +170,7 @@ packages: name: cli_util url: "https://pub.dartlang.org" source: hosted - version: "0.3.0" + version: "0.3.5" clock: dependency: transitive description: @@ -182,7 +205,7 @@ packages: name: code_builder url: "https://pub.dartlang.org" source: hosted - version: "4.0.0" + version: "4.1.0" collection: dependency: transitive description: @@ -197,6 +220,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "3.0.1" + cross_file: + dependency: transitive + description: + name: cross_file + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.2" crypto: dependency: "direct overridden" description: @@ -210,7 +240,7 @@ packages: name: dart_style url: "https://pub.dartlang.org" source: hosted - version: "2.0.1" + version: "2.2.0" data_connection_checker: dependency: "direct main" description: @@ -218,6 +248,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.3.4" + dbus: + dependency: transitive + description: + name: dbus + url: "https://pub.dartlang.org" + source: hosted + version: "0.5.6" device_apps: dependency: "direct main" description: @@ -231,21 +268,21 @@ packages: name: device_info url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.0.2" device_info_platform_interface: dependency: transitive description: name: device_info_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.0.1" extended_image: dependency: "direct main" description: name: extended_image url: "https://pub.dartlang.org" source: hosted - version: "4.1.0" + version: "6.0.1" extended_image_library: dependency: transitive description: @@ -259,14 +296,14 @@ packages: name: ffi url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "1.1.2" file: dependency: transitive description: name: file url: "https://pub.dartlang.org" source: hosted - version: "6.1.0" + version: "6.1.2" file_encrypter: dependency: "direct main" description: @@ -280,70 +317,70 @@ packages: name: firebase url: "https://pub.dartlang.org" source: hosted - version: "9.0.1" + version: "9.0.2" firebase_analytics: dependency: "direct main" description: name: firebase_analytics url: "https://pub.dartlang.org" source: hosted - version: "8.0.2" + version: "8.3.4" firebase_analytics_platform_interface: dependency: transitive description: name: firebase_analytics_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.0.1" firebase_analytics_web: dependency: transitive description: name: firebase_analytics_web url: "https://pub.dartlang.org" source: hosted - version: "0.3.0" + version: "0.3.0+1" firebase_auth: dependency: "direct main" description: name: firebase_auth url: "https://pub.dartlang.org" source: hosted - version: "1.1.2" + version: "1.4.1" firebase_auth_platform_interface: dependency: transitive description: name: firebase_auth_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "4.2.0" + version: "4.3.1" firebase_auth_web: dependency: transitive description: name: firebase_auth_web url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.3.1" firebase_core: dependency: "direct overridden" description: name: firebase_core url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.8.0" firebase_core_platform_interface: dependency: transitive description: name: firebase_core_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "4.0.0" + version: "4.1.0" firebase_core_web: dependency: transitive description: name: firebase_core_web url: "https://pub.dartlang.org" source: hosted - version: "1.0.2" + version: "1.2.0" firebase_dynamic_links: dependency: "direct main" description: @@ -357,28 +394,28 @@ packages: name: firebase_in_app_messaging url: "https://pub.dartlang.org" source: hosted - version: "0.5.0+4" + version: "0.5.0+11" firebase_messaging: dependency: "direct main" description: name: firebase_messaging url: "https://pub.dartlang.org" source: hosted - version: "9.1.3" + version: "11.1.0" firebase_messaging_platform_interface: dependency: transitive description: name: firebase_messaging_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.1.3" + version: "3.0.9" firebase_messaging_web: dependency: transitive description: name: firebase_messaging_web url: "https://pub.dartlang.org" source: hosted - version: "1.0.6" + version: "2.1.0" firebase_remote_config: dependency: "direct main" description: @@ -393,20 +430,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.0.0" - flare_dart: - dependency: transitive - description: - name: flare_dart - url: "https://pub.dartlang.org" - source: hosted - version: "2.3.4" flare_flutter: dependency: "direct main" description: name: flare_flutter url: "https://pub.dartlang.org" source: hosted - version: "2.0.6" + version: "3.0.2" flutter: dependency: "direct main" description: flutter @@ -418,7 +448,7 @@ packages: name: flutter_archive url: "https://pub.dartlang.org" source: hosted - version: "4.0.1" + version: "4.1.0" flutter_bloc: dependency: transitive description: @@ -446,14 +476,21 @@ packages: name: flutter_displaymode url: "https://pub.dartlang.org" source: hosted - version: "0.3.1-nullsafety.0" + version: "0.3.2" + flutter_downloader: + dependency: "direct main" + description: + name: flutter_downloader + url: "https://pub.dartlang.org" + source: hosted + version: "1.7.1" flutter_image_compress: dependency: "direct main" description: name: flutter_image_compress url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "1.1.0" flutter_launcher_icons: dependency: "direct dev" description: @@ -467,14 +504,21 @@ packages: name: flutter_local_notifications url: "https://pub.dartlang.org" source: hosted - version: "5.0.0+3" + version: "9.0.1" + flutter_local_notifications_linux: + dependency: transitive + description: + name: flutter_local_notifications_linux + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.0" flutter_local_notifications_platform_interface: dependency: transitive description: name: flutter_local_notifications_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "3.0.0" + version: "5.0.0" flutter_mailer: dependency: "direct main" description: @@ -488,28 +532,28 @@ packages: name: flutter_native_splash url: "https://pub.dartlang.org" source: hosted - version: "1.2.3" + version: "1.3.1" flutter_plugin_android_lifecycle: dependency: transitive description: name: flutter_plugin_android_lifecycle url: "https://pub.dartlang.org" source: hosted - version: "2.0.1" + version: "2.0.4" flutter_staggered_grid_view: dependency: "direct main" description: name: flutter_staggered_grid_view url: "https://pub.dartlang.org" source: hosted - version: "0.4.0" + version: "0.4.1" flutter_svg: dependency: "direct main" description: name: flutter_svg url: "https://pub.dartlang.org" source: hosted - version: "0.22.0" + version: "0.23.0+1" flutter_web_plugins: dependency: transitive description: flutter @@ -521,14 +565,21 @@ packages: name: fluttertoast url: "https://pub.dartlang.org" source: hosted - version: "8.0.6" + version: "8.0.8" + frontend_server_client: + dependency: transitive + description: + name: frontend_server_client + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.2" gallery_saver: dependency: "direct main" description: name: gallery_saver url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.3.2" get_it: dependency: "direct main" description: @@ -542,49 +593,49 @@ packages: name: github url: "https://pub.dartlang.org" source: hosted - version: "8.1.0" + version: "8.2.3" glob: dependency: transitive description: name: glob url: "https://pub.dartlang.org" source: hosted - version: "2.0.1" + version: "2.0.2" google_mobile_ads: dependency: "direct main" description: name: google_mobile_ads url: "https://pub.dartlang.org" source: hosted - version: "0.13.0" + version: "0.13.5" google_sign_in: dependency: "direct main" description: name: google_sign_in url: "https://pub.dartlang.org" source: hosted - version: "5.0.2" + version: "5.2.0" google_sign_in_platform_interface: dependency: transitive description: name: google_sign_in_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.0.1" + version: "2.1.0" google_sign_in_web: dependency: transitive description: name: google_sign_in_web url: "https://pub.dartlang.org" source: hosted - version: "0.10.0" + version: "0.10.0+3" graphs: dependency: transitive description: name: graphs url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.1.0" hive: dependency: "direct main" description: @@ -598,21 +649,21 @@ packages: name: hive_flutter url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "1.1.0" hive_generator: dependency: "direct dev" description: name: hive_generator url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.1.1" http: dependency: "direct overridden" description: name: http url: "https://pub.dartlang.org" source: hosted - version: "0.13.2" + version: "0.13.4" http_client_helper: dependency: transitive description: @@ -640,35 +691,35 @@ packages: name: image url: "https://pub.dartlang.org" source: hosted - version: "3.0.2" + version: "3.0.8" image_editor: dependency: "direct main" description: name: image_editor url: "https://pub.dartlang.org" source: hosted - version: "0.7.3" + version: "1.0.1" image_picker: dependency: "direct main" description: name: image_picker url: "https://pub.dartlang.org" source: hosted - version: "0.7.4" + version: "0.8.4+3" image_picker_for_web: dependency: transitive description: name: image_picker_for_web url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.1.4" image_picker_platform_interface: dependency: transitive description: name: image_picker_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.4.1" in_app_update: dependency: "direct main" description: @@ -689,7 +740,7 @@ packages: name: io url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "1.0.3" js: dependency: transitive description: @@ -698,61 +749,61 @@ packages: source: hosted version: "0.6.3" json_annotation: - dependency: transitive + dependency: "direct main" description: name: json_annotation url: "https://pub.dartlang.org" source: hosted - version: "4.0.1" + version: "4.4.0" json_serializable: dependency: "direct main" description: name: json_serializable url: "https://pub.dartlang.org" source: hosted - version: "4.1.4" + version: "6.1.3" lint: dependency: "direct dev" description: name: lint url: "https://pub.dartlang.org" source: hosted - version: "1.5.3" + version: "1.7.2" logger: dependency: "direct main" description: name: logger url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "1.1.0" logging: dependency: transitive description: name: logging url: "https://pub.dartlang.org" source: hosted - version: "1.0.1" + version: "1.0.2" matcher: dependency: transitive description: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.10" + version: "0.12.11" 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.1" nested: dependency: transitive description: @@ -773,7 +824,7 @@ packages: name: package_config url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.0.2" paginate_firestore: dependency: "direct main" description: @@ -787,7 +838,7 @@ packages: name: palette_generator url: "https://pub.dartlang.org" source: hosted - version: "0.3.0" + version: "0.3.2" path: dependency: transitive description: @@ -801,35 +852,35 @@ packages: name: path_drawing url: "https://pub.dartlang.org" source: hosted - version: "0.5.0" + version: "0.5.1+1" path_parsing: dependency: transitive description: name: path_parsing url: "https://pub.dartlang.org" source: hosted - version: "0.2.0" + version: "0.2.1" path_provider: - dependency: "direct overridden" + dependency: "direct main" description: name: path_provider url: "https://pub.dartlang.org" source: hosted - version: "2.0.1" + version: "2.0.6" path_provider_linux: dependency: transitive description: name: path_provider_linux url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.1.0" path_provider_macos: dependency: transitive description: name: path_provider_macos url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.0.2" path_provider_platform_interface: dependency: transitive description: @@ -843,49 +894,49 @@ packages: name: path_provider_windows url: "https://pub.dartlang.org" source: hosted - version: "2.0.1" + version: "2.0.3" pedantic: dependency: transitive description: name: pedantic url: "https://pub.dartlang.org" source: hosted - version: "1.11.0" + version: "1.11.1" permission_handler: dependency: "direct main" description: name: permission_handler url: "https://pub.dartlang.org" source: hosted - version: "7.1.0" + version: "8.2.5" permission_handler_platform_interface: dependency: transitive description: name: permission_handler_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "3.3.0" + version: "3.7.0" petitparser: dependency: transitive description: name: petitparser url: "https://pub.dartlang.org" source: hosted - version: "4.1.0" + version: "4.4.0" photo_view: dependency: "direct main" description: name: photo_view url: "https://pub.dartlang.org" source: hosted - version: "0.11.1" + version: "0.13.0" photofilters: dependency: "direct main" description: name: photofilters url: "https://pub.dartlang.org" source: hosted - version: "2.0.2" + version: "3.0.1" pixel_perfect: dependency: "direct main" description: @@ -899,14 +950,14 @@ packages: name: platform url: "https://pub.dartlang.org" source: hosted - version: "3.0.0" + version: "3.0.2" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.0.2" pool: dependency: transitive description: @@ -920,7 +971,7 @@ packages: name: process url: "https://pub.dartlang.org" source: hosted - version: "4.2.1" + version: "4.2.4" provider: dependency: "direct main" description: @@ -934,28 +985,28 @@ packages: name: pub_semver url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.1.0" pubspec_parse: dependency: transitive description: name: pubspec_parse url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "1.1.0" purchases_flutter: dependency: "direct main" description: name: purchases_flutter url: "https://pub.dartlang.org" source: hosted - version: "3.2.1" + version: "3.4.6" quick_actions: dependency: "direct main" description: name: quick_actions url: "https://pub.dartlang.org" source: hosted - version: "0.6.0+1" + version: "0.6.0+7" quick_actions_platform_interface: dependency: transitive description: @@ -969,7 +1020,7 @@ packages: name: quiver url: "https://pub.dartlang.org" source: hosted - version: "3.0.1" + version: "3.0.1+1" rxdart: dependency: "direct main" description: @@ -977,27 +1028,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.27.2" - screenshot: - dependency: "direct main" - description: - name: screenshot - url: "https://pub.dartlang.org" - source: hosted - version: "0.3.0" share: dependency: "direct main" description: name: share url: "https://pub.dartlang.org" source: hosted - version: "2.0.1" + version: "2.0.4" shelf: dependency: transitive description: name: shelf url: "https://pub.dartlang.org" source: hosted - version: "1.1.1" + version: "1.2.0" shelf_web_socket: dependency: transitive description: @@ -1023,14 +1067,14 @@ packages: name: source_gen url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "1.1.1" source_helper: dependency: transitive description: name: source_helper url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.3.0" source_span: dependency: transitive description: @@ -1044,14 +1088,14 @@ packages: name: sqflite url: "https://pub.dartlang.org" source: hosted - version: "2.0.0+3" + version: "2.0.0+4" sqflite_common: dependency: transitive description: name: sqflite_common url: "https://pub.dartlang.org" source: hosted - version: "2.0.0+2" + version: "2.0.1+1" stack_trace: dependency: transitive description: @@ -1100,14 +1144,14 @@ packages: name: timeago url: "https://pub.dartlang.org" source: hosted - version: "3.0.2" + version: "3.1.0" timezone: dependency: transitive description: name: timezone url: "https://pub.dartlang.org" source: hosted - version: "0.7.0" + version: "0.8.0" timing: dependency: transitive description: @@ -1135,77 +1179,77 @@ packages: name: url_launcher url: "https://pub.dartlang.org" source: hosted - version: "6.0.3" + version: "6.0.12" url_launcher_linux: dependency: transitive description: name: url_launcher_linux url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.0.2" url_launcher_macos: dependency: transitive description: name: url_launcher_macos url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.0.2" url_launcher_platform_interface: dependency: transitive description: name: url_launcher_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.0.1" + version: "2.0.4" url_launcher_web: dependency: transitive description: name: url_launcher_web url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.0.4" url_launcher_windows: dependency: transitive description: name: url_launcher_windows url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.0.2" uuid: dependency: transitive description: name: uuid url: "https://pub.dartlang.org" source: hosted - version: "3.0.4" + version: "3.0.5" vector_math: dependency: transitive description: name: vector_math url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.1.1" watcher: dependency: transitive description: name: watcher url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "1.0.1" web_socket_channel: dependency: transitive description: name: web_socket_channel url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.1.0" win32: dependency: transitive description: name: win32 url: "https://pub.dartlang.org" source: hosted - version: "2.0.5" + version: "2.2.10" xdg_directories: dependency: transitive description: @@ -1219,7 +1263,7 @@ packages: name: xml url: "https://pub.dartlang.org" source: hosted - version: "5.1.2" + version: "5.3.1" yaml: dependency: transitive description: @@ -1228,5 +1272,5 @@ packages: source: hosted version: "3.1.0" sdks: - dart: ">=2.12.0 <3.0.0" - flutter: ">=2.0.0" + dart: ">=2.14.0 <3.0.0" + flutter: ">=2.8.0" diff --git a/pubspec.yaml b/pubspec.yaml index ca025dbd..3672383f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -12,40 +12,44 @@ publish_to: none # 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: 2.6.9+77 +version: 2.7.0+79 environment: - sdk: '>=2.12.0 <3.0.0' + sdk: ">=2.12.0 <3.0.0" dependencies: animations: ^2.0.0 + async_wallpaper: + git: + url: https://github.com/codenameakshay/async_wallpaper.git cached_network_image: ^3.0.0 - carousel_slider: ^3.0.0 + carousel_slider: ^4.0.0 cloud_firestore: ^1.0.7 data_connection_checker: ^0.3.4 device_apps: ^2.1.1 device_info: ^2.0.0 - extended_image: ^4.1.0 + extended_image: ^6.0.1 file_encrypter: ^1.0.1 firebase_analytics: ^8.0.2 firebase_auth: ^1.1.2 firebase_dynamic_links: ^0.5.1 firebase_in_app_messaging: ^0.5.0+4 - firebase_messaging: ^9.1.3 + firebase_messaging: ^11.1.0 firebase_remote_config: ^0.6.0 - flare_flutter: ^2.0.5 + flare_flutter: ^3.0.2 flutter: sdk: flutter - flutter_archive: ^4.0.1 + flutter_archive: ^4.1.0 flutter_displaymode: ^0.3.1-nullsafety.0 + flutter_downloader: ^1.7.1 flutter_image_compress: ^1.0.0 - flutter_local_notifications: ^5.0.0+3 + flutter_local_notifications: ^9.0.1 flutter_mailer: ^2.0.0 flutter_native_splash: ^1.2.1 flutter_staggered_grid_view: ^0.4.0 - flutter_svg: ^0.22.0 + flutter_svg: ^0.23.0+1 fluttertoast: ^8.0.6 - gallery_saver: ^2.1.0 + gallery_saver: ^2.3.2 get_it: ^7.2.0 github: ^8.1.0 google_mobile_ads: ^0.13.0 @@ -53,22 +57,23 @@ dependencies: hive: ^2.0.4 hive_flutter: ^1.0.0 image: ^3.0.2 - image_editor: ^0.7.1 - image_picker: ^0.7.4 + image_editor: ^1.0.1 + image_picker: ^0.8.4+3 in_app_update: ^2.0.0 - json_serializable: ^4.1.4 + json_annotation: ^4.4.0 + json_serializable: ^6.0.1 logger: ^1.0.0 paginate_firestore: ^0.3.1 palette_generator: ^0.3.0 - permission_handler: ^7.1.0 - photo_view: ^0.11.1 - photofilters: ^2.0.1 + path_provider: ^2.0.7 + permission_handler: ^8.2.5 + photo_view: ^0.13.0 + photofilters: ^3.0.1 pixel_perfect: ^1.1.0 provider: ^4.1.3 purchases_flutter: ^3.2.1 quick_actions: ^0.6.0+1 rxdart: ^0.27.1 - screenshot: ^0.3.0 share: ^2.0.1 sliding_up_panel: ^2.0.0+1 timeago: ^3.0.2 @@ -81,7 +86,7 @@ dependency_overrides: crypto: ^3.0.0 # convert: ^2.1.0 dev_dependencies: - analyzer: ^1.5.0 + analyzer: ^2.7.0 build_runner: ^2.0.1 flutter_launcher_icons: ^0.9.0 hive_generator: ^1.1.0