From 90659e7c6c2bd660827cb826509a68abed849387 Mon Sep 17 00:00:00 2001 From: Alvish Ramani <80829856+Alvish0407@users.noreply.github.com> Date: Tue, 31 Jan 2023 10:38:46 +0530 Subject: [PATCH] Develop (#4) * Design bug fixed * safeArea removed, navBar icon fixed, design enhanced --------- Co-authored-by: flutterflow-github-app[bot] <79809161+flutterflow-github-app[bot]@users.noreply.github.com> --- .../plugins/GeneratedPluginRegistrant.java | 27 +- ios/Podfile.lock | 50 -- ios/Runner.xcodeproj/project.pbxproj | 98 +-- .../contents.xcworkspacedata | 2 +- .../xcshareddata/xcschemes/Runner.xcscheme | 12 +- .../contents.xcworkspacedata | 3 - ios/Runner/GeneratedPluginRegistrant.h | 2 - ios/Runner/GeneratedPluginRegistrant.m | 33 +- ios/Runner/Info.plist | 2 - .../choose_mode_page_widget.dart | 454 +++++----- lib/components/back_button_widget.dart | 7 +- lib/components/bottom_nav_bar_widget.dart | 22 +- lib/components/favourite_page_widget.dart | 19 +- lib/components/home_page_widget.dart | 25 +- lib/components/profile_page_widget.dart | 20 +- .../get_started_page_widget.dart | 36 +- lib/main_page/main_page_widget.dart | 41 +- .../register_or_sign_in_page_widget.dart | 388 ++++---- lib/register_page/register_page_widget.dart | 828 +++++++++--------- lib/sign_in_page/sign_in_page_widget.dart | 725 ++++++++------- .../song_details_page_widget.dart | 526 ++++++----- .../song_lyrics_page_widget.dart | 613 +++++++------ lib/utils/extensions.dart | 29 + pubspec.lock | 687 --------------- 24 files changed, 1898 insertions(+), 2751 deletions(-) delete mode 100644 ios/Podfile.lock create mode 100644 lib/utils/extensions.dart delete mode 100644 pubspec.lock diff --git a/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java b/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java index e831f96..33c1b3a 100644 --- a/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java +++ b/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java @@ -2,9 +2,9 @@ import androidx.annotation.Keep; import androidx.annotation.NonNull; -import io.flutter.Log; import io.flutter.embedding.engine.FlutterEngine; +import io.flutter.embedding.engine.plugins.shim.ShimPluginRegistry; /** * Generated file. Do not edit. @@ -13,27 +13,10 @@ */ @Keep public final class GeneratedPluginRegistrant { - private static final String TAG = "GeneratedPluginRegistrant"; public static void registerWith(@NonNull FlutterEngine flutterEngine) { - try { - flutterEngine.getPlugins().add(new io.flutter.plugins.pathprovider.PathProviderPlugin()); - } catch(Exception e) { - Log.e(TAG, "Error registering plugin path_provider_android, io.flutter.plugins.pathprovider.PathProviderPlugin", e); - } - try { - flutterEngine.getPlugins().add(new io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin()); - } catch(Exception e) { - Log.e(TAG, "Error registering plugin shared_preferences_android, io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin", e); - } - try { - flutterEngine.getPlugins().add(new com.tekartik.sqflite.SqflitePlugin()); - } catch(Exception e) { - Log.e(TAG, "Error registering plugin sqflite, com.tekartik.sqflite.SqflitePlugin", e); - } - try { - flutterEngine.getPlugins().add(new io.flutter.plugins.urllauncher.UrlLauncherPlugin()); - } catch(Exception e) { - Log.e(TAG, "Error registering plugin url_launcher_android, io.flutter.plugins.urllauncher.UrlLauncherPlugin", e); - } + ShimPluginRegistry shimPluginRegistry = new ShimPluginRegistry(flutterEngine); + io.flutter.plugins.firebaseauth.FirebaseAuthPlugin.registerWith(shimPluginRegistry.registrarFor("io.flutter.plugins.firebaseauth.FirebaseAuthPlugin")); + flutterEngine.getPlugins().add(new io.flutter.plugins.firebase.core.FirebaseCorePlugin()); + io.flutter.plugins.googlesignin.GoogleSignInPlugin.registerWith(shimPluginRegistry.registrarFor("io.flutter.plugins.googlesignin.GoogleSignInPlugin")); } } diff --git a/ios/Podfile.lock b/ios/Podfile.lock deleted file mode 100644 index 39a0a30..0000000 --- a/ios/Podfile.lock +++ /dev/null @@ -1,50 +0,0 @@ -PODS: - - Flutter (1.0.0) - - FMDB (2.7.5): - - FMDB/standard (= 2.7.5) - - FMDB/standard (2.7.5) - - path_provider_foundation (0.0.1): - - Flutter - - FlutterMacOS - - shared_preferences_ios (0.0.1): - - Flutter - - sqflite (0.0.2): - - Flutter - - FMDB (>= 2.7.5) - - url_launcher_ios (0.0.1): - - Flutter - -DEPENDENCIES: - - Flutter (from `Flutter`) - - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/ios`) - - shared_preferences_ios (from `.symlinks/plugins/shared_preferences_ios/ios`) - - sqflite (from `.symlinks/plugins/sqflite/ios`) - - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) - -SPEC REPOS: - trunk: - - FMDB - -EXTERNAL SOURCES: - Flutter: - :path: Flutter - path_provider_foundation: - :path: ".symlinks/plugins/path_provider_foundation/ios" - shared_preferences_ios: - :path: ".symlinks/plugins/shared_preferences_ios/ios" - sqflite: - :path: ".symlinks/plugins/sqflite/ios" - url_launcher_ios: - :path: ".symlinks/plugins/url_launcher_ios/ios" - -SPEC CHECKSUMS: - Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 - FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a - path_provider_foundation: 37748e03f12783f9de2cb2c4eadfaa25fe6d4852 - shared_preferences_ios: 548a61f8053b9b8a49ac19c1ffbc8b92c50d68ad - sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904 - url_launcher_ios: ae1517e5e344f5544fb090b079e11f399dfbe4d2 - -PODFILE CHECKSUM: eae4152c3630e172b84de35121c0831e1f634c9d - -COCOAPODS: 1.11.3 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 343e5c2..5a55898 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -3,18 +3,17 @@ archiveVersion = 1; classes = { }; - objectVersion = 54; + objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 6436409A27A31CD800820AF7 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 6436409C27A31CD800820AF7 /* InfoPlist.strings */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 6436409A27A31CD800820AF7 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 6436409C27A31CD800820AF7 /* InfoPlist.strings */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C7B0205EB8E866E13E8B73ED /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC90D7476BE7AAFD97DD90EF /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -34,7 +33,6 @@ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 65F60245BFEA48C3853673C7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -45,9 +43,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D24DD7D46F1442B6099C928B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - EC90D7476BE7AAFD97DD90EF /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F7625CE73EA28413F15DF729 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -55,21 +50,12 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C7B0205EB8E866E13E8B73ED /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 8C53851117BE1740FD49631C /* Frameworks */ = { - isa = PBXGroup; - children = ( - EC90D7476BE7AAFD97DD90EF /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -87,8 +73,6 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, - B8F78A44F55BE526CDF4020E /* Pods */, - 8C53851117BE1740FD49631C /* Frameworks */, ); sourceTree = ""; }; @@ -116,17 +100,6 @@ path = Runner; sourceTree = ""; }; - B8F78A44F55BE526CDF4020E /* Pods */ = { - isa = PBXGroup; - children = ( - F7625CE73EA28413F15DF729 /* Pods-Runner.debug.xcconfig */, - D24DD7D46F1442B6099C928B /* Pods-Runner.release.xcconfig */, - 65F60245BFEA48C3853673C7 /* Pods-Runner.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -134,14 +107,12 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 6F529AA9B5F532E115460828 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 69B6A85357AD9CCA73238388 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -158,7 +129,7 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1300; + LastUpgradeCheck = 1020; ORGANIZATIONNAME = ""; TargetAttributes = { 97C146ED1CF9000F007C117D = { @@ -203,7 +174,6 @@ /* Begin PBXShellScriptBuildPhase section */ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -216,48 +186,8 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 69B6A85357AD9CCA73238388 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 6F529AA9B5F532E115460828 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -288,6 +218,7 @@ 6436409C27A31CD800820AF7 /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( + ); name = InfoPlist.strings; sourceTree = ""; @@ -368,17 +299,13 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = GDG93F4478; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Flutter", ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Flutter", @@ -491,8 +418,7 @@ MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -505,17 +431,13 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = GDG93F4478; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Flutter", ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Flutter", @@ -536,17 +458,13 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = GDG93F4478; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Flutter", ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Flutter", diff --git a/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 919434a..1d526a1 100644 --- a/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "group:Runner.xcodeproj"> diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index f3d88ac..a28140c 100644 --- a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ + + - - + + + + - - diff --git a/ios/Runner/GeneratedPluginRegistrant.h b/ios/Runner/GeneratedPluginRegistrant.h index 7a89092..ed9a5c6 100644 --- a/ios/Runner/GeneratedPluginRegistrant.h +++ b/ios/Runner/GeneratedPluginRegistrant.h @@ -2,8 +2,6 @@ // Generated file. Do not edit. // -// clang-format off - #ifndef GeneratedPluginRegistrant_h #define GeneratedPluginRegistrant_h diff --git a/ios/Runner/GeneratedPluginRegistrant.m b/ios/Runner/GeneratedPluginRegistrant.m index 48ca3f9..36b53fe 100644 --- a/ios/Runner/GeneratedPluginRegistrant.m +++ b/ios/Runner/GeneratedPluginRegistrant.m @@ -2,41 +2,32 @@ // Generated file. Do not edit. // -// clang-format off - #import "GeneratedPluginRegistrant.h" -#if __has_include() -#import -#else -@import path_provider_foundation; -#endif - -#if __has_include() -#import +#if __has_include() +#import #else -@import shared_preferences_ios; +@import firebase_auth; #endif -#if __has_include() -#import +#if __has_include() +#import #else -@import sqflite; +@import firebase_core; #endif -#if __has_include() -#import +#if __has_include() +#import #else -@import url_launcher_ios; +@import google_sign_in; #endif @implementation GeneratedPluginRegistrant + (void)registerWithRegistry:(NSObject*)registry { - [PathProviderPlugin registerWithRegistrar:[registry registrarForPlugin:@"PathProviderPlugin"]]; - [FLTSharedPreferencesPlugin registerWithRegistrar:[registry registrarForPlugin:@"FLTSharedPreferencesPlugin"]]; - [SqflitePlugin registerWithRegistrar:[registry registrarForPlugin:@"SqflitePlugin"]]; - [FLTURLLauncherPlugin registerWithRegistrar:[registry registrarForPlugin:@"FLTURLLauncherPlugin"]]; + [FLTFirebaseAuthPlugin registerWithRegistrar:[registry registrarForPlugin:@"FLTFirebaseAuthPlugin"]]; + [FLTFirebaseCorePlugin registerWithRegistrar:[registry registrarForPlugin:@"FLTFirebaseCorePlugin"]]; + [FLTGoogleSignInPlugin registerWithRegistrar:[registry registrarForPlugin:@"FLTGoogleSignInPlugin"]]; } @end diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index 3097e50..b7e6fe3 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -57,7 +57,5 @@ UIApplicationSupportsIndirectInputEvents - FLTEnableImpeller - diff --git a/lib/choose_mode_page/choose_mode_page_widget.dart b/lib/choose_mode_page/choose_mode_page_widget.dart index e816b41..b641a95 100644 --- a/lib/choose_mode_page/choose_mode_page_widget.dart +++ b/lib/choose_mode_page/choose_mode_page_widget.dart @@ -1,16 +1,16 @@ -import '../flutter_flow/flutter_flow_animations.dart'; -import '../flutter_flow/flutter_flow_theme.dart'; -import '../flutter_flow/flutter_flow_util.dart'; -import '../flutter_flow/flutter_flow_widgets.dart'; -import '../register_or_sign_in_page/register_or_sign_in_page_widget.dart'; import 'dart:ui'; + import 'package:flutter/material.dart'; -import 'package:flutter/scheduler.dart'; import 'package:flutter_animate/flutter_animate.dart'; -import 'package:flutter_spinkit/flutter_spinkit.dart'; import 'package:flutter_svg/flutter_svg.dart'; -import 'package:google_fonts/google_fonts.dart'; import 'package:provider/provider.dart'; +import 'package:spotify_redesign/utils/extensions.dart'; + +import '../flutter_flow/flutter_flow_animations.dart'; +import '../flutter_flow/flutter_flow_theme.dart'; +import '../flutter_flow/flutter_flow_util.dart'; +import '../flutter_flow/flutter_flow_widgets.dart'; +import '../register_or_sign_in_page/register_or_sign_in_page_widget.dart'; class ChooseModePageWidget extends StatefulWidget { const ChooseModePageWidget({Key? key}) : super(key: key); @@ -104,252 +104,252 @@ class _ChooseModePageWidgetState extends State return Scaffold( key: scaffoldKey, backgroundColor: FlutterFlowTheme.of(context).primaryBackground, - body: SafeArea( - child: GestureDetector( - onTap: () => FocusScope.of(context).requestFocus(_unfocusNode), - child: Stack( - children: [ - Image.asset( - 'assets/images/billie_2.png', - width: double.infinity, - height: double.infinity, - fit: BoxFit.cover, - ), - Align( - alignment: AlignmentDirectional(0, 0), - child: Column( - mainAxisSize: MainAxisSize.max, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Padding( - padding: EdgeInsetsDirectional.fromSTEB(0, 37, 0, 0), - child: SvgPicture.asset( - 'assets/images/spotify.svg', - width: 196, - height: 59, - fit: BoxFit.scaleDown, - ).animateOnPageLoad( - animationsMap['imageOnPageLoadAnimation']!), - ), - Padding( - padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 70), - child: Column( - mainAxisSize: MainAxisSize.max, - children: [ - Align( - alignment: AlignmentDirectional(0, 0), - child: Padding( - padding: - EdgeInsetsDirectional.fromSTEB(0, 0, 0, 32), - child: Text( - 'Choose Mode', - style: TextStyle( - fontFamily: 'Satoshi', - color: FlutterFlowTheme.of(context).dadada, - fontWeight: FontWeight.w500, - fontSize: 22, - ), - ).animateOnPageLoad( - animationsMap['textOnPageLoadAnimation']!), - ), - ), - Padding( + body: GestureDetector( + onTap: () => FocusScope.of(context).requestFocus(_unfocusNode), + child: Stack( + children: [ + Image.asset( + 'assets/images/billie_2.png', + width: double.infinity, + height: double.infinity, + fit: BoxFit.cover, + ), + Align( + alignment: AlignmentDirectional(0, 0), + child: Column( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox(height: context.topPadding(30)), + Padding( + padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 0), + child: SvgPicture.asset( + 'assets/images/spotify.svg', + width: 196, + height: 59, + fit: BoxFit.scaleDown, + ).animateOnPageLoad( + animationsMap['imageOnPageLoadAnimation']!), + ), + Spacer(), + Padding( + padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 0), + child: Column( + mainAxisSize: MainAxisSize.max, + children: [ + Align( + alignment: AlignmentDirectional(0, 0), + child: Padding( padding: - EdgeInsetsDirectional.fromSTEB(78, 0, 78, 68), - child: Row( - mainAxisSize: MainAxisSize.max, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Column( - mainAxisSize: MainAxisSize.max, - children: [ - Align( - alignment: AlignmentDirectional(0, 0), - child: Stack( - alignment: AlignmentDirectional( - 0, 0.44999999999999996), - children: [ - Align( - alignment: AlignmentDirectional( - -0.1, 1.18), - child: Container( - width: 36, - height: 36, - decoration: BoxDecoration( - color: - FlutterFlowTheme.of(context) - .primaryColor, - boxShadow: [ - BoxShadow( - blurRadius: 4, - color: Color(0xFF42C83C), - offset: Offset(0, -20), - spreadRadius: 10, - ) - ], - shape: BoxShape.circle, - ), - alignment: - AlignmentDirectional(0, 0), + EdgeInsetsDirectional.fromSTEB(0, 0, 0, 32), + child: Text( + 'Choose Mode', + style: TextStyle( + fontFamily: 'Satoshi', + color: FlutterFlowTheme.of(context).dadada, + fontWeight: FontWeight.w500, + fontSize: 22, + ), + ).animateOnPageLoad( + animationsMap['textOnPageLoadAnimation']!), + ), + ), + Padding( + padding: + EdgeInsetsDirectional.fromSTEB(78, 0, 78, 68), + child: Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Column( + mainAxisSize: MainAxisSize.max, + children: [ + Align( + alignment: AlignmentDirectional(0, 0), + child: Stack( + alignment: AlignmentDirectional( + 0, 0.44999999999999996), + children: [ + Align( + alignment: + AlignmentDirectional(-0.1, 1.18), + child: Container( + width: 36, + height: 36, + decoration: BoxDecoration( + color: + FlutterFlowTheme.of(context) + .primaryColor, + boxShadow: [ + BoxShadow( + blurRadius: 4, + color: Color(0xFF42C83C), + offset: Offset(0, -20), + spreadRadius: 10, + ) + ], + shape: BoxShape.circle, ), + alignment: + AlignmentDirectional(0, 0), ), - Padding( - padding: - EdgeInsetsDirectional.fromSTEB( - 0, 0, 0, 17), - child: Container( - width: 73, - height: 73, - decoration: BoxDecoration( - color: Color(0x02FFFFFF), - shape: BoxShape.circle, - ), - child: Padding( - padding: EdgeInsetsDirectional - .fromSTEB(0, 0, 0, 1), - child: ClipOval( - child: BackdropFilter( - filter: ImageFilter.blur( - sigmaX: 87, - sigmaY: 87, + ), + Padding( + padding: + EdgeInsetsDirectional.fromSTEB( + 0, 0, 0, 17), + child: Container( + width: 73, + height: 73, + decoration: BoxDecoration( + color: Color(0x02FFFFFF), + shape: BoxShape.circle, + ), + child: Padding( + padding: EdgeInsetsDirectional + .fromSTEB(0, 0, 0, 1), + child: ClipOval( + child: BackdropFilter( + filter: ImageFilter.blur( + sigmaX: 87, + sigmaY: 87, + ), + child: Container( + width: 36, + height: 36, + clipBehavior: + Clip.antiAlias, + decoration: BoxDecoration( + shape: BoxShape.circle, ), - child: Container( - width: 36, - height: 36, - clipBehavior: - Clip.antiAlias, - decoration: BoxDecoration( - shape: BoxShape.circle, - ), - child: SvgPicture.asset( - 'assets/images/moon.svg', - fit: BoxFit.scaleDown, - ), + child: SvgPicture.asset( + 'assets/images/moon.svg', + fit: BoxFit.scaleDown, ), ), ), ), ), ), - ], - ), + ), + ], ), - Text( - 'Dark Mode', - style: TextStyle( - fontFamily: 'Satoshi', - color: - FlutterFlowTheme.of(context).dadada, - fontWeight: FontWeight.w500, - fontSize: 17, - ), + ), + Text( + 'Dark Mode', + style: TextStyle( + fontFamily: 'Satoshi', + color: + FlutterFlowTheme.of(context).dadada, + fontWeight: FontWeight.w500, + fontSize: 17, ), - ], - ).animateOnPageLoad(animationsMap[ - 'columnOnPageLoadAnimation1']!), - Container( - width: 40, - decoration: BoxDecoration( - color: Colors.transparent, ), + ], + ).animateOnPageLoad( + animationsMap['columnOnPageLoadAnimation1']!), + Container( + width: 40, + decoration: BoxDecoration( + color: Colors.transparent, ), - Column( - mainAxisSize: MainAxisSize.max, - children: [ - Padding( - padding: EdgeInsetsDirectional.fromSTEB( - 0, 0, 0, 17), - child: Container( - width: 73, - height: 73, - decoration: BoxDecoration( - color: Color(0x02FFFFFF), - shape: BoxShape.circle, - ), - child: Padding( - padding: - EdgeInsetsDirectional.fromSTEB( - 0, 0, 0, 1), - child: ClipOval( - child: BackdropFilter( - filter: ImageFilter.blur( - sigmaX: 87, - sigmaY: 87, + ), + Column( + mainAxisSize: MainAxisSize.max, + children: [ + Padding( + padding: EdgeInsetsDirectional.fromSTEB( + 0, 0, 0, 17), + child: Container( + width: 73, + height: 73, + decoration: BoxDecoration( + color: Color(0x02FFFFFF), + shape: BoxShape.circle, + ), + child: Padding( + padding: EdgeInsetsDirectional.fromSTEB( + 0, 0, 0, 1), + child: ClipOval( + child: BackdropFilter( + filter: ImageFilter.blur( + sigmaX: 87, + sigmaY: 87, + ), + child: Container( + width: 36, + height: 36, + clipBehavior: Clip.antiAlias, + decoration: BoxDecoration( + shape: BoxShape.circle, ), - child: Container( - width: 36, - height: 36, - clipBehavior: Clip.antiAlias, - decoration: BoxDecoration( - shape: BoxShape.circle, - ), - child: SvgPicture.asset( - 'assets/images/sun.svg', - fit: BoxFit.scaleDown, - ), + child: SvgPicture.asset( + 'assets/images/sun.svg', + fit: BoxFit.scaleDown, ), ), ), ), ), ), - Text( - 'Light Mode', - style: TextStyle( - fontFamily: 'Satoshi', - color: - FlutterFlowTheme.of(context).dadada, - fontWeight: FontWeight.w500, - fontSize: 17, - ), + ), + Text( + 'Light Mode', + style: TextStyle( + fontFamily: 'Satoshi', + color: + FlutterFlowTheme.of(context).dadada, + fontWeight: FontWeight.w500, + fontSize: 17, ), - ], - ).animateOnPageLoad(animationsMap[ - 'columnOnPageLoadAnimation2']!), - ], - ), + ), + ], + ).animateOnPageLoad( + animationsMap['columnOnPageLoadAnimation2']!), + ], ), - FFButtonWidget( - onPressed: () async { - await Navigator.push( - context, - PageTransition( - type: PageTransitionType.rightToLeft, - duration: Duration(milliseconds: 300), - reverseDuration: Duration(milliseconds: 300), - child: RegisterOrSignInPageWidget(), - ), - ); - }, - text: 'Continue', - options: FFButtonOptions( - width: 329, - height: 92, - color: FlutterFlowTheme.of(context).primaryColor, - textStyle: TextStyle( - fontFamily: 'Satoshi', - color: FlutterFlowTheme.of(context).f6f6f6, - fontWeight: FontWeight.w500, - fontSize: 22, - ), - borderSide: BorderSide( - color: Colors.transparent, - width: 1, + ), + FFButtonWidget( + onPressed: () async { + await Navigator.push( + context, + PageTransition( + type: PageTransitionType.rightToLeft, + duration: Duration(milliseconds: 300), + reverseDuration: Duration(milliseconds: 300), + child: RegisterOrSignInPageWidget(), ), - borderRadius: BorderRadius.circular(30), + ); + }, + text: 'Continue', + options: FFButtonOptions( + width: 329, + height: 92, + color: FlutterFlowTheme.of(context).primaryColor, + textStyle: TextStyle( + fontFamily: 'Satoshi', + color: FlutterFlowTheme.of(context).f6f6f6, + fontWeight: FontWeight.w500, + fontSize: 22, ), - showLoadingIndicator: false, - ).animateOnPageLoad( - animationsMap['buttonOnPageLoadAnimation']!), - ], - ), + borderSide: BorderSide( + color: Colors.transparent, + width: 1, + ), + borderRadius: BorderRadius.circular(30), + ), + showLoadingIndicator: false, + ).animateOnPageLoad( + animationsMap['buttonOnPageLoadAnimation']!), + ], ), - ], - ), + ), + SizedBox(height: context.bottomPadding()), + ], ), - ], - ), + ), + ], ), ), ); diff --git a/lib/components/back_button_widget.dart b/lib/components/back_button_widget.dart index ea01dc8..67c0db3 100644 --- a/lib/components/back_button_widget.dart +++ b/lib/components/back_button_widget.dart @@ -1,11 +1,10 @@ -import '../flutter_flow/flutter_flow_theme.dart'; -import '../flutter_flow/flutter_flow_util.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_spinkit/flutter_spinkit.dart'; import 'package:flutter_svg/flutter_svg.dart'; -import 'package:google_fonts/google_fonts.dart'; import 'package:provider/provider.dart'; +import '../flutter_flow/flutter_flow_theme.dart'; +import '../flutter_flow/flutter_flow_util.dart'; + class BackButtonWidget extends StatefulWidget { const BackButtonWidget({Key? key}) : super(key: key); diff --git a/lib/components/bottom_nav_bar_widget.dart b/lib/components/bottom_nav_bar_widget.dart index 0e34168..8e1bb90 100644 --- a/lib/components/bottom_nav_bar_widget.dart +++ b/lib/components/bottom_nav_bar_widget.dart @@ -1,14 +1,12 @@ -import '../flutter_flow/flutter_flow_animations.dart'; -import '../flutter_flow/flutter_flow_theme.dart'; -import '../flutter_flow/flutter_flow_util.dart'; -import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/scheduler.dart'; import 'package:flutter_animate/flutter_animate.dart'; -import 'package:flutter_spinkit/flutter_spinkit.dart'; import 'package:flutter_svg/flutter_svg.dart'; -import 'package:google_fonts/google_fonts.dart'; import 'package:provider/provider.dart'; +import 'package:spotify_redesign/utils/extensions.dart'; + +import '../flutter_flow/flutter_flow_animations.dart'; +import '../flutter_flow/flutter_flow_theme.dart'; +import '../flutter_flow/flutter_flow_util.dart'; class BottomNavBarWidget extends StatefulWidget { const BottomNavBarWidget({Key? key}) : super(key: key); @@ -69,7 +67,7 @@ class _BottomNavBarWidgetState extends State return Container( width: double.infinity, - height: 73, + height: 73 + context.bottomPadding(0), decoration: BoxDecoration( color: FlutterFlowTheme.of(context).secondaryBackground, ), @@ -150,8 +148,8 @@ class _BottomNavBarWidgetState extends State FFAppState().currentIndex = 1; }); }, - child: CachedNetworkImage( - imageUrl: valueOrDefault( + child: SvgPicture.network( + valueOrDefault( FFAppState().currentIndex == 1 ? 'https://storage.googleapis.com/flutterflow-io-6f20.appspot.com/projects/spotify-redesign-o39znf/assets/uza6c3dmny5u/a_heart.svg' : 'https://storage.googleapis.com/flutterflow-io-6f20.appspot.com/projects/spotify-redesign-o39znf/assets/tpp6coqll41m/heart.svg', @@ -193,8 +191,8 @@ class _BottomNavBarWidgetState extends State FFAppState().currentIndex = 2; }); }, - child: CachedNetworkImage( - imageUrl: valueOrDefault( + child: SvgPicture.network( + valueOrDefault( FFAppState().currentIndex == 2 ? 'https://storage.googleapis.com/flutterflow-io-6f20.appspot.com/projects/spotify-redesign-o39znf/assets/7mp533tq3g7o/a_profile.svg' : 'https://storage.googleapis.com/flutterflow-io-6f20.appspot.com/projects/spotify-redesign-o39znf/assets/llzjpchvj8ve/profile.svg', diff --git a/lib/components/favourite_page_widget.dart b/lib/components/favourite_page_widget.dart index 589cd02..42f943f 100644 --- a/lib/components/favourite_page_widget.dart +++ b/lib/components/favourite_page_widget.dart @@ -1,14 +1,13 @@ -import '../components/back_button_widget.dart'; -import '../flutter_flow/flutter_flow_animations.dart'; -import '../flutter_flow/flutter_flow_theme.dart'; -import '../flutter_flow/flutter_flow_util.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/scheduler.dart'; import 'package:flutter_animate/flutter_animate.dart'; -import 'package:flutter_spinkit/flutter_spinkit.dart'; import 'package:flutter_svg/flutter_svg.dart'; -import 'package:google_fonts/google_fonts.dart'; import 'package:provider/provider.dart'; +import 'package:spotify_redesign/utils/extensions.dart'; + +import '../components/back_button_widget.dart'; +import '../flutter_flow/flutter_flow_animations.dart'; +import '../flutter_flow/flutter_flow_theme.dart'; +import '../flutter_flow/flutter_flow_util.dart'; class FavouritePageWidget extends StatefulWidget { const FavouritePageWidget({Key? key}) : super(key: key); @@ -251,7 +250,8 @@ class _FavouritePageWidgetState extends State child: Align( alignment: AlignmentDirectional(0, 0), child: Padding( - padding: EdgeInsetsDirectional.fromSTEB(32, 30, 32, 20), + padding: EdgeInsetsDirectional.fromSTEB( + 32, context.topPadding(10), 32, 20), child: Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceBetween, @@ -547,7 +547,8 @@ class _FavouritePageWidgetState extends State ), ), Padding( - padding: EdgeInsetsDirectional.fromSTEB(28, 0, 27, 85), + padding: EdgeInsetsDirectional.fromSTEB( + 28, 0, 27, 90 + context.bottomPadding()), child: Column( mainAxisSize: MainAxisSize.max, children: [ diff --git a/lib/components/home_page_widget.dart b/lib/components/home_page_widget.dart index 5905f2f..02ee4b8 100644 --- a/lib/components/home_page_widget.dart +++ b/lib/components/home_page_widget.dart @@ -1,17 +1,16 @@ +import 'package:cached_network_image/cached_network_image.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_animate/flutter_animate.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:provider/provider.dart'; +import 'package:spotify_redesign/utils/extensions.dart'; + import '../components/album_details_tile_widget.dart'; import '../components/song_details_tile_widget.dart'; import '../flutter_flow/flutter_flow_animations.dart'; import '../flutter_flow/flutter_flow_theme.dart'; import '../flutter_flow/flutter_flow_util.dart'; import '../song_details_page/song_details_page_widget.dart'; -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/scheduler.dart'; -import 'package:flutter_animate/flutter_animate.dart'; -import 'package:flutter_spinkit/flutter_spinkit.dart'; -import 'package:flutter_svg/flutter_svg.dart'; -import 'package:google_fonts/google_fonts.dart'; -import 'package:provider/provider.dart'; class HomePageWidget extends StatefulWidget { const HomePageWidget({Key? key}) : super(key: key); @@ -216,7 +215,8 @@ class _HomePageWidgetState extends State Align( alignment: AlignmentDirectional(0, -1), child: Padding( - padding: EdgeInsetsDirectional.fromSTEB(25, 30, 25, 24), + padding: EdgeInsetsDirectional.fromSTEB( + 25, context.topPadding(), 25, 24), child: Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceBetween, @@ -279,11 +279,11 @@ class _HomePageWidgetState extends State alignment: AlignmentDirectional(-0.85, 0), child: Padding( padding: EdgeInsetsDirectional.fromSTEB( - 10, 25, 0, 25), + 10, 0, 0, 0), child: Column( mainAxisSize: MainAxisSize.max, mainAxisAlignment: - MainAxisAlignment.spaceBetween, + MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -992,7 +992,8 @@ class _HomePageWidgetState extends State animationsMap['rowOnPageLoadAnimation3']!), ), Padding( - padding: EdgeInsetsDirectional.fromSTEB(28, 23, 20, 85), + padding: EdgeInsetsDirectional.fromSTEB( + 28, 23, 20, 85 + context.bottomPadding()), child: Column( mainAxisSize: MainAxisSize.max, children: [ diff --git a/lib/components/profile_page_widget.dart b/lib/components/profile_page_widget.dart index 0963f07..ea34795 100644 --- a/lib/components/profile_page_widget.dart +++ b/lib/components/profile_page_widget.dart @@ -1,15 +1,14 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_animate/flutter_animate.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:provider/provider.dart'; +import 'package:spotify_redesign/utils/extensions.dart'; + import '../components/back_button_widget.dart'; import '../components/playlist_details_tile_widget.dart'; import '../flutter_flow/flutter_flow_animations.dart'; import '../flutter_flow/flutter_flow_theme.dart'; import '../flutter_flow/flutter_flow_util.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/scheduler.dart'; -import 'package:flutter_animate/flutter_animate.dart'; -import 'package:flutter_spinkit/flutter_spinkit.dart'; -import 'package:flutter_svg/flutter_svg.dart'; -import 'package:google_fonts/google_fonts.dart'; -import 'package:provider/provider.dart'; class ProfilePageWidget extends StatefulWidget { const ProfilePageWidget({Key? key}) : super(key: key); @@ -230,7 +229,7 @@ class _ProfilePageWidgetState extends State alignment: AlignmentDirectional(0, 0), child: Container( width: double.infinity, - height: 332.3, + height: 332.3 + context.topPadding(10), decoration: BoxDecoration( color: FlutterFlowTheme.of(context).c2C2B2B, borderRadius: BorderRadius.only( @@ -254,7 +253,7 @@ class _ProfilePageWidgetState extends State alignment: AlignmentDirectional(0, 0), child: Padding( padding: EdgeInsetsDirectional.fromSTEB( - 32, 30, 32, 20), + 32, context.topPadding(10), 32, 20), child: Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: @@ -441,7 +440,8 @@ class _ProfilePageWidgetState extends State ), ), Padding( - padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 85), + padding: EdgeInsetsDirectional.fromSTEB( + 0, 0, 0, 85 + context.bottomPadding()), child: Column( mainAxisSize: MainAxisSize.max, children: [ diff --git a/lib/get_started_page/get_started_page_widget.dart b/lib/get_started_page/get_started_page_widget.dart index 31ed780..f7f7642 100644 --- a/lib/get_started_page/get_started_page_widget.dart +++ b/lib/get_started_page/get_started_page_widget.dart @@ -1,15 +1,14 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_animate/flutter_animate.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:provider/provider.dart'; +import 'package:spotify_redesign/utils/extensions.dart'; + import '../choose_mode_page/choose_mode_page_widget.dart'; import '../flutter_flow/flutter_flow_animations.dart'; import '../flutter_flow/flutter_flow_theme.dart'; import '../flutter_flow/flutter_flow_util.dart'; import '../flutter_flow/flutter_flow_widgets.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/scheduler.dart'; -import 'package:flutter_animate/flutter_animate.dart'; -import 'package:flutter_spinkit/flutter_spinkit.dart'; -import 'package:flutter_svg/flutter_svg.dart'; -import 'package:google_fonts/google_fonts.dart'; -import 'package:provider/provider.dart'; class GetStartedPageWidget extends StatefulWidget { const GetStartedPageWidget({Key? key}) : super(key: key); @@ -112,21 +111,19 @@ class _GetStartedPageWidgetState extends State alignment: AlignmentDirectional(0, 0), child: Column( mainAxisSize: MainAxisSize.max, - mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, children: [ + SizedBox(height: context.topPadding(30)), + SvgPicture.asset( + 'assets/images/spotify.svg', + width: 196, + height: 59, + fit: BoxFit.scaleDown, + ).animateOnPageLoad( + animationsMap['imageOnPageLoadAnimation']!), + Spacer(), Padding( - padding: EdgeInsetsDirectional.fromSTEB(0, 37, 0, 0), - child: SvgPicture.asset( - 'assets/images/spotify.svg', - width: 196, - height: 59, - fit: BoxFit.scaleDown, - ).animateOnPageLoad( - animationsMap['imageOnPageLoadAnimation']!), - ), - Padding( - padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 70), + padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 0), child: Column( mainAxisSize: MainAxisSize.max, children: [ @@ -197,6 +194,7 @@ class _GetStartedPageWidgetState extends State showLoadingIndicator: false, ).animateOnPageLoad( animationsMap['buttonOnPageLoadAnimation']!), + SizedBox(height: context.bottomPadding()), ], ), ), diff --git a/lib/main_page/main_page_widget.dart b/lib/main_page/main_page_widget.dart index 3a560b1..95d7de9 100644 --- a/lib/main_page/main_page_widget.dart +++ b/lib/main_page/main_page_widget.dart @@ -1,13 +1,12 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; + import '../components/bottom_nav_bar_widget.dart'; import '../components/favourite_page_widget.dart'; import '../components/home_page_widget.dart'; import '../components/profile_page_widget.dart'; import '../flutter_flow/flutter_flow_theme.dart'; import '../flutter_flow/flutter_flow_util.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_spinkit/flutter_spinkit.dart'; -import 'package:google_fonts/google_fonts.dart'; -import 'package:provider/provider.dart'; class MainPageWidget extends StatefulWidget { const MainPageWidget({Key? key}) : super(key: key); @@ -33,27 +32,25 @@ class _MainPageWidgetState extends State { return Scaffold( key: scaffoldKey, backgroundColor: FlutterFlowTheme.of(context).primaryBackground, - body: SafeArea( - child: GestureDetector( - onTap: () => FocusScope.of(context).requestFocus(_unfocusNode), - child: Align( + body: GestureDetector( + onTap: () => FocusScope.of(context).requestFocus(_unfocusNode), + child: Align( + alignment: AlignmentDirectional(0, 0), + child: Stack( alignment: AlignmentDirectional(0, 0), - child: Stack( - alignment: AlignmentDirectional(0, 0), - children: [ - if (FFAppState().currentIndex == 0) - Align( - alignment: AlignmentDirectional(0, 0), - child: HomePageWidget(), - ), - if (FFAppState().currentIndex == 1) FavouritePageWidget(), - if (FFAppState().currentIndex == 2) ProfilePageWidget(), + children: [ + if (FFAppState().currentIndex == 0) Align( - alignment: AlignmentDirectional(0, 1), - child: BottomNavBarWidget(), + alignment: AlignmentDirectional(0, 0), + child: HomePageWidget(), ), - ], - ), + if (FFAppState().currentIndex == 1) FavouritePageWidget(), + if (FFAppState().currentIndex == 2) ProfilePageWidget(), + Align( + alignment: AlignmentDirectional(0, 1), + child: BottomNavBarWidget(), + ), + ], ), ), ), diff --git a/lib/register_or_sign_in_page/register_or_sign_in_page_widget.dart b/lib/register_or_sign_in_page/register_or_sign_in_page_widget.dart index e09f527..725a9b4 100644 --- a/lib/register_or_sign_in_page/register_or_sign_in_page_widget.dart +++ b/lib/register_or_sign_in_page/register_or_sign_in_page_widget.dart @@ -1,16 +1,15 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_animate/flutter_animate.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:provider/provider.dart'; +import 'package:spotify_redesign/utils/extensions.dart'; + import '../flutter_flow/flutter_flow_animations.dart'; import '../flutter_flow/flutter_flow_theme.dart'; import '../flutter_flow/flutter_flow_util.dart'; import '../flutter_flow/flutter_flow_widgets.dart'; import '../register_page/register_page_widget.dart'; import '../sign_in_page/sign_in_page_widget.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/scheduler.dart'; -import 'package:flutter_animate/flutter_animate.dart'; -import 'package:flutter_spinkit/flutter_spinkit.dart'; -import 'package:flutter_svg/flutter_svg.dart'; -import 'package:google_fonts/google_fonts.dart'; -import 'package:provider/provider.dart'; class RegisterOrSignInPageWidget extends StatefulWidget { const RegisterOrSignInPageWidget({Key? key}) : super(key: key); @@ -117,212 +116,211 @@ class _RegisterOrSignInPageWidgetState extends State return Scaffold( key: scaffoldKey, backgroundColor: FlutterFlowTheme.of(context).primaryBackground, - body: SafeArea( - child: GestureDetector( - onTap: () => FocusScope.of(context).requestFocus(_unfocusNode), - child: Align( + body: GestureDetector( + onTap: () => FocusScope.of(context).requestFocus(_unfocusNode), + child: Align( + alignment: AlignmentDirectional(0, 0), + child: Stack( alignment: AlignmentDirectional(0, 0), - child: Stack( - alignment: AlignmentDirectional(0, 0), - children: [ - Align( - alignment: AlignmentDirectional(1, -1), - child: Image.asset( - 'assets/images/union.png', - width: 160, - fit: BoxFit.cover, - ), + children: [ + Align( + alignment: AlignmentDirectional(1, -1), + child: Image.asset( + 'assets/images/union.png', + width: 160, + fit: BoxFit.cover, ), - Align( - alignment: AlignmentDirectional(1, 1), - child: Image.asset( - 'assets/images/union_2.png', - width: 150, - fit: BoxFit.cover, - ), + ), + Align( + alignment: AlignmentDirectional(1, 1), + child: Image.asset( + 'assets/images/union_2.png', + width: 150, + fit: BoxFit.cover, ), - Align( - alignment: AlignmentDirectional(-1, 1), - child: Image.asset( - 'assets/images/billie_3.png', - fit: BoxFit.cover, - ), + ), + Align( + alignment: AlignmentDirectional(-1, 1), + child: Image.asset( + 'assets/images/billie_3.png', + fit: BoxFit.cover, ), - Align( - alignment: AlignmentDirectional(0, -0.3), - child: Column( - mainAxisSize: MainAxisSize.min, - mainAxisAlignment: MainAxisAlignment.end, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Padding( - padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 55), - child: SvgPicture.asset( - 'assets/images/spotify.svg', - width: 196, - height: 59, - fit: BoxFit.scaleDown, - ).animateOnPageLoad( - animationsMap['imageOnPageLoadAnimation']!), - ), - Padding( - padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 70), - child: Column( - mainAxisSize: MainAxisSize.max, - children: [ - Align( - alignment: AlignmentDirectional(0, 0), - child: Padding( - padding: - EdgeInsetsDirectional.fromSTEB(0, 0, 0, 21), - child: Text( - 'Enjoy Listening To Music', - style: TextStyle( - fontFamily: 'Satoshi', - color: FlutterFlowTheme.of(context).f2f2f2, - fontWeight: FontWeight.w500, - fontSize: 26, - ), - ).animateOnPageLoad( - animationsMap['textOnPageLoadAnimation1']!), - ), - ), - Align( - alignment: AlignmentDirectional(0, 0), - child: Padding( - padding: EdgeInsetsDirectional.fromSTEB( - 34, 0, 34, 21), - child: Text( - 'Spotify is a proprietary Swedish audio streaming and media services provider ', - textAlign: TextAlign.center, - style: TextStyle( - fontFamily: 'Satoshi', - color: FlutterFlowTheme.of(context).a0a0a0, - fontWeight: FontWeight.w300, - fontSize: 17, - ), - ).animateOnPageLoad( - animationsMap['textOnPageLoadAnimation2']!), - ), + ), + Align( + alignment: AlignmentDirectional(0, -0.3), + child: Column( + mainAxisSize: MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.end, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Padding( + padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 55), + child: SvgPicture.asset( + 'assets/images/spotify.svg', + width: 196, + height: 59, + fit: BoxFit.scaleDown, + ).animateOnPageLoad( + animationsMap['imageOnPageLoadAnimation']!), + ), + Padding( + padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 70), + child: Column( + mainAxisSize: MainAxisSize.max, + children: [ + Align( + alignment: AlignmentDirectional(0, 0), + child: Padding( + padding: + EdgeInsetsDirectional.fromSTEB(0, 0, 0, 21), + child: Text( + 'Enjoy Listening To Music', + style: TextStyle( + fontFamily: 'Satoshi', + color: FlutterFlowTheme.of(context).f2f2f2, + fontWeight: FontWeight.w500, + fontSize: 26, + ), + ).animateOnPageLoad( + animationsMap['textOnPageLoadAnimation1']!), ), - Padding( + ), + Align( + alignment: AlignmentDirectional(0, 0), + child: Padding( padding: - EdgeInsetsDirectional.fromSTEB(30, 0, 30, 0), - child: Row( - mainAxisSize: MainAxisSize.max, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - FFButtonWidget( - onPressed: () async { - await Navigator.push( - context, - PageTransition( - type: PageTransitionType.rightToLeft, - duration: Duration(milliseconds: 300), - reverseDuration: - Duration(milliseconds: 300), - child: RegisterPageWidget(), - ), - ); - }, - text: 'Register', - options: FFButtonOptions( - width: 147, - height: 73, - color: FlutterFlowTheme.of(context) - .primaryColor, - textStyle: TextStyle( - fontFamily: 'Satoshi', - color: - FlutterFlowTheme.of(context).f6f6f6, - fontWeight: FontWeight.w500, - fontSize: 19, - ), - borderSide: BorderSide( - color: Colors.transparent, - width: 1, + EdgeInsetsDirectional.fromSTEB(34, 0, 34, 21), + child: Text( + 'Spotify is a proprietary Swedish audio streaming and media services provider ', + textAlign: TextAlign.center, + style: TextStyle( + fontFamily: 'Satoshi', + color: FlutterFlowTheme.of(context).a0a0a0, + fontWeight: FontWeight.w300, + fontSize: 17, + ), + ).animateOnPageLoad( + animationsMap['textOnPageLoadAnimation2']!), + ), + ), + Padding( + padding: + EdgeInsetsDirectional.fromSTEB(30, 0, 30, 0), + child: Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + FFButtonWidget( + onPressed: () async { + await Navigator.push( + context, + PageTransition( + type: PageTransitionType.rightToLeft, + duration: Duration(milliseconds: 300), + reverseDuration: + Duration(milliseconds: 300), + child: RegisterPageWidget(), ), - borderRadius: BorderRadius.circular(30), + ); + }, + text: 'Register', + options: FFButtonOptions( + width: 147, + height: 73, + color: FlutterFlowTheme.of(context) + .primaryColor, + textStyle: TextStyle( + fontFamily: 'Satoshi', + color: + FlutterFlowTheme.of(context).f6f6f6, + fontWeight: FontWeight.w500, + fontSize: 19, ), - showLoadingIndicator: false, - ).animateOnPageLoad(animationsMap[ - 'buttonOnPageLoadAnimation1']!), - Container( - width: 20, - decoration: BoxDecoration( + borderSide: BorderSide( color: Colors.transparent, + width: 1, ), + borderRadius: BorderRadius.circular(30), ), - FFButtonWidget( - onPressed: () async { - await Navigator.push( - context, - PageTransition( - type: PageTransitionType.rightToLeft, - duration: Duration(milliseconds: 300), - reverseDuration: - Duration(milliseconds: 300), - child: SignInPageWidget(), - ), - ); - }, - text: 'Sign in', - options: FFButtonOptions( - width: 147, - height: 73, - color: Colors.transparent, - textStyle: TextStyle( - fontFamily: 'Satoshi', - color: - FlutterFlowTheme.of(context).f6f6f6, - fontWeight: FontWeight.w500, - fontSize: 19, - ), - elevation: 0, - borderSide: BorderSide( - color: Colors.transparent, - width: 1, + showLoadingIndicator: false, + ).animateOnPageLoad(animationsMap[ + 'buttonOnPageLoadAnimation1']!), + Container( + width: 20, + decoration: BoxDecoration( + color: Colors.transparent, + ), + ), + FFButtonWidget( + onPressed: () async { + await Navigator.push( + context, + PageTransition( + type: PageTransitionType.rightToLeft, + duration: Duration(milliseconds: 300), + reverseDuration: + Duration(milliseconds: 300), + child: SignInPageWidget(), ), - borderRadius: BorderRadius.circular(30), + ); + }, + text: 'Sign in', + options: FFButtonOptions( + width: 147, + height: 73, + color: Colors.transparent, + textStyle: TextStyle( + fontFamily: 'Satoshi', + color: + FlutterFlowTheme.of(context).f6f6f6, + fontWeight: FontWeight.w500, + fontSize: 19, + ), + elevation: 0, + borderSide: BorderSide( + color: Colors.transparent, + width: 1, ), - showLoadingIndicator: false, - ).animateOnPageLoad(animationsMap[ - 'buttonOnPageLoadAnimation2']!), - ], - ), + borderRadius: BorderRadius.circular(30), + ), + showLoadingIndicator: false, + ).animateOnPageLoad(animationsMap[ + 'buttonOnPageLoadAnimation2']!), + ], ), - ], - ), + ), + ], ), - ], - ), + ), + ], ), - Align( - alignment: AlignmentDirectional(-1, -1), - child: Padding( - padding: EdgeInsetsDirectional.fromSTEB(25, 30, 0, 0), - child: Container( - width: 32, - height: 32, - decoration: BoxDecoration( - color: FlutterFlowTheme.of(context).secondaryBackground, - shape: BoxShape.circle, - ), - child: InkWell( - onTap: () async { - Navigator.pop(context); - }, - child: SvgPicture.asset( - 'assets/images/left.svg', - fit: BoxFit.scaleDown, - ), + ), + Align( + alignment: AlignmentDirectional(-1, -1), + child: Padding( + padding: EdgeInsetsDirectional.fromSTEB( + 25, context.topPadding(15), 0, 0), + child: Container( + width: 32, + height: 32, + decoration: BoxDecoration( + color: FlutterFlowTheme.of(context).secondaryBackground, + shape: BoxShape.circle, + ), + child: InkWell( + onTap: () async { + Navigator.pop(context); + }, + child: SvgPicture.asset( + 'assets/images/left.svg', + fit: BoxFit.scaleDown, ), - ).animateOnPageLoad( - animationsMap['containerOnPageLoadAnimation']!), - ), + ), + ).animateOnPageLoad( + animationsMap['containerOnPageLoadAnimation']!), ), - ], - ), + ), + ], ), ), ), diff --git a/lib/register_page/register_page_widget.dart b/lib/register_page/register_page_widget.dart index 7577fb6..0dca22b 100644 --- a/lib/register_page/register_page_widget.dart +++ b/lib/register_page/register_page_widget.dart @@ -1,16 +1,15 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_animate/flutter_animate.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:provider/provider.dart'; +import 'package:spotify_redesign/utils/extensions.dart'; + import '../flutter_flow/flutter_flow_animations.dart'; import '../flutter_flow/flutter_flow_theme.dart'; import '../flutter_flow/flutter_flow_util.dart'; import '../flutter_flow/flutter_flow_widgets.dart'; import '../main_page/main_page_widget.dart'; import '../sign_in_page/sign_in_page_widget.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/scheduler.dart'; -import 'package:flutter_animate/flutter_animate.dart'; -import 'package:flutter_spinkit/flutter_spinkit.dart'; -import 'package:flutter_svg/flutter_svg.dart'; -import 'package:google_fonts/google_fonts.dart'; -import 'package:provider/provider.dart'; class RegisterPageWidget extends StatefulWidget { const RegisterPageWidget({Key? key}) : super(key: key); @@ -219,474 +218,467 @@ class _RegisterPageWidgetState extends State return Scaffold( key: scaffoldKey, backgroundColor: FlutterFlowTheme.of(context).primaryBackground, - body: SafeArea( - child: GestureDetector( - onTap: () => FocusScope.of(context).requestFocus(_unfocusNode), - child: SingleChildScrollView( - child: Column( - mainAxisSize: MainAxisSize.max, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Padding( - padding: EdgeInsetsDirectional.fromSTEB(25, 30, 30, 0), - child: Row( - mainAxisSize: MainAxisSize.max, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Align( - alignment: AlignmentDirectional(-1, -1), - child: Container( - width: 32, - height: 32, - decoration: BoxDecoration( - color: FlutterFlowTheme.of(context) - .secondaryBackground, - shape: BoxShape.circle, - ), - child: InkWell( - onTap: () async { - Navigator.pop(context); - }, - child: SvgPicture.asset( - 'assets/images/left.svg', - fit: BoxFit.scaleDown, - ), - ), - ).animateOnPageLoad( - animationsMap['containerOnPageLoadAnimation1']!), - ), - SvgPicture.asset( - 'assets/images/spotify.svg', - width: 108, - height: 33, - fit: BoxFit.scaleDown, - ).animateOnPageLoad( - animationsMap['imageOnPageLoadAnimation']!), - Container( + body: GestureDetector( + onTap: () => FocusScope.of(context).requestFocus(_unfocusNode), + child: SingleChildScrollView( + child: Column( + mainAxisSize: MainAxisSize.max, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Padding( + padding: EdgeInsetsDirectional.fromSTEB( + 25, context.topPadding(), 30, 0), + child: Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Align( + alignment: AlignmentDirectional(-1, -1), + child: Container( width: 32, height: 32, - constraints: BoxConstraints( - maxWidth: 0, - maxHeight: 0, - ), decoration: BoxDecoration( - color: Colors.transparent, - shape: BoxShape.rectangle, + color: + FlutterFlowTheme.of(context).secondaryBackground, + shape: BoxShape.circle, ), - ), - ], - ), - ), - Padding( - padding: EdgeInsetsDirectional.fromSTEB(0, 80, 0, 22), - child: Text( - 'Register', - textAlign: TextAlign.start, - style: TextStyle( - fontFamily: 'Satoshi', - color: FlutterFlowTheme.of(context).f2f2f2, - fontWeight: FontWeight.w500, - fontSize: 30, - ), - ).animateOnPageLoad( - animationsMap['textOnPageLoadAnimation1']!), - ), - Padding( - padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 38), - child: Row( - mainAxisSize: MainAxisSize.min, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - 'If You Need Any Support', - style: TextStyle( - fontFamily: 'Satoshi', - color: FlutterFlowTheme.of(context).e1e1e1, - fontWeight: FontWeight.w300, - fontSize: 12, - ), - ), - Text( - ' Click Here', - style: TextStyle( - color: FlutterFlowTheme.of(context).secondaryColor, - fontWeight: FontWeight.w300, - fontSize: 12, + child: InkWell( + onTap: () async { + Navigator.pop(context); + }, + child: SvgPicture.asset( + 'assets/images/left.svg', + fit: BoxFit.scaleDown, + ), ), - ), - ], - ).animateOnPageLoad( - animationsMap['rowOnPageLoadAnimation1']!), - ), - Padding( - padding: EdgeInsetsDirectional.fromSTEB(28, 0, 28, 16), - child: Material( - color: Colors.transparent, - elevation: 0, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(30), + ).animateOnPageLoad( + animationsMap['containerOnPageLoadAnimation1']!), ), - child: Container( - width: double.infinity, - height: 79.9, + SvgPicture.asset( + 'assets/images/spotify.svg', + width: 108, + height: 33, + fit: BoxFit.scaleDown, + ).animateOnPageLoad( + animationsMap['imageOnPageLoadAnimation']!), + Container( + width: 32, + height: 32, constraints: BoxConstraints( - maxWidth: double.infinity, - maxHeight: 80, + maxWidth: 0, + maxHeight: 0, ), decoration: BoxDecoration( color: Colors.transparent, - borderRadius: BorderRadius.circular(30), - border: Border.all( - color: Color(0x23F6F6F6), - width: 1, - ), - ), - alignment: AlignmentDirectional(0, 0), - child: Align( - alignment: AlignmentDirectional(0, 0), - child: Padding( - padding: EdgeInsetsDirectional.fromSTEB(25, 0, 5, 0), - child: TextFormField( - controller: textController1, - autofocus: true, - obscureText: false, - decoration: InputDecoration( - hintText: 'Full Name', - hintStyle: TextStyle( - fontFamily: 'Satoshi', - color: Color(0x9AA7A7A7), - fontWeight: FontWeight.w500, - fontSize: 16, - ), - enabledBorder: InputBorder.none, - focusedBorder: InputBorder.none, - errorBorder: InputBorder.none, - focusedErrorBorder: InputBorder.none, - ), - style: TextStyle( - fontFamily: 'Satoshi', - color: FlutterFlowTheme.of(context).hintColor, - fontWeight: FontWeight.bold, - fontSize: 16, - ), - ), - ), + shape: BoxShape.rectangle, ), ), - ).animateOnPageLoad( - animationsMap['containerOnPageLoadAnimation2']!), + ], ), - Padding( - padding: EdgeInsetsDirectional.fromSTEB(28, 0, 28, 16), - child: Material( - color: Colors.transparent, - elevation: 0, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(30), + ), + Padding( + padding: EdgeInsetsDirectional.fromSTEB(0, 80, 0, 22), + child: Text( + 'Register', + textAlign: TextAlign.start, + style: TextStyle( + fontFamily: 'Satoshi', + color: FlutterFlowTheme.of(context).f2f2f2, + fontWeight: FontWeight.w500, + fontSize: 30, + ), + ).animateOnPageLoad(animationsMap['textOnPageLoadAnimation1']!), + ), + Padding( + padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 38), + child: Row( + mainAxisSize: MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + 'If You Need Any Support', + style: TextStyle( + fontFamily: 'Satoshi', + color: FlutterFlowTheme.of(context).e1e1e1, + fontWeight: FontWeight.w300, + fontSize: 12, + ), ), - child: Container( - width: double.infinity, - height: 79.9, - constraints: BoxConstraints( - maxWidth: double.infinity, - maxHeight: 80, + Text( + ' Click Here', + style: TextStyle( + color: FlutterFlowTheme.of(context).secondaryColor, + fontWeight: FontWeight.w300, + fontSize: 12, ), - decoration: BoxDecoration( - color: Colors.transparent, - borderRadius: BorderRadius.circular(30), - border: Border.all( - color: Color(0x23F6F6F6), - width: 1, - ), + ), + ], + ).animateOnPageLoad(animationsMap['rowOnPageLoadAnimation1']!), + ), + Padding( + padding: EdgeInsetsDirectional.fromSTEB(28, 0, 28, 16), + child: Material( + color: Colors.transparent, + elevation: 0, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(30), + ), + child: Container( + width: double.infinity, + height: 79.9, + constraints: BoxConstraints( + maxWidth: double.infinity, + maxHeight: 80, + ), + decoration: BoxDecoration( + color: Colors.transparent, + borderRadius: BorderRadius.circular(30), + border: Border.all( + color: Color(0x23F6F6F6), + width: 1, ), + ), + alignment: AlignmentDirectional(0, 0), + child: Align( alignment: AlignmentDirectional(0, 0), - child: Align( - alignment: AlignmentDirectional(0, 0), - child: Padding( - padding: EdgeInsetsDirectional.fromSTEB(25, 0, 5, 0), - child: TextFormField( - controller: textController2, - autofocus: true, - obscureText: false, - decoration: InputDecoration( - hintText: 'Enter Email', - hintStyle: TextStyle( - fontFamily: 'Satoshi', - color: Color(0x9AA7A7A7), - fontWeight: FontWeight.w500, - fontSize: 16, - ), - enabledBorder: InputBorder.none, - focusedBorder: InputBorder.none, - errorBorder: InputBorder.none, - focusedErrorBorder: InputBorder.none, - ), - style: TextStyle( + child: Padding( + padding: EdgeInsetsDirectional.fromSTEB(25, 0, 5, 0), + child: TextFormField( + controller: textController1, + autofocus: true, + obscureText: false, + decoration: InputDecoration( + hintText: 'Full Name', + hintStyle: TextStyle( fontFamily: 'Satoshi', - color: FlutterFlowTheme.of(context).hintColor, - fontWeight: FontWeight.bold, + color: Color(0x9AA7A7A7), + fontWeight: FontWeight.w500, fontSize: 16, ), - keyboardType: TextInputType.emailAddress, + enabledBorder: InputBorder.none, + focusedBorder: InputBorder.none, + errorBorder: InputBorder.none, + focusedErrorBorder: InputBorder.none, + ), + style: TextStyle( + fontFamily: 'Satoshi', + color: FlutterFlowTheme.of(context).hintColor, + fontWeight: FontWeight.bold, + fontSize: 16, ), ), ), ), - ).animateOnPageLoad( - animationsMap['containerOnPageLoadAnimation3']!), - ), - Padding( - padding: EdgeInsetsDirectional.fromSTEB(28, 0, 28, 20), - child: Material( - color: Colors.transparent, - elevation: 0, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(30), + ), + ).animateOnPageLoad( + animationsMap['containerOnPageLoadAnimation2']!), + ), + Padding( + padding: EdgeInsetsDirectional.fromSTEB(28, 0, 28, 16), + child: Material( + color: Colors.transparent, + elevation: 0, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(30), + ), + child: Container( + width: double.infinity, + height: 79.9, + constraints: BoxConstraints( + maxWidth: double.infinity, + maxHeight: 80, ), - child: Container( - width: double.infinity, - height: 80, - constraints: BoxConstraints( - maxWidth: double.infinity, - maxHeight: 80, - ), - decoration: BoxDecoration( - color: Colors.transparent, - borderRadius: BorderRadius.circular(30), - border: Border.all( - color: Color(0x23F6F6F6), - width: 1, - ), + decoration: BoxDecoration( + color: Colors.transparent, + borderRadius: BorderRadius.circular(30), + border: Border.all( + color: Color(0x23F6F6F6), + width: 1, ), + ), + alignment: AlignmentDirectional(0, 0), + child: Align( alignment: AlignmentDirectional(0, 0), - child: Align( - alignment: AlignmentDirectional(0, 0), - child: Padding( - padding: EdgeInsetsDirectional.fromSTEB(25, 0, 5, 0), - child: TextFormField( - controller: textController3, - autofocus: true, - obscureText: false, - decoration: InputDecoration( - hintText: 'Password', - hintStyle: TextStyle( - fontFamily: 'Satoshi', - color: Color(0x99A7A7A7), - fontWeight: FontWeight.w500, - fontSize: 16, - ), - enabledBorder: InputBorder.none, - focusedBorder: InputBorder.none, - errorBorder: InputBorder.none, - focusedErrorBorder: InputBorder.none, - ), - style: TextStyle( + child: Padding( + padding: EdgeInsetsDirectional.fromSTEB(25, 0, 5, 0), + child: TextFormField( + controller: textController2, + autofocus: true, + obscureText: false, + decoration: InputDecoration( + hintText: 'Enter Email', + hintStyle: TextStyle( fontFamily: 'Satoshi', - color: FlutterFlowTheme.of(context).hintColor, - fontWeight: FontWeight.bold, + color: Color(0x9AA7A7A7), + fontWeight: FontWeight.w500, fontSize: 16, ), + enabledBorder: InputBorder.none, + focusedBorder: InputBorder.none, + errorBorder: InputBorder.none, + focusedErrorBorder: InputBorder.none, ), - ), - ), - ), - ).animateOnPageLoad( - animationsMap['containerOnPageLoadAnimation4']!), - ), - Padding( - padding: EdgeInsetsDirectional.fromSTEB(45, 0, 0, 22), - child: Row( - mainAxisSize: MainAxisSize.max, - children: [ - Align( - alignment: AlignmentDirectional(0, 0), - child: Text( - 'Recovery Password', - textAlign: TextAlign.center, style: TextStyle( - color: FlutterFlowTheme.of(context).aeaeae, - fontWeight: FontWeight.w500, - fontSize: 14, + fontFamily: 'Satoshi', + color: FlutterFlowTheme.of(context).hintColor, + fontWeight: FontWeight.bold, + fontSize: 16, ), - ).animateOnPageLoad( - animationsMap['textOnPageLoadAnimation2']!), - ), - ], - ), - ), - Padding( - padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 21), - child: FFButtonWidget( - onPressed: () async { - await Navigator.push( - context, - PageTransition( - type: PageTransitionType.rightToLeft, - duration: Duration(milliseconds: 300), - reverseDuration: Duration(milliseconds: 300), - child: MainPageWidget(), + keyboardType: TextInputType.emailAddress, ), - ); - }, - text: 'Create Account', - options: FFButtonOptions( - width: 329, - height: 92, - color: FlutterFlowTheme.of(context).primaryColor, - textStyle: TextStyle( - fontFamily: 'Satoshi', - color: FlutterFlowTheme.of(context).f6f6f6, - fontWeight: FontWeight.w500, - fontSize: 22, ), - borderSide: BorderSide( - color: Colors.transparent, + ), + ), + ).animateOnPageLoad( + animationsMap['containerOnPageLoadAnimation3']!), + ), + Padding( + padding: EdgeInsetsDirectional.fromSTEB(28, 0, 28, 20), + child: Material( + color: Colors.transparent, + elevation: 0, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(30), + ), + child: Container( + width: double.infinity, + height: 80, + constraints: BoxConstraints( + maxWidth: double.infinity, + maxHeight: 80, + ), + decoration: BoxDecoration( + color: Colors.transparent, + borderRadius: BorderRadius.circular(30), + border: Border.all( + color: Color(0x23F6F6F6), width: 1, ), - borderRadius: BorderRadius.circular(30), ), - showLoadingIndicator: false, - ).animateOnPageLoad( - animationsMap['buttonOnPageLoadAnimation']!), - ), - Padding( - padding: EdgeInsetsDirectional.fromSTEB(33, 0, 33, 51), - child: Row( - mainAxisSize: MainAxisSize.max, - children: [ - Expanded( - flex: 1, - child: Container( - width: 146, - height: 1, - decoration: BoxDecoration( - gradient: LinearGradient( - colors: [ - FlutterFlowTheme.of(context).gradient1, - FlutterFlowTheme.of(context).gradient2 - ], - stops: [0, 1], - begin: AlignmentDirectional(0, -1), - end: AlignmentDirectional(0, 1), - ), - borderRadius: BorderRadius.circular(30), - border: Border.all( - color: Colors.transparent, + alignment: AlignmentDirectional(0, 0), + child: Align( + alignment: AlignmentDirectional(0, 0), + child: Padding( + padding: EdgeInsetsDirectional.fromSTEB(25, 0, 5, 0), + child: TextFormField( + controller: textController3, + autofocus: true, + obscureText: false, + decoration: InputDecoration( + hintText: 'Password', + hintStyle: TextStyle( + fontFamily: 'Satoshi', + color: Color(0x99A7A7A7), + fontWeight: FontWeight.w500, + fontSize: 16, ), + enabledBorder: InputBorder.none, + focusedBorder: InputBorder.none, + errorBorder: InputBorder.none, + focusedErrorBorder: InputBorder.none, + ), + style: TextStyle( + fontFamily: 'Satoshi', + color: FlutterFlowTheme.of(context).hintColor, + fontWeight: FontWeight.bold, + fontSize: 16, ), ), ), - Padding( - padding: EdgeInsetsDirectional.fromSTEB(10, 0, 10, 0), - child: Text( - 'Or', - style: - FlutterFlowTheme.of(context).bodyText1.override( - fontFamily: 'Satoshi', - color: FlutterFlowTheme.of(context).dcdcdc, - fontSize: 12, - fontWeight: FontWeight.w300, - useGoogleFonts: false, - ), + ), + ), + ).animateOnPageLoad( + animationsMap['containerOnPageLoadAnimation4']!), + ), + Padding( + padding: EdgeInsetsDirectional.fromSTEB(45, 0, 0, 22), + child: Row( + mainAxisSize: MainAxisSize.max, + children: [ + Align( + alignment: AlignmentDirectional(0, 0), + child: Text( + 'Recovery Password', + textAlign: TextAlign.center, + style: TextStyle( + color: FlutterFlowTheme.of(context).aeaeae, + fontWeight: FontWeight.w500, + fontSize: 14, ), + ).animateOnPageLoad( + animationsMap['textOnPageLoadAnimation2']!), + ), + ], + ), + ), + Padding( + padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 21), + child: FFButtonWidget( + onPressed: () async { + await Navigator.push( + context, + PageTransition( + type: PageTransitionType.rightToLeft, + duration: Duration(milliseconds: 300), + reverseDuration: Duration(milliseconds: 300), + child: MainPageWidget(), ), - Expanded( - flex: 1, - child: Container( - width: 146, - height: 1, - decoration: BoxDecoration( - gradient: LinearGradient( - colors: [ - FlutterFlowTheme.of(context).gradient2, - FlutterFlowTheme.of(context).gradient1 - ], - stops: [0, 1], - begin: AlignmentDirectional(0, -1), - end: AlignmentDirectional(0, 1), - ), - borderRadius: BorderRadius.circular(30), - border: Border.all( - color: Colors.transparent, - ), + ); + }, + text: 'Create Account', + options: FFButtonOptions( + width: 329, + height: 92, + color: FlutterFlowTheme.of(context).primaryColor, + textStyle: TextStyle( + fontFamily: 'Satoshi', + color: FlutterFlowTheme.of(context).f6f6f6, + fontWeight: FontWeight.w500, + fontSize: 22, + ), + borderSide: BorderSide( + color: Colors.transparent, + width: 1, + ), + borderRadius: BorderRadius.circular(30), + ), + showLoadingIndicator: false, + ).animateOnPageLoad( + animationsMap['buttonOnPageLoadAnimation']!), + ), + Padding( + padding: EdgeInsetsDirectional.fromSTEB(33, 0, 33, 51), + child: Row( + mainAxisSize: MainAxisSize.max, + children: [ + Expanded( + flex: 1, + child: Container( + width: 146, + height: 1, + decoration: BoxDecoration( + gradient: LinearGradient( + colors: [ + FlutterFlowTheme.of(context).gradient1, + FlutterFlowTheme.of(context).gradient2 + ], + stops: [0, 1], + begin: AlignmentDirectional(0, -1), + end: AlignmentDirectional(0, 1), + ), + borderRadius: BorderRadius.circular(30), + border: Border.all( + color: Colors.transparent, ), ), ), - ], - ).animateOnPageLoad( - animationsMap['rowOnPageLoadAnimation2']!), - ), - Padding( - padding: EdgeInsetsDirectional.fromSTEB(137, 0, 137, 57), - child: Row( - mainAxisSize: MainAxisSize.max, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - SvgPicture.asset( - 'assets/images/google.svg', - width: 28, - height: 29, - fit: BoxFit.cover, + ), + Padding( + padding: EdgeInsetsDirectional.fromSTEB(10, 0, 10, 0), + child: Text( + 'Or', + style: FlutterFlowTheme.of(context).bodyText1.override( + fontFamily: 'Satoshi', + color: FlutterFlowTheme.of(context).dcdcdc, + fontSize: 12, + fontWeight: FontWeight.w300, + useGoogleFonts: false, + ), ), - Container( - width: 30, + ), + Expanded( + flex: 1, + child: Container( + width: 146, + height: 1, decoration: BoxDecoration( - color: Colors.transparent, + gradient: LinearGradient( + colors: [ + FlutterFlowTheme.of(context).gradient2, + FlutterFlowTheme.of(context).gradient1 + ], + stops: [0, 1], + begin: AlignmentDirectional(0, -1), + end: AlignmentDirectional(0, 1), + ), + borderRadius: BorderRadius.circular(30), + border: Border.all( + color: Colors.transparent, + ), ), ), - SvgPicture.asset( - 'assets/images/apple.svg', - width: 29, - height: 36, - fit: BoxFit.cover, + ), + ], + ).animateOnPageLoad(animationsMap['rowOnPageLoadAnimation2']!), + ), + Padding( + padding: EdgeInsetsDirectional.fromSTEB(137, 0, 137, 57), + child: Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + SvgPicture.asset( + 'assets/images/google.svg', + width: 28, + height: 29, + fit: BoxFit.cover, + ), + Container( + width: 30, + decoration: BoxDecoration( + color: Colors.transparent, + ), + ), + SvgPicture.asset( + 'assets/images/apple.svg', + width: 29, + height: 36, + fit: BoxFit.cover, + ), + ], + ).animateOnPageLoad(animationsMap['rowOnPageLoadAnimation3']!), + ), + Padding( + padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 38), + child: Row( + mainAxisSize: MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + 'Do You Have An Account ?', + style: TextStyle( + fontFamily: 'Satoshi', + color: FlutterFlowTheme.of(context).dbdbdb, + fontWeight: FontWeight.w500, + fontSize: 14, ), - ], - ).animateOnPageLoad( - animationsMap['rowOnPageLoadAnimation3']!), - ), - Padding( - padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 38), - child: Row( - mainAxisSize: MainAxisSize.min, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - 'Not A Member ?', + ), + InkWell( + onTap: () async { + await Navigator.push( + context, + PageTransition( + type: PageTransitionType.rightToLeft, + duration: Duration(milliseconds: 300), + reverseDuration: Duration(milliseconds: 300), + child: SignInPageWidget(), + ), + ); + }, + child: Text( + ' Sign In', style: TextStyle( - fontFamily: 'Satoshi', - color: FlutterFlowTheme.of(context).dbdbdb, + color: FlutterFlowTheme.of(context).blueColor, fontWeight: FontWeight.w500, fontSize: 14, ), ), - InkWell( - onTap: () async { - await Navigator.push( - context, - PageTransition( - type: PageTransitionType.rightToLeft, - duration: Duration(milliseconds: 300), - reverseDuration: Duration(milliseconds: 300), - child: SignInPageWidget(), - ), - ); - }, - child: Text( - ' Register Now', - style: TextStyle( - color: FlutterFlowTheme.of(context).blueColor, - fontWeight: FontWeight.w500, - fontSize: 14, - ), - ), - ), - ], - ).animateOnPageLoad( - animationsMap['rowOnPageLoadAnimation4']!), - ), - ], - ), + ), + ], + ).animateOnPageLoad(animationsMap['rowOnPageLoadAnimation4']!), + ), + ], ), ), ), diff --git a/lib/sign_in_page/sign_in_page_widget.dart b/lib/sign_in_page/sign_in_page_widget.dart index 0b1a662..14bda00 100644 --- a/lib/sign_in_page/sign_in_page_widget.dart +++ b/lib/sign_in_page/sign_in_page_widget.dart @@ -1,16 +1,15 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_animate/flutter_animate.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:provider/provider.dart'; +import 'package:spotify_redesign/utils/extensions.dart'; + import '../flutter_flow/flutter_flow_animations.dart'; import '../flutter_flow/flutter_flow_theme.dart'; import '../flutter_flow/flutter_flow_util.dart'; import '../flutter_flow/flutter_flow_widgets.dart'; import '../main_page/main_page_widget.dart'; import '../register_page/register_page_widget.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/scheduler.dart'; -import 'package:flutter_animate/flutter_animate.dart'; -import 'package:flutter_spinkit/flutter_spinkit.dart'; -import 'package:flutter_svg/flutter_svg.dart'; -import 'package:google_fonts/google_fonts.dart'; -import 'package:provider/provider.dart'; class SignInPageWidget extends StatefulWidget { const SignInPageWidget({Key? key}) : super(key: key); @@ -185,414 +184,406 @@ class _SignInPageWidgetState extends State return Scaffold( key: scaffoldKey, backgroundColor: FlutterFlowTheme.of(context).primaryBackground, - body: SafeArea( - child: GestureDetector( - onTap: () => FocusScope.of(context).requestFocus(_unfocusNode), - child: SingleChildScrollView( - child: Column( - mainAxisSize: MainAxisSize.max, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Padding( - padding: EdgeInsetsDirectional.fromSTEB(25, 30, 30, 0), - child: Row( - mainAxisSize: MainAxisSize.max, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Align( - alignment: AlignmentDirectional(-1, -1), - child: Container( - width: 32, - height: 32, - decoration: BoxDecoration( - color: FlutterFlowTheme.of(context) - .secondaryBackground, - shape: BoxShape.circle, - ), - child: InkWell( - onTap: () async { - Navigator.pop(context); - }, - child: SvgPicture.asset( - 'assets/images/left.svg', - fit: BoxFit.scaleDown, - ), - ), - ), - ), - SvgPicture.asset( - 'assets/images/spotify.svg', - width: 108, - height: 33, - fit: BoxFit.scaleDown, - ), - Container( + body: GestureDetector( + onTap: () => FocusScope.of(context).requestFocus(_unfocusNode), + child: SingleChildScrollView( + child: Column( + mainAxisSize: MainAxisSize.max, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Padding( + padding: EdgeInsetsDirectional.fromSTEB( + 25, context.topPadding(), 30, 0), + child: Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Align( + alignment: AlignmentDirectional(-1, -1), + child: Container( width: 32, height: 32, - constraints: BoxConstraints( - maxWidth: 0, - maxHeight: 0, - ), decoration: BoxDecoration( - color: Colors.transparent, - shape: BoxShape.rectangle, + color: + FlutterFlowTheme.of(context).secondaryBackground, + shape: BoxShape.circle, ), - ), - ], - ).animateOnPageLoad( - animationsMap['rowOnPageLoadAnimation1']!), - ), - Padding( - padding: EdgeInsetsDirectional.fromSTEB(0, 47, 0, 22), - child: Text( - 'Sign In', - textAlign: TextAlign.start, - style: TextStyle( - fontFamily: 'Satoshi', - color: FlutterFlowTheme.of(context).f2f2f2, - fontWeight: FontWeight.w500, - fontSize: 30, - ), - ).animateOnPageLoad( - animationsMap['textOnPageLoadAnimation1']!), - ), - Padding( - padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 38), - child: Row( - mainAxisSize: MainAxisSize.min, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - 'If You Need Any Support', - style: TextStyle( - fontFamily: 'Satoshi', - color: FlutterFlowTheme.of(context).e1e1e1, - fontWeight: FontWeight.w300, - fontSize: 12, - ), - ), - Text( - ' Click Here', - style: TextStyle( - color: FlutterFlowTheme.of(context).secondaryColor, - fontWeight: FontWeight.w300, - fontSize: 12, + child: InkWell( + onTap: () async { + Navigator.pop(context); + }, + child: SvgPicture.asset( + 'assets/images/left.svg', + fit: BoxFit.scaleDown, + ), ), ), - ], - ).animateOnPageLoad( - animationsMap['rowOnPageLoadAnimation2']!), - ), - Padding( - padding: EdgeInsetsDirectional.fromSTEB(28, 0, 28, 16), - child: Material( - color: Colors.transparent, - elevation: 0, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(30), ), - child: Container( - width: double.infinity, - height: 80, + SvgPicture.asset( + 'assets/images/spotify.svg', + width: 108, + height: 33, + fit: BoxFit.scaleDown, + ), + Container( + width: 32, + height: 32, constraints: BoxConstraints( - maxWidth: double.infinity, - maxHeight: 80, + maxWidth: 0, + maxHeight: 0, ), decoration: BoxDecoration( color: Colors.transparent, - borderRadius: BorderRadius.circular(30), - border: Border.all( - color: Color(0x23F6F6F6), - width: 1, - ), + shape: BoxShape.rectangle, + ), + ), + ], + ).animateOnPageLoad(animationsMap['rowOnPageLoadAnimation1']!), + ), + Padding( + padding: EdgeInsetsDirectional.fromSTEB(0, 47, 0, 22), + child: Text( + 'Sign In', + textAlign: TextAlign.start, + style: TextStyle( + fontFamily: 'Satoshi', + color: FlutterFlowTheme.of(context).f2f2f2, + fontWeight: FontWeight.w500, + fontSize: 30, + ), + ).animateOnPageLoad(animationsMap['textOnPageLoadAnimation1']!), + ), + Padding( + padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 38), + child: Row( + mainAxisSize: MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + 'If You Need Any Support', + style: TextStyle( + fontFamily: 'Satoshi', + color: FlutterFlowTheme.of(context).e1e1e1, + fontWeight: FontWeight.w300, + fontSize: 12, + ), + ), + Text( + ' Click Here', + style: TextStyle( + color: FlutterFlowTheme.of(context).secondaryColor, + fontWeight: FontWeight.w300, + fontSize: 12, ), + ), + ], + ).animateOnPageLoad(animationsMap['rowOnPageLoadAnimation2']!), + ), + Padding( + padding: EdgeInsetsDirectional.fromSTEB(28, 0, 28, 16), + child: Material( + color: Colors.transparent, + elevation: 0, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(30), + ), + child: Container( + width: double.infinity, + height: 80, + constraints: BoxConstraints( + maxWidth: double.infinity, + maxHeight: 80, + ), + decoration: BoxDecoration( + color: Colors.transparent, + borderRadius: BorderRadius.circular(30), + border: Border.all( + color: Color(0x23F6F6F6), + width: 1, + ), + ), + alignment: AlignmentDirectional(0, 0), + child: Align( alignment: AlignmentDirectional(0, 0), - child: Align( - alignment: AlignmentDirectional(0, 0), - child: Padding( - padding: EdgeInsetsDirectional.fromSTEB(25, 0, 5, 0), - child: TextFormField( - controller: textController1, - autofocus: true, - obscureText: false, - decoration: InputDecoration( - hintText: 'Enter Username Or Email', - hintStyle: TextStyle( - fontFamily: 'Satoshi', - color: Color(0x9AA7A7A7), - fontWeight: FontWeight.w500, - fontSize: 16, - ), - enabledBorder: InputBorder.none, - focusedBorder: InputBorder.none, - errorBorder: InputBorder.none, - focusedErrorBorder: InputBorder.none, - ), - style: TextStyle( + child: Padding( + padding: EdgeInsetsDirectional.fromSTEB(25, 0, 5, 0), + child: TextFormField( + controller: textController1, + autofocus: true, + obscureText: false, + decoration: InputDecoration( + hintText: 'Enter Username Or Email', + hintStyle: TextStyle( fontFamily: 'Satoshi', - color: FlutterFlowTheme.of(context).hintColor, - fontWeight: FontWeight.bold, + color: Color(0x9AA7A7A7), + fontWeight: FontWeight.w500, fontSize: 16, ), + enabledBorder: InputBorder.none, + focusedBorder: InputBorder.none, + errorBorder: InputBorder.none, + focusedErrorBorder: InputBorder.none, + ), + style: TextStyle( + fontFamily: 'Satoshi', + color: FlutterFlowTheme.of(context).hintColor, + fontWeight: FontWeight.bold, + fontSize: 16, ), ), ), ), - ).animateOnPageLoad( - animationsMap['containerOnPageLoadAnimation1']!), - ), - Padding( - padding: EdgeInsetsDirectional.fromSTEB(28, 0, 28, 20), - child: Material( - color: Colors.transparent, - elevation: 0, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(30), + ), + ).animateOnPageLoad( + animationsMap['containerOnPageLoadAnimation1']!), + ), + Padding( + padding: EdgeInsetsDirectional.fromSTEB(28, 0, 28, 20), + child: Material( + color: Colors.transparent, + elevation: 0, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(30), + ), + child: Container( + width: double.infinity, + height: 80, + constraints: BoxConstraints( + maxWidth: double.infinity, + maxHeight: 80, ), - child: Container( - width: double.infinity, - height: 80, - constraints: BoxConstraints( - maxWidth: double.infinity, - maxHeight: 80, - ), - decoration: BoxDecoration( - color: Colors.transparent, - borderRadius: BorderRadius.circular(30), - border: Border.all( - color: Color(0x23F6F6F6), - width: 1, - ), + decoration: BoxDecoration( + color: Colors.transparent, + borderRadius: BorderRadius.circular(30), + border: Border.all( + color: Color(0x23F6F6F6), + width: 1, ), + ), + alignment: AlignmentDirectional(0, 0), + child: Align( alignment: AlignmentDirectional(0, 0), - child: Align( - alignment: AlignmentDirectional(0, 0), - child: Padding( - padding: EdgeInsetsDirectional.fromSTEB(25, 0, 5, 0), - child: TextFormField( - controller: textController2, - autofocus: true, - obscureText: false, - decoration: InputDecoration( - hintText: 'Password', - hintStyle: TextStyle( - fontFamily: 'Satoshi', - color: Color(0x99A7A7A7), - fontWeight: FontWeight.w500, - fontSize: 16, - ), - enabledBorder: InputBorder.none, - focusedBorder: InputBorder.none, - errorBorder: InputBorder.none, - focusedErrorBorder: InputBorder.none, - ), - style: TextStyle( + child: Padding( + padding: EdgeInsetsDirectional.fromSTEB(25, 0, 5, 0), + child: TextFormField( + controller: textController2, + autofocus: true, + obscureText: false, + decoration: InputDecoration( + hintText: 'Password', + hintStyle: TextStyle( fontFamily: 'Satoshi', - color: FlutterFlowTheme.of(context).hintColor, - fontWeight: FontWeight.bold, + color: Color(0x99A7A7A7), + fontWeight: FontWeight.w500, fontSize: 16, ), + enabledBorder: InputBorder.none, + focusedBorder: InputBorder.none, + errorBorder: InputBorder.none, + focusedErrorBorder: InputBorder.none, ), - ), - ), - ), - ).animateOnPageLoad( - animationsMap['containerOnPageLoadAnimation2']!), - ), - Padding( - padding: EdgeInsetsDirectional.fromSTEB(45, 0, 0, 22), - child: Row( - mainAxisSize: MainAxisSize.max, - children: [ - Align( - alignment: AlignmentDirectional(0, 0), - child: Text( - 'Recovery Password', - textAlign: TextAlign.center, style: TextStyle( - color: FlutterFlowTheme.of(context).aeaeae, - fontWeight: FontWeight.w500, - fontSize: 14, + fontFamily: 'Satoshi', + color: FlutterFlowTheme.of(context).hintColor, + fontWeight: FontWeight.bold, + fontSize: 16, ), - ).animateOnPageLoad( - animationsMap['textOnPageLoadAnimation2']!), + ), ), - ], + ), ), - ), - Padding( - padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 21), - child: FFButtonWidget( - onPressed: () async { - await Navigator.push( - context, - PageTransition( - type: PageTransitionType.rightToLeft, - duration: Duration(milliseconds: 300), - reverseDuration: Duration(milliseconds: 300), - child: MainPageWidget(), + ).animateOnPageLoad( + animationsMap['containerOnPageLoadAnimation2']!), + ), + Padding( + padding: EdgeInsetsDirectional.fromSTEB(45, 0, 0, 22), + child: Row( + mainAxisSize: MainAxisSize.max, + children: [ + Align( + alignment: AlignmentDirectional(0, 0), + child: Text( + 'Recovery Password', + textAlign: TextAlign.center, + style: TextStyle( + color: FlutterFlowTheme.of(context).aeaeae, + fontWeight: FontWeight.w500, + fontSize: 14, ), - ); - }, - text: 'Sign In', - options: FFButtonOptions( - width: 329, - height: 92, - color: FlutterFlowTheme.of(context).primaryColor, - textStyle: TextStyle( - fontFamily: 'Satoshi', - color: FlutterFlowTheme.of(context).f6f6f6, - fontWeight: FontWeight.w500, - fontSize: 22, - ), - borderSide: BorderSide( - color: Colors.transparent, - width: 1, - ), - borderRadius: BorderRadius.circular(30), + ).animateOnPageLoad( + animationsMap['textOnPageLoadAnimation2']!), ), - showLoadingIndicator: false, - ).animateOnPageLoad( - animationsMap['buttonOnPageLoadAnimation']!), + ], ), - Padding( - padding: EdgeInsetsDirectional.fromSTEB(33, 0, 33, 51), - child: Row( - mainAxisSize: MainAxisSize.max, - children: [ - Expanded( - flex: 1, - child: Container( - width: 146, - height: 1, - decoration: BoxDecoration( - gradient: LinearGradient( - colors: [ - FlutterFlowTheme.of(context).gradient1, - FlutterFlowTheme.of(context).gradient2 - ], - stops: [0, 1], - begin: AlignmentDirectional(0, -1), - end: AlignmentDirectional(0, 1), - ), - borderRadius: BorderRadius.circular(30), - border: Border.all( - color: Colors.transparent, - ), - ), - ), + ), + Padding( + padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 21), + child: FFButtonWidget( + onPressed: () async { + await Navigator.push( + context, + PageTransition( + type: PageTransitionType.rightToLeft, + duration: Duration(milliseconds: 300), + reverseDuration: Duration(milliseconds: 300), + child: MainPageWidget(), ), - Padding( - padding: EdgeInsetsDirectional.fromSTEB(10, 0, 10, 0), - child: Text( - 'Or', - style: - FlutterFlowTheme.of(context).bodyText1.override( - fontFamily: 'Satoshi', - color: FlutterFlowTheme.of(context).dcdcdc, - fontSize: 12, - fontWeight: FontWeight.w300, - useGoogleFonts: false, - ), - ), - ), - Expanded( - flex: 1, - child: Container( - width: 146, - height: 1, - decoration: BoxDecoration( - gradient: LinearGradient( - colors: [ - FlutterFlowTheme.of(context).gradient2, - FlutterFlowTheme.of(context).gradient1 - ], - stops: [0, 1], - begin: AlignmentDirectional(0, -1), - end: AlignmentDirectional(0, 1), - ), - borderRadius: BorderRadius.circular(30), - border: Border.all( - color: Colors.transparent, - ), + ); + }, + text: 'Sign In', + options: FFButtonOptions( + width: 329, + height: 92, + color: FlutterFlowTheme.of(context).primaryColor, + textStyle: TextStyle( + fontFamily: 'Satoshi', + color: FlutterFlowTheme.of(context).f6f6f6, + fontWeight: FontWeight.w500, + fontSize: 22, + ), + borderSide: BorderSide( + color: Colors.transparent, + width: 1, + ), + borderRadius: BorderRadius.circular(30), + ), + showLoadingIndicator: false, + ).animateOnPageLoad( + animationsMap['buttonOnPageLoadAnimation']!), + ), + Padding( + padding: EdgeInsetsDirectional.fromSTEB(33, 0, 33, 51), + child: Row( + mainAxisSize: MainAxisSize.max, + children: [ + Expanded( + flex: 1, + child: Container( + width: 146, + height: 1, + decoration: BoxDecoration( + gradient: LinearGradient( + colors: [ + FlutterFlowTheme.of(context).gradient1, + FlutterFlowTheme.of(context).gradient2 + ], + stops: [0, 1], + begin: AlignmentDirectional(0, -1), + end: AlignmentDirectional(0, 1), + ), + borderRadius: BorderRadius.circular(30), + border: Border.all( + color: Colors.transparent, ), ), ), - ], - ).animateOnPageLoad( - animationsMap['rowOnPageLoadAnimation3']!), - ), - Padding( - padding: EdgeInsetsDirectional.fromSTEB(137, 0, 137, 57), - child: Row( - mainAxisSize: MainAxisSize.max, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - SvgPicture.asset( - 'assets/images/google.svg', - width: 28, - height: 29, - fit: BoxFit.cover, + ), + Padding( + padding: EdgeInsetsDirectional.fromSTEB(10, 0, 10, 0), + child: Text( + 'Or', + style: FlutterFlowTheme.of(context).bodyText1.override( + fontFamily: 'Satoshi', + color: FlutterFlowTheme.of(context).dcdcdc, + fontSize: 12, + fontWeight: FontWeight.w300, + useGoogleFonts: false, + ), ), - Container( - width: 30, + ), + Expanded( + flex: 1, + child: Container( + width: 146, + height: 1, decoration: BoxDecoration( - color: Colors.transparent, + gradient: LinearGradient( + colors: [ + FlutterFlowTheme.of(context).gradient2, + FlutterFlowTheme.of(context).gradient1 + ], + stops: [0, 1], + begin: AlignmentDirectional(0, -1), + end: AlignmentDirectional(0, 1), + ), + borderRadius: BorderRadius.circular(30), + border: Border.all( + color: Colors.transparent, + ), ), ), - SvgPicture.asset( - 'assets/images/apple.svg', - width: 29, - height: 36, - fit: BoxFit.cover, + ), + ], + ).animateOnPageLoad(animationsMap['rowOnPageLoadAnimation3']!), + ), + Padding( + padding: EdgeInsetsDirectional.fromSTEB(137, 0, 137, 57), + child: Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + SvgPicture.asset( + 'assets/images/google.svg', + width: 28, + height: 29, + fit: BoxFit.cover, + ), + Container( + width: 30, + decoration: BoxDecoration( + color: Colors.transparent, ), - ], - ).animateOnPageLoad( - animationsMap['rowOnPageLoadAnimation4']!), - ), - Padding( - padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 38), - child: Row( - mainAxisSize: MainAxisSize.min, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - 'Do You Have An Account ?', + ), + SvgPicture.asset( + 'assets/images/apple.svg', + width: 29, + height: 36, + fit: BoxFit.cover, + ), + ], + ).animateOnPageLoad(animationsMap['rowOnPageLoadAnimation4']!), + ), + Padding( + padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 38), + child: Row( + mainAxisSize: MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + 'Not A Member ?', + style: TextStyle( + fontFamily: 'Satoshi', + color: FlutterFlowTheme.of(context).dbdbdb, + fontWeight: FontWeight.w500, + fontSize: 14, + ), + ), + InkWell( + onTap: () async { + await Navigator.push( + context, + PageTransition( + type: PageTransitionType.rightToLeft, + duration: Duration(milliseconds: 300), + reverseDuration: Duration(milliseconds: 300), + child: RegisterPageWidget(), + ), + ); + }, + child: Text( + ' Register Now', style: TextStyle( - fontFamily: 'Satoshi', - color: FlutterFlowTheme.of(context).dbdbdb, + color: FlutterFlowTheme.of(context).blueColor, fontWeight: FontWeight.w500, fontSize: 14, ), ), - InkWell( - onTap: () async { - await Navigator.push( - context, - PageTransition( - type: PageTransitionType.rightToLeft, - duration: Duration(milliseconds: 300), - reverseDuration: Duration(milliseconds: 300), - child: RegisterPageWidget(), - ), - ); - }, - child: Text( - ' Sign In', - style: TextStyle( - color: FlutterFlowTheme.of(context).blueColor, - fontWeight: FontWeight.w500, - fontSize: 14, - ), - ), - ), - ], - ).animateOnPageLoad( - animationsMap['rowOnPageLoadAnimation5']!), - ), - ], - ), + ), + ], + ).animateOnPageLoad(animationsMap['rowOnPageLoadAnimation5']!), + ), + ], ), ), ), diff --git a/lib/song_details_page/song_details_page_widget.dart b/lib/song_details_page/song_details_page_widget.dart index 340fba3..8d5dd4f 100644 --- a/lib/song_details_page/song_details_page_widget.dart +++ b/lib/song_details_page/song_details_page_widget.dart @@ -1,15 +1,14 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_animate/flutter_animate.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:provider/provider.dart'; +import 'package:spotify_redesign/utils/extensions.dart'; + import '../components/back_button_widget.dart'; import '../flutter_flow/flutter_flow_animations.dart'; import '../flutter_flow/flutter_flow_theme.dart'; import '../flutter_flow/flutter_flow_util.dart'; import '../song_lyrics_page/song_lyrics_page_widget.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/scheduler.dart'; -import 'package:flutter_animate/flutter_animate.dart'; -import 'package:flutter_spinkit/flutter_spinkit.dart'; -import 'package:flutter_svg/flutter_svg.dart'; -import 'package:google_fonts/google_fonts.dart'; -import 'package:provider/provider.dart'; class SongDetailsPageWidget extends StatefulWidget { const SongDetailsPageWidget({ @@ -368,298 +367,295 @@ class _SongDetailsPageWidgetState extends State return Scaffold( key: scaffoldKey, backgroundColor: FlutterFlowTheme.of(context).primaryBackground, - body: SafeArea( - child: GestureDetector( - onTap: () => FocusScope.of(context).requestFocus(_unfocusNode), - child: Padding( - padding: EdgeInsetsDirectional.fromSTEB(27, 0, 27, 20), - child: SingleChildScrollView( - child: Column( - mainAxisSize: MainAxisSize.max, - children: [ - Align( - alignment: AlignmentDirectional(0, -1), - child: Padding( - padding: EdgeInsetsDirectional.fromSTEB(2, 30, 2, 29), - child: Row( - mainAxisSize: MainAxisSize.max, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - BackButtonWidget().animateOnPageLoad( - animationsMap['backButtonOnPageLoadAnimation']!), - Text( - 'Now Playing', - style: TextStyle( - fontFamily: 'Satoshi', - color: FlutterFlowTheme.of(context).dddddd, - fontWeight: FontWeight.w500, - fontSize: 18, - ), - ).animateOnPageLoad( - animationsMap['textOnPageLoadAnimation1']!), - SvgPicture.asset( - 'assets/images/vert.svg', - width: 4, - height: 18, - fit: BoxFit.cover, - ).animateOnPageLoad( - animationsMap['imageOnPageLoadAnimation1']!), - ], - ), - ), - ), - Padding( - padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 17), - child: Hero( - tag: widget.imageURL!, - transitionOnUserGestures: true, - child: ClipRRect( - borderRadius: BorderRadius.circular(30), - child: Image.network( - widget.imageURL!, - width: double.infinity, - height: MediaQuery.of(context).size.height * 0.4, - fit: BoxFit.cover, - ), - ), - ), - ), - Padding( - padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 40), + body: GestureDetector( + onTap: () => FocusScope.of(context).requestFocus(_unfocusNode), + child: Padding( + padding: EdgeInsetsDirectional.fromSTEB( + 27, context.topPadding(10), 27, 20), + child: SingleChildScrollView( + child: Column( + mainAxisSize: MainAxisSize.max, + children: [ + Align( + alignment: AlignmentDirectional(0, -1), + child: Padding( + padding: EdgeInsetsDirectional.fromSTEB(2, 0, 2, 29), child: Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Column( - mainAxisSize: MainAxisSize.max, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - widget.songName!, - style: TextStyle( - fontFamily: 'Satoshi', - color: FlutterFlowTheme.of(context).dfdfdf, - fontWeight: FontWeight.w500, - fontSize: 20, - ), - ), - Text( - widget.artistName!, - style: TextStyle( - fontFamily: 'Satoshi', - color: FlutterFlowTheme.of(context).bababa, - fontWeight: FontWeight.w300, - fontSize: 20, - ), - ), - ], + BackButtonWidget().animateOnPageLoad( + animationsMap['backButtonOnPageLoadAnimation']!), + Text( + 'Now Playing', + style: TextStyle( + fontFamily: 'Satoshi', + color: FlutterFlowTheme.of(context).dddddd, + fontWeight: FontWeight.w500, + fontSize: 18, + ), ).animateOnPageLoad( - animationsMap['columnOnPageLoadAnimation']!), + animationsMap['textOnPageLoadAnimation1']!), SvgPicture.asset( - 'assets/images/heart.svg', - width: 24, - height: 24, - fit: BoxFit.scaleDown, + 'assets/images/vert.svg', + width: 4, + height: 18, + fit: BoxFit.cover, ).animateOnPageLoad( - animationsMap['imageOnPageLoadAnimation2']!), + animationsMap['imageOnPageLoadAnimation1']!), ], ), ), - Align( - alignment: AlignmentDirectional(0, 0), - child: Padding( - padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 8), - child: Stack( - alignment: AlignmentDirectional(0, 0.1499999999999999), - children: [ - Align( - alignment: AlignmentDirectional(0, 0), - child: Container( - width: double.infinity, - height: 2, - decoration: BoxDecoration( - color: FlutterFlowTheme.of(context) - .secondaryBackground, - borderRadius: BorderRadius.circular(20), - ), - ).animateOnPageLoad(animationsMap[ - 'containerOnPageLoadAnimation1']!), - ), - Align( - alignment: AlignmentDirectional(-1, 0), - child: Container( - width: MediaQuery.of(context).size.width * 0.4, - height: 2.5, - decoration: BoxDecoration( - color: FlutterFlowTheme.of(context).b7b7b7, - borderRadius: BorderRadius.circular(20), - ), - alignment: AlignmentDirectional(0, 0), - ).animateOnPageLoad(animationsMap[ - 'containerOnPageLoadAnimation2']!), - ), - Align( - alignment: AlignmentDirectional(-0.1, 0), - child: Container( - width: 16, - height: 16, - decoration: BoxDecoration( - color: FlutterFlowTheme.of(context).b7b7b7, - shape: BoxShape.circle, - ), - alignment: AlignmentDirectional(0, 0), - ).animateOnPageLoad(animationsMap[ - 'containerOnPageLoadAnimation3']!), - ), - ], + ), + Padding( + padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 17), + child: Hero( + tag: widget.imageURL!, + transitionOnUserGestures: true, + child: ClipRRect( + borderRadius: BorderRadius.circular(30), + child: Image.network( + widget.imageURL!, + width: double.infinity, + height: MediaQuery.of(context).size.height * 0.4, + fit: BoxFit.cover, ), ), ), - Padding( - padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 46), - child: Row( - mainAxisSize: MainAxisSize.max, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - '2:25', - style: TextStyle( - color: FlutterFlowTheme.of(context).c878787, - fontWeight: FontWeight.w500, - fontSize: 12, + ), + Padding( + padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 40), + child: Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Column( + mainAxisSize: MainAxisSize.max, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + widget.songName!, + style: TextStyle( + fontFamily: 'Satoshi', + color: FlutterFlowTheme.of(context).dfdfdf, + fontWeight: FontWeight.w500, + fontSize: 20, + ), ), - ).animateOnPageLoad( - animationsMap['textOnPageLoadAnimation2']!), - Text( - '4:02', - style: TextStyle( - color: FlutterFlowTheme.of(context).c878787, - fontWeight: FontWeight.w500, - fontSize: 12, + Text( + widget.artistName!, + style: TextStyle( + fontFamily: 'Satoshi', + color: FlutterFlowTheme.of(context).bababa, + fontWeight: FontWeight.w300, + fontSize: 20, + ), ), - ).animateOnPageLoad( - animationsMap['textOnPageLoadAnimation3']!), - ], - ), + ], + ).animateOnPageLoad( + animationsMap['columnOnPageLoadAnimation']!), + SvgPicture.asset( + 'assets/images/heart.svg', + width: 24, + height: 24, + fit: BoxFit.scaleDown, + ).animateOnPageLoad( + animationsMap['imageOnPageLoadAnimation2']!), + ], ), - Padding( - padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 33), - child: Row( - mainAxisSize: MainAxisSize.max, - mainAxisAlignment: MainAxisAlignment.center, + ), + Align( + alignment: AlignmentDirectional(0, 0), + child: Padding( + padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 8), + child: Stack( + alignment: AlignmentDirectional(0, 0.1499999999999999), children: [ - SvgPicture.asset( - 'assets/images/repeat.svg', - width: 24, - height: 24, - fit: BoxFit.scaleDown, - ).animateOnPageLoad( - animationsMap['imageOnPageLoadAnimation3']!), - Padding( - padding: EdgeInsetsDirectional.fromSTEB(29, 0, 0, 0), - child: SvgPicture.asset( - 'assets/images/previous.svg', - width: 26, - height: 26, - fit: BoxFit.scaleDown, + Align( + alignment: AlignmentDirectional(0, 0), + child: Container( + width: double.infinity, + height: 2, + decoration: BoxDecoration( + color: FlutterFlowTheme.of(context) + .secondaryBackground, + borderRadius: BorderRadius.circular(20), + ), ).animateOnPageLoad( - animationsMap['imageOnPageLoadAnimation4']!), + animationsMap['containerOnPageLoadAnimation1']!), ), - Padding( - padding: EdgeInsetsDirectional.fromSTEB(17, 0, 17, 0), + Align( + alignment: AlignmentDirectional(-1, 0), child: Container( - width: 72, - height: 72, + width: MediaQuery.of(context).size.width * 0.4, + height: 2.5, decoration: BoxDecoration( - color: FlutterFlowTheme.of(context).primaryColor, - shape: BoxShape.circle, - ), - child: Padding( - padding: - EdgeInsetsDirectional.fromSTEB(1, 0, 0, 0), - child: SvgPicture.asset( - 'assets/images/pause.svg', - width: 28, - height: 28, - fit: BoxFit.scaleDown, - ), + color: FlutterFlowTheme.of(context).b7b7b7, + borderRadius: BorderRadius.circular(20), ), + alignment: AlignmentDirectional(0, 0), ).animateOnPageLoad( - animationsMap['containerOnPageLoadAnimation4']!), + animationsMap['containerOnPageLoadAnimation2']!), ), - Padding( - padding: EdgeInsetsDirectional.fromSTEB(0, 0, 29, 0), - child: SvgPicture.asset( - 'assets/images/next.svg', - width: 26, - height: 26, - fit: BoxFit.scaleDown, + Align( + alignment: AlignmentDirectional(-0.1, 0), + child: Container( + width: 16, + height: 16, + decoration: BoxDecoration( + color: FlutterFlowTheme.of(context).b7b7b7, + shape: BoxShape.circle, + ), + alignment: AlignmentDirectional(0, 0), ).animateOnPageLoad( - animationsMap['imageOnPageLoadAnimation5']!), + animationsMap['containerOnPageLoadAnimation3']!), ), - SvgPicture.asset( - 'assets/images/shuffle.svg', - width: 24, - height: 24, - fit: BoxFit.scaleDown, - ).animateOnPageLoad( - animationsMap['imageOnPageLoadAnimation6']!), ], ), ), - InkWell( - onTap: () async { - await Navigator.push( - context, - PageTransition( - type: PageTransitionType.fade, - duration: Duration(milliseconds: 300), - reverseDuration: Duration(milliseconds: 300), - child: SongLyricsPageWidget( - imageURL: widget.imageURL, - songName: widget.songName, - artistName: widget.artistName, - ), + ), + Padding( + padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 46), + child: Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + '2:25', + style: TextStyle( + color: FlutterFlowTheme.of(context).c878787, + fontWeight: FontWeight.w500, + fontSize: 12, ), - ); - }, - child: SvgPicture.asset( - 'assets/images/up.svg', - width: 31, - height: 31, - fit: BoxFit.scaleDown, - ), - ).animateOnPageLoad( - animationsMap['imageOnPageLoadAnimation7']!), - InkWell( - onTap: () async { - await Navigator.push( - context, - PageTransition( - type: PageTransitionType.fade, - duration: Duration(milliseconds: 300), - reverseDuration: Duration(milliseconds: 300), - child: SongLyricsPageWidget( - imageURL: widget.imageURL, - songName: widget.songName, - artistName: widget.artistName, + ).animateOnPageLoad( + animationsMap['textOnPageLoadAnimation2']!), + Text( + '4:02', + style: TextStyle( + color: FlutterFlowTheme.of(context).c878787, + fontWeight: FontWeight.w500, + fontSize: 12, + ), + ).animateOnPageLoad( + animationsMap['textOnPageLoadAnimation3']!), + ], + ), + ), + Padding( + padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 33), + child: Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + SvgPicture.asset( + 'assets/images/repeat.svg', + width: 24, + height: 24, + fit: BoxFit.scaleDown, + ).animateOnPageLoad( + animationsMap['imageOnPageLoadAnimation3']!), + Padding( + padding: EdgeInsetsDirectional.fromSTEB(29, 0, 0, 0), + child: SvgPicture.asset( + 'assets/images/previous.svg', + width: 26, + height: 26, + fit: BoxFit.scaleDown, + ).animateOnPageLoad( + animationsMap['imageOnPageLoadAnimation4']!), + ), + Padding( + padding: EdgeInsetsDirectional.fromSTEB(17, 0, 17, 0), + child: Container( + width: 72, + height: 72, + decoration: BoxDecoration( + color: FlutterFlowTheme.of(context).primaryColor, + shape: BoxShape.circle, + ), + child: Padding( + padding: EdgeInsetsDirectional.fromSTEB(1, 0, 0, 0), + child: SvgPicture.asset( + 'assets/images/pause.svg', + width: 28, + height: 28, + fit: BoxFit.scaleDown, + ), ), + ).animateOnPageLoad( + animationsMap['containerOnPageLoadAnimation4']!), + ), + Padding( + padding: EdgeInsetsDirectional.fromSTEB(0, 0, 29, 0), + child: SvgPicture.asset( + 'assets/images/next.svg', + width: 26, + height: 26, + fit: BoxFit.scaleDown, + ).animateOnPageLoad( + animationsMap['imageOnPageLoadAnimation5']!), + ), + SvgPicture.asset( + 'assets/images/shuffle.svg', + width: 24, + height: 24, + fit: BoxFit.scaleDown, + ).animateOnPageLoad( + animationsMap['imageOnPageLoadAnimation6']!), + ], + ), + ), + InkWell( + onTap: () async { + await Navigator.push( + context, + PageTransition( + type: PageTransitionType.fade, + duration: Duration(milliseconds: 300), + reverseDuration: Duration(milliseconds: 300), + child: SongLyricsPageWidget( + imageURL: widget.imageURL, + songName: widget.songName, + artistName: widget.artistName, + ), + ), + ); + }, + child: SvgPicture.asset( + 'assets/images/up.svg', + width: 31, + height: 31, + fit: BoxFit.scaleDown, + ), + ).animateOnPageLoad( + animationsMap['imageOnPageLoadAnimation7']!), + InkWell( + onTap: () async { + await Navigator.push( + context, + PageTransition( + type: PageTransitionType.fade, + duration: Duration(milliseconds: 300), + reverseDuration: Duration(milliseconds: 300), + child: SongLyricsPageWidget( + imageURL: widget.imageURL, + songName: widget.songName, + artistName: widget.artistName, ), - ); - }, - child: Text( - 'Lyrics', - style: TextStyle( - fontFamily: 'Satoshi', - color: FlutterFlowTheme.of(context).b7b7b7, - fontWeight: FontWeight.w500, - fontSize: 14, ), + ); + }, + child: Text( + 'Lyrics', + style: TextStyle( + fontFamily: 'Satoshi', + color: FlutterFlowTheme.of(context).b7b7b7, + fontWeight: FontWeight.w500, + fontSize: 14, ), - ).animateOnPageLoad( - animationsMap['textOnPageLoadAnimation4']!), - ], - ), + ), + ).animateOnPageLoad(animationsMap['textOnPageLoadAnimation4']!), + ], ), ), ), diff --git a/lib/song_lyrics_page/song_lyrics_page_widget.dart b/lib/song_lyrics_page/song_lyrics_page_widget.dart index 57941f1..32a3383 100644 --- a/lib/song_lyrics_page/song_lyrics_page_widget.dart +++ b/lib/song_lyrics_page/song_lyrics_page_widget.dart @@ -1,14 +1,13 @@ -import '../components/back_button_widget.dart'; -import '../flutter_flow/flutter_flow_animations.dart'; -import '../flutter_flow/flutter_flow_theme.dart'; -import '../flutter_flow/flutter_flow_util.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/scheduler.dart'; import 'package:flutter_animate/flutter_animate.dart'; -import 'package:flutter_spinkit/flutter_spinkit.dart'; import 'package:flutter_svg/flutter_svg.dart'; -import 'package:google_fonts/google_fonts.dart'; import 'package:provider/provider.dart'; +import 'package:spotify_redesign/utils/extensions.dart'; + +import '../components/back_button_widget.dart'; +import '../flutter_flow/flutter_flow_animations.dart'; +import '../flutter_flow/flutter_flow_theme.dart'; +import '../flutter_flow/flutter_flow_util.dart'; class SongLyricsPageWidget extends StatefulWidget { const SongLyricsPageWidget({ @@ -139,352 +138,348 @@ class _SongLyricsPageWidgetState extends State return Scaffold( key: scaffoldKey, backgroundColor: FlutterFlowTheme.of(context).primaryBackground, - body: SafeArea( - child: GestureDetector( - onTap: () => FocusScope.of(context).requestFocus(_unfocusNode), - child: Stack( - children: [ - Hero( - tag: widget.imageURL!, - transitionOnUserGestures: true, - child: Image.network( - widget.imageURL!, - width: double.infinity, - height: double.infinity, - fit: BoxFit.cover, - ), - ), - Container( + body: GestureDetector( + onTap: () => FocusScope.of(context).requestFocus(_unfocusNode), + child: Stack( + children: [ + Hero( + tag: widget.imageURL!, + transitionOnUserGestures: true, + child: Image.network( + widget.imageURL!, width: double.infinity, height: double.infinity, - constraints: BoxConstraints( - maxWidth: double.infinity, - maxHeight: double.infinity, - ), - decoration: BoxDecoration( - color: Color(0x65000000), - ), + fit: BoxFit.cover, ), - Align( - alignment: AlignmentDirectional(0, -1), - child: Padding( - padding: EdgeInsetsDirectional.fromSTEB(32, 0, 32, 0), - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Align( - alignment: AlignmentDirectional(0, -1), - child: Padding( - padding: EdgeInsetsDirectional.fromSTEB(0, 30, 0, 29), - child: Row( - mainAxisSize: MainAxisSize.max, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - BackButtonWidget(), - Text( - widget.songName!, - style: TextStyle( - fontFamily: 'Satoshi', - color: FlutterFlowTheme.of(context).dddddd, - fontWeight: FontWeight.w500, - fontSize: 18, - ), - ), - SvgPicture.asset( - 'assets/images/vert.svg', - width: 4, - height: 18, - fit: BoxFit.cover, + ), + Container( + width: double.infinity, + height: double.infinity, + constraints: BoxConstraints( + maxWidth: double.infinity, + maxHeight: double.infinity, + ), + decoration: BoxDecoration( + color: Color(0x65000000), + ), + ), + Align( + alignment: AlignmentDirectional(0, -1), + child: Padding( + padding: EdgeInsetsDirectional.fromSTEB( + 32, context.topPadding(10), 32, 0), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Align( + alignment: AlignmentDirectional(0, -1), + child: Padding( + padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 29), + child: Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + BackButtonWidget(), + Text( + widget.songName!, + style: TextStyle( + fontFamily: 'Satoshi', + color: FlutterFlowTheme.of(context).dddddd, + fontWeight: FontWeight.w500, + fontSize: 18, ), - ], - ).animateOnPageLoad( - animationsMap['rowOnPageLoadAnimation']!), - ), - ), - Align( - alignment: AlignmentDirectional(0, 0), - child: Padding( - padding: EdgeInsetsDirectional.fromSTEB(23, 0, 15, 0), - child: Text( - 'Well, I found a woman, stronger than \n\nanyone I know\n\nShe shares my dreams, I hope that \n\nsomeday I\'ll share her home\n\nI found a lover, to carry more than just \n\nmy secrets\n\nTo carry love, to carry children of our \n\nown\n', - textAlign: TextAlign.start, - style: TextStyle( - fontFamily: 'Satoshi', - color: Color(0x80FFFFFF), - fontWeight: FontWeight.w500, - fontSize: 16, ), - ).animateOnPageLoad( - animationsMap['textOnPageLoadAnimation1']!), - ), - ), - Align( - alignment: AlignmentDirectional(0, 0), - child: Padding( - padding: EdgeInsetsDirectional.fromSTEB(23, 0, 15, 0), - child: Text( - 'We are still kids, but we\'re so in love. \n', - textAlign: TextAlign.start, - style: TextStyle( - fontFamily: 'Satoshi', - color: FlutterFlowTheme.of(context).primaryText, - fontWeight: FontWeight.w500, - fontSize: 20, + SvgPicture.asset( + 'assets/images/vert.svg', + width: 4, + height: 18, + fit: BoxFit.cover, ), - ).animateOnPageLoad( - animationsMap['textOnPageLoadAnimation2']!), - ), + ], + ).animateOnPageLoad( + animationsMap['rowOnPageLoadAnimation']!), ), - Align( - alignment: AlignmentDirectional(0, 0), - child: Padding( - padding: EdgeInsetsDirectional.fromSTEB(23, 0, 15, 0), - child: Text( - 'Fighting against all odds I know we\'ll be\n\nalright this time Darling, just hold my \n\nhand Be my girl, I\'ll be your man\n\nI see my future in your eyes', - textAlign: TextAlign.start, - style: TextStyle( - fontFamily: 'Satoshi', - color: Color(0x80FFFFFF), - fontWeight: FontWeight.w500, - fontSize: 16, - ), - ).animateOnPageLoad( - animationsMap['textOnPageLoadAnimation3']!), - ), + ), + Align( + alignment: AlignmentDirectional(0, 0), + child: Padding( + padding: EdgeInsetsDirectional.fromSTEB(23, 0, 15, 0), + child: Text( + 'Well, I found a woman, stronger than \n\nanyone I know\n\nShe shares my dreams, I hope that \n\nsomeday I\'ll share her home\n\nI found a lover, to carry more than just \n\nmy secrets\n\nTo carry love, to carry children of our \n\nown\n', + textAlign: TextAlign.start, + style: TextStyle( + fontFamily: 'Satoshi', + color: Color(0x80FFFFFF), + fontWeight: FontWeight.w500, + fontSize: 16, + ), + ).animateOnPageLoad( + animationsMap['textOnPageLoadAnimation1']!), ), - ], - ), + ), + Align( + alignment: AlignmentDirectional(0, 0), + child: Padding( + padding: EdgeInsetsDirectional.fromSTEB(23, 0, 15, 0), + child: Text( + 'We are still kids, but we\'re so in love. \n', + textAlign: TextAlign.start, + style: TextStyle( + fontFamily: 'Satoshi', + color: FlutterFlowTheme.of(context).primaryText, + fontWeight: FontWeight.w500, + fontSize: 20, + ), + ).animateOnPageLoad( + animationsMap['textOnPageLoadAnimation2']!), + ), + ), + Align( + alignment: AlignmentDirectional(0, 0), + child: Padding( + padding: EdgeInsetsDirectional.fromSTEB(23, 0, 15, 0), + child: Text( + 'Fighting against all odds I know we\'ll be\n\nalright this time Darling, just hold my \n\nhand Be my girl, I\'ll be your man\n\nI see my future in your eyes', + textAlign: TextAlign.start, + style: TextStyle( + fontFamily: 'Satoshi', + color: Color(0x80FFFFFF), + fontWeight: FontWeight.w500, + fontSize: 16, + ), + ).animateOnPageLoad( + animationsMap['textOnPageLoadAnimation3']!), + ), + ), + ], ), ), - Align( - alignment: AlignmentDirectional(0, 1), - child: Container( - width: double.infinity, - decoration: BoxDecoration( - color: FlutterFlowTheme.of(context).primaryBackground, - ), - child: Padding( - padding: EdgeInsetsDirectional.fromSTEB(31, 0, 31, 0), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Padding( - padding: EdgeInsetsDirectional.fromSTEB(0, 14, 0, 10), - child: Row( - mainAxisSize: MainAxisSize.max, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Row( - mainAxisSize: MainAxisSize.max, - children: [ - Padding( - padding: EdgeInsetsDirectional.fromSTEB( - 0, 0, 15, 0), - child: Container( - width: 42, - height: 42, - clipBehavior: Clip.antiAlias, - decoration: BoxDecoration( - shape: BoxShape.circle, - ), - child: Image.network( - widget.imageURL!, - fit: BoxFit.cover, - ), - ), - ), - Column( - mainAxisSize: MainAxisSize.max, - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - Text( - widget.songName!, - style: TextStyle( - fontFamily: 'Satoshi', - color: FlutterFlowTheme.of(context) - .cbcbcb, - fontWeight: FontWeight.w500, - fontSize: 16, - ), - ), - Text( - widget.artistName!, - style: TextStyle( - fontFamily: 'Satoshi', - color: FlutterFlowTheme.of(context) - .c939393, - fontWeight: FontWeight.w300, - fontSize: 12, - ), - ), - ], - ), - ], - ), - Row( - mainAxisSize: MainAxisSize.max, - children: [ - SvgPicture.asset( - 'assets/images/heart.svg', - width: 24, - height: 24, - fit: BoxFit.cover, - ), - ], - ), - ], - ), - ), - Align( - alignment: AlignmentDirectional(0, 0), - child: Padding( - padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 8), - child: Stack( - alignment: - AlignmentDirectional(0, 0.1499999999999999), + ), + Align( + alignment: AlignmentDirectional(0, 1), + child: Container( + width: double.infinity, + decoration: BoxDecoration( + color: FlutterFlowTheme.of(context).primaryBackground, + ), + child: Padding( + padding: EdgeInsetsDirectional.fromSTEB(31, 0, 31, 0), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Padding( + padding: EdgeInsetsDirectional.fromSTEB(0, 14, 0, 10), + child: Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row( + mainAxisSize: MainAxisSize.max, children: [ - Align( - alignment: AlignmentDirectional(0, 0), + Padding( + padding: EdgeInsetsDirectional.fromSTEB( + 0, 0, 15, 0), child: Container( - width: double.infinity, - height: 2, + width: 42, + height: 42, + clipBehavior: Clip.antiAlias, decoration: BoxDecoration( - color: FlutterFlowTheme.of(context) - .secondaryBackground, - borderRadius: BorderRadius.circular(20), + shape: BoxShape.circle, ), - ), - ), - Align( - alignment: AlignmentDirectional(-1, 0), - child: Container( - width: - MediaQuery.of(context).size.width * 0.4, - height: 2.5, - decoration: BoxDecoration( - color: - FlutterFlowTheme.of(context).b7b7b7, - borderRadius: BorderRadius.circular(20), + child: Image.network( + widget.imageURL!, + fit: BoxFit.cover, ), - alignment: AlignmentDirectional(0, 0), ), ), - Align( - alignment: AlignmentDirectional(-0.1, 0), - child: Container( - width: 16, - height: 16, - decoration: BoxDecoration( - color: - FlutterFlowTheme.of(context).b7b7b7, - shape: BoxShape.circle, + Column( + mainAxisSize: MainAxisSize.max, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + widget.songName!, + style: TextStyle( + fontFamily: 'Satoshi', + color: + FlutterFlowTheme.of(context).cbcbcb, + fontWeight: FontWeight.w500, + fontSize: 16, + ), ), - alignment: AlignmentDirectional(0, 0), - ), + Text( + widget.artistName!, + style: TextStyle( + fontFamily: 'Satoshi', + color: FlutterFlowTheme.of(context) + .c939393, + fontWeight: FontWeight.w300, + fontSize: 12, + ), + ), + ], ), ], ), - ), + Row( + mainAxisSize: MainAxisSize.max, + children: [ + SvgPicture.asset( + 'assets/images/heart.svg', + width: 24, + height: 24, + fit: BoxFit.cover, + ), + ], + ), + ], ), - Padding( - padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 11), - child: Row( - mainAxisSize: MainAxisSize.max, - mainAxisAlignment: MainAxisAlignment.spaceBetween, + ), + Align( + alignment: AlignmentDirectional(0, 0), + child: Padding( + padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 8), + child: Stack( + alignment: + AlignmentDirectional(0, 0.1499999999999999), children: [ - Text( - '2:25', - style: TextStyle( - color: FlutterFlowTheme.of(context).c878787, - fontWeight: FontWeight.w500, - fontSize: 12, + Align( + alignment: AlignmentDirectional(0, 0), + child: Container( + width: double.infinity, + height: 2, + decoration: BoxDecoration( + color: FlutterFlowTheme.of(context) + .secondaryBackground, + borderRadius: BorderRadius.circular(20), + ), + ), + ), + Align( + alignment: AlignmentDirectional(-1, 0), + child: Container( + width: + MediaQuery.of(context).size.width * 0.4, + height: 2.5, + decoration: BoxDecoration( + color: FlutterFlowTheme.of(context).b7b7b7, + borderRadius: BorderRadius.circular(20), + ), + alignment: AlignmentDirectional(0, 0), ), ), - Text( - '4:02', - style: TextStyle( - color: FlutterFlowTheme.of(context).c878787, - fontWeight: FontWeight.w500, - fontSize: 12, + Align( + alignment: AlignmentDirectional(-0.1, 0), + child: Container( + width: 16, + height: 16, + decoration: BoxDecoration( + color: FlutterFlowTheme.of(context).b7b7b7, + shape: BoxShape.circle, + ), + alignment: AlignmentDirectional(0, 0), ), ), ], ), ), - Padding( - padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 20), - child: Row( - mainAxisSize: MainAxisSize.max, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - SvgPicture.asset( - 'assets/images/repeat.svg', + ), + Padding( + padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 11), + child: Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + '2:25', + style: TextStyle( + color: FlutterFlowTheme.of(context).c878787, + fontWeight: FontWeight.w500, + fontSize: 12, + ), + ), + Text( + '4:02', + style: TextStyle( + color: FlutterFlowTheme.of(context).c878787, + fontWeight: FontWeight.w500, + fontSize: 12, + ), + ), + ], + ), + ), + Padding( + padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 20), + child: Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + SvgPicture.asset( + 'assets/images/repeat.svg', + width: 21, + height: 21, + fit: BoxFit.scaleDown, + ), + Padding( + padding: + EdgeInsetsDirectional.fromSTEB(31, 0, 0, 0), + child: SvgPicture.asset( + 'assets/images/previous.svg', width: 21, height: 21, fit: BoxFit.scaleDown, ), - Padding( - padding: - EdgeInsetsDirectional.fromSTEB(31, 0, 0, 0), - child: SvgPicture.asset( - 'assets/images/previous.svg', - width: 21, - height: 21, - fit: BoxFit.scaleDown, + ), + Padding( + padding: + EdgeInsetsDirectional.fromSTEB(27, 0, 27, 0), + child: Container( + width: 51, + height: 51, + decoration: BoxDecoration( + color: + FlutterFlowTheme.of(context).primaryColor, + shape: BoxShape.circle, ), - ), - Padding( - padding: EdgeInsetsDirectional.fromSTEB( - 27, 0, 27, 0), - child: Container( - width: 51, - height: 51, - decoration: BoxDecoration( - color: FlutterFlowTheme.of(context) - .primaryColor, - shape: BoxShape.circle, - ), - child: Padding( - padding: EdgeInsetsDirectional.fromSTEB( - 1, 0, 0, 0), - child: SvgPicture.asset( - 'assets/images/pause.svg', - width: 28, - height: 28, - fit: BoxFit.scaleDown, - ), + child: Padding( + padding: EdgeInsetsDirectional.fromSTEB( + 1, 0, 0, 0), + child: SvgPicture.asset( + 'assets/images/pause.svg', + width: 28, + height: 28, + fit: BoxFit.scaleDown, ), ), ), - Padding( - padding: - EdgeInsetsDirectional.fromSTEB(0, 0, 31, 0), - child: SvgPicture.asset( - 'assets/images/next.svg', - width: 21, - height: 21, - fit: BoxFit.scaleDown, - ), - ), - SvgPicture.asset( - 'assets/images/shuffle.svg', + ), + Padding( + padding: + EdgeInsetsDirectional.fromSTEB(0, 0, 31, 0), + child: SvgPicture.asset( + 'assets/images/next.svg', width: 21, height: 21, fit: BoxFit.scaleDown, ), - ], - ), + ), + SvgPicture.asset( + 'assets/images/shuffle.svg', + width: 21, + height: 21, + fit: BoxFit.scaleDown, + ), + ], ), - ], - ), + ), + ], ), - ).animateOnPageLoad( - animationsMap['containerOnPageLoadAnimation']!), - ), - ], - ), + ), + ).animateOnPageLoad( + animationsMap['containerOnPageLoadAnimation']!), + ), + ], ), ), ); diff --git a/lib/utils/extensions.dart b/lib/utils/extensions.dart new file mode 100644 index 0000000..e442a31 --- /dev/null +++ b/lib/utils/extensions.dart @@ -0,0 +1,29 @@ +import 'dart:math' as math; + +import 'package:flutter/material.dart'; + +extension BuildContextExtension on BuildContext { + MediaQueryData get mq => MediaQuery.of(this); + + ThemeData get theme => Theme.of(this); + + TextTheme get tt => Theme.of(this).textTheme; + + ColorScheme get cs => Theme.of(this).colorScheme; + + double get width => MediaQuery.of(this).size.width; + + double get height => MediaQuery.of(this).size.height; + + double topPadding([double topPadding = 15]) => + math.max(statusBarHeight + topPadding, topPadding); + + double bottomPadding([double bottomPadding = 15]) => + math.max(bottomSafeHeight + bottomPadding, bottomPadding); + + double get statusBarHeight => MediaQuery.of(this).viewPadding.top; + + double get bottomSafeHeight => MediaQuery.of(this).viewPadding.bottom; + + double get devicePixelRatio => MediaQuery.of(this).devicePixelRatio; +} diff --git a/pubspec.lock b/pubspec.lock deleted file mode 100644 index 0c404f4..0000000 --- a/pubspec.lock +++ /dev/null @@ -1,687 +0,0 @@ -# Generated by pub -# See https://dart.dev/tools/pub/glossary#lockfile -packages: - async: - dependency: transitive - description: - name: async - sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 - url: "https://pub.dev" - source: hosted - version: "2.10.0" - auto_size_text: - dependency: "direct main" - description: - name: auto_size_text - sha256: "3f5261cd3fb5f2a9ab4e2fc3fba84fd9fcaac8821f20a1d4e71f557521b22599" - url: "https://pub.dev" - source: hosted - version: "3.0.0" - boolean_selector: - dependency: transitive - description: - name: boolean_selector - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - cached_network_image: - dependency: "direct main" - description: - name: cached_network_image - sha256: e764e48ef036cabdf84319ba7b8b5871b6b43266e14de787cb43f77639089ae5 - url: "https://pub.dev" - source: hosted - version: "3.2.1" - cached_network_image_platform_interface: - dependency: transitive - description: - name: cached_network_image_platform_interface - sha256: "8e2b5befefec5063bee8f209fda21751f6328d405d4237c70f21104568b2fee7" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - cached_network_image_web: - dependency: transitive - description: - name: cached_network_image_web - sha256: d4351c7eb16767df129b0474a5ebc4e028870379c063e8ba265a56aa00831e70 - url: "https://pub.dev" - source: hosted - version: "1.0.1" - characters: - dependency: transitive - description: - name: characters - sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c - url: "https://pub.dev" - source: hosted - version: "1.2.1" - clock: - dependency: transitive - description: - name: clock - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf - url: "https://pub.dev" - source: hosted - version: "1.1.1" - collection: - dependency: transitive - description: - name: collection - sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 - url: "https://pub.dev" - source: hosted - version: "1.17.0" - crypto: - dependency: transitive - description: - name: crypto - sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 - url: "https://pub.dev" - source: hosted - version: "3.0.2" - cupertino_icons: - dependency: "direct main" - description: - name: cupertino_icons - sha256: e35129dc44c9118cee2a5603506d823bab99c68393879edb440e0090d07586be - url: "https://pub.dev" - source: hosted - version: "1.0.5" - fake_async: - dependency: transitive - description: - name: fake_async - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" - url: "https://pub.dev" - source: hosted - version: "1.3.1" - ffi: - dependency: transitive - description: - name: ffi - sha256: a38574032c5f1dd06c4aee541789906c12ccaab8ba01446e800d9c5b79c4a978 - url: "https://pub.dev" - source: hosted - version: "2.0.1" - file: - dependency: transitive - description: - name: file - sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" - url: "https://pub.dev" - source: hosted - version: "6.1.4" - flutter: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" - flutter_animate: - dependency: "direct main" - description: - name: flutter_animate - sha256: "1f6fdee1f63eda3c35e04c07664593c31b7fdae290b6b0dc513d2fdfb2d27c76" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter_blurhash: - dependency: transitive - description: - name: flutter_blurhash - sha256: "05001537bd3fac7644fa6558b09ec8c0a3f2eba78c0765f88912882b1331a5c6" - url: "https://pub.dev" - source: hosted - version: "0.7.0" - flutter_cache_manager: - dependency: "direct main" - description: - name: flutter_cache_manager - sha256: "32cd900555219333326a2d0653aaaf8671264c29befa65bbd9856d204a4c9fb3" - url: "https://pub.dev" - source: hosted - version: "3.3.0" - flutter_localizations: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" - flutter_spinkit: - dependency: "direct main" - description: - name: flutter_spinkit - sha256: "77a2117c0517ff909221f3160b8eb20052ab5216107581168af574ac1f05dff8" - url: "https://pub.dev" - source: hosted - version: "5.1.0" - flutter_svg: - dependency: "direct main" - description: - name: flutter_svg - sha256: "9ac1967e2f72a08af11b05b39167920f90d043cf67163d13a544a358c8f31afa" - url: "https://pub.dev" - source: hosted - version: "0.22.0" - flutter_test: - dependency: "direct dev" - description: flutter - source: sdk - version: "0.0.0" - flutter_web_plugins: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - font_awesome_flutter: - dependency: "direct main" - description: - name: font_awesome_flutter - sha256: "7811c8b4e7455d2f60ef30022a6a07376de2858b47aecbe2861965b348fe2016" - url: "https://pub.dev" - source: hosted - version: "10.1.0" - from_css_color: - dependency: "direct main" - description: - name: from_css_color - sha256: "5e4d1795c8d10af94e51dd97636b2a29170a132be1aceba103e9866028d20823" - url: "https://pub.dev" - source: hosted - version: "2.0.0" - google_fonts: - dependency: "direct main" - description: - name: google_fonts - sha256: "8f099045e2f2a30e4d4d0a35f40c6bc941a8f2ca0e10ad9d214ee9edd3f37483" - url: "https://pub.dev" - source: hosted - version: "3.0.1" - http: - dependency: transitive - description: - name: http - sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" - url: "https://pub.dev" - source: hosted - version: "0.13.5" - http_parser: - dependency: transitive - description: - name: http_parser - sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" - url: "https://pub.dev" - source: hosted - version: "4.0.2" - intl: - dependency: "direct main" - description: - name: intl - sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91" - url: "https://pub.dev" - source: hosted - version: "0.17.0" - js: - dependency: transitive - description: - name: js - sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" - url: "https://pub.dev" - source: hosted - version: "0.6.5" - json_path: - dependency: "direct main" - description: - name: json_path - sha256: e1ff18e87737fd5bee5d3408a58c51452b3351ab1292fdcf4ee597ab480123e2 - url: "https://pub.dev" - source: hosted - version: "0.4.1" - matcher: - dependency: transitive - description: - name: matcher - sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" - url: "https://pub.dev" - source: hosted - version: "0.12.13" - material_color_utilities: - dependency: transitive - description: - name: material_color_utilities - sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 - url: "https://pub.dev" - source: hosted - version: "0.2.0" - meta: - dependency: transitive - description: - name: meta - sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" - url: "https://pub.dev" - source: hosted - version: "1.8.0" - nested: - dependency: transitive - description: - name: nested - sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - octo_image: - dependency: transitive - description: - name: octo_image - sha256: "107f3ed1330006a3bea63615e81cf637433f5135a52466c7caa0e7152bca9143" - url: "https://pub.dev" - source: hosted - version: "1.0.2" - page_transition: - dependency: "direct main" - description: - name: page_transition - sha256: "12776be3ffb2d080095e912fc4e820a85be8846913a93261148b75256b9c7691" - url: "https://pub.dev" - source: hosted - version: "2.0.4" - path: - dependency: transitive - description: - name: path - sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b - url: "https://pub.dev" - source: hosted - version: "1.8.2" - path_drawing: - dependency: transitive - description: - name: path_drawing - sha256: "3bdd251dae9ffaef944450b73f168610db7e968e7b20daf0c3907f8b4aafc8a2" - url: "https://pub.dev" - source: hosted - version: "0.5.1+1" - path_parsing: - dependency: transitive - description: - name: path_parsing - sha256: ee5c47c1058ad66b4a41746ec3996af9593d0858872807bcd64ac118f0700337 - url: "https://pub.dev" - source: hosted - version: "0.2.1" - path_provider: - dependency: transitive - description: - name: path_provider - sha256: dcea5feb97d8abf90cab9e9030b497fb7c3cbf26b7a1fe9e3ef7dcb0a1ddec95 - url: "https://pub.dev" - source: hosted - version: "2.0.12" - path_provider_android: - dependency: transitive - description: - name: path_provider_android - sha256: a776c088d671b27f6e3aa8881d64b87b3e80201c64e8869b811325de7a76c15e - url: "https://pub.dev" - source: hosted - version: "2.0.22" - path_provider_foundation: - dependency: transitive - description: - name: path_provider_foundation - sha256: "62a68e7e1c6c459f9289859e2fae58290c981ce21d1697faf54910fe1faa4c74" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - path_provider_linux: - dependency: transitive - description: - name: path_provider_linux - sha256: ab0987bf95bc591da42dffb38c77398fc43309f0b9b894dcc5d6f40c4b26c379 - url: "https://pub.dev" - source: hosted - version: "2.1.7" - path_provider_platform_interface: - dependency: transitive - description: - name: path_provider_platform_interface - sha256: f0abc8ebd7253741f05488b4813d936b4d07c6bae3e86148a09e342ee4b08e76 - url: "https://pub.dev" - source: hosted - version: "2.0.5" - path_provider_windows: - dependency: transitive - description: - name: path_provider_windows - sha256: bcabbe399d4042b8ee687e17548d5d3f527255253b4a639f5f8d2094a9c2b45c - url: "https://pub.dev" - source: hosted - version: "2.1.3" - pedantic: - dependency: transitive - description: - name: pedantic - sha256: "67fc27ed9639506c856c840ccce7594d0bdcd91bc8d53d6e52359449a1d50602" - url: "https://pub.dev" - source: hosted - version: "1.11.1" - petitparser: - dependency: transitive - description: - name: petitparser - sha256: "49392a45ced973e8d94a85fdb21293fbb40ba805fc49f2965101ae748a3683b4" - url: "https://pub.dev" - source: hosted - version: "5.1.0" - platform: - dependency: transitive - description: - name: platform - sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" - url: "https://pub.dev" - source: hosted - version: "3.1.0" - plugin_platform_interface: - dependency: transitive - description: - name: plugin_platform_interface - sha256: dbf0f707c78beedc9200146ad3cb0ab4d5da13c246336987be6940f026500d3a - url: "https://pub.dev" - source: hosted - version: "2.1.3" - process: - dependency: transitive - description: - name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" - url: "https://pub.dev" - source: hosted - version: "4.2.4" - provider: - dependency: "direct main" - description: - name: provider - sha256: e1e7413d70444ea3096815a60fe5da1b11bda8a9dc4769252cc82c53536f8bcc - url: "https://pub.dev" - source: hosted - version: "6.0.4" - rfc_6901: - dependency: transitive - description: - name: rfc_6901 - sha256: "8d97680dada633146cf75ab9382f2ce2b7e4bd63ceecd867416cf43b5832b988" - url: "https://pub.dev" - source: hosted - version: "0.1.1" - rxdart: - dependency: transitive - description: - name: rxdart - sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" - url: "https://pub.dev" - source: hosted - version: "0.27.7" - shared_preferences: - dependency: "direct main" - description: - name: shared_preferences - sha256: "76917b7d4b9526b2ba416808a7eb9fb2863c1a09cf63ec85f1453da240fa818a" - url: "https://pub.dev" - source: hosted - version: "2.0.15" - shared_preferences_android: - dependency: transitive - description: - name: shared_preferences_android - sha256: "955e9736a12ba776bdd261cf030232b30eadfcd9c79b32a3250dd4a494e8c8f7" - url: "https://pub.dev" - source: hosted - version: "2.0.15" - shared_preferences_ios: - dependency: transitive - description: - name: shared_preferences_ios - sha256: "585a14cefec7da8c9c2fb8cd283a3bb726b4155c0952afe6a0caaa7b2272de34" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - shared_preferences_linux: - dependency: transitive - description: - name: shared_preferences_linux - sha256: f8ea038aa6da37090093974ebdcf4397010605fd2ff65c37a66f9d28394cb874 - url: "https://pub.dev" - source: hosted - version: "2.1.3" - shared_preferences_macos: - dependency: transitive - description: - name: shared_preferences_macos - sha256: "81b6a60b2d27020eb0fc41f4cebc91353047309967901a79ee8203e40c42ed46" - url: "https://pub.dev" - source: hosted - version: "2.0.5" - shared_preferences_platform_interface: - dependency: transitive - description: - name: shared_preferences_platform_interface - sha256: da9431745ede5ece47bc26d5d73a9d3c6936ef6945c101a5aca46f62e52c1cf3 - url: "https://pub.dev" - source: hosted - version: "2.1.0" - shared_preferences_web: - dependency: transitive - description: - name: shared_preferences_web - sha256: a4b5bc37fe1b368bbc81f953197d55e12f49d0296e7e412dfe2d2d77d6929958 - url: "https://pub.dev" - source: hosted - version: "2.0.4" - shared_preferences_windows: - dependency: transitive - description: - name: shared_preferences_windows - sha256: "5eaf05ae77658d3521d0e993ede1af962d4b326cd2153d312df716dc250f00c9" - url: "https://pub.dev" - source: hosted - version: "2.1.3" - sky_engine: - dependency: transitive - description: flutter - source: sdk - version: "0.0.99" - source_span: - dependency: transitive - description: - name: source_span - sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 - url: "https://pub.dev" - source: hosted - version: "1.9.1" - sqflite: - dependency: "direct main" - description: - name: sqflite - sha256: "90cf48fff79b921612c5b78df00930690fdb922b7120d39d8bb04dbc42fc1297" - url: "https://pub.dev" - source: hosted - version: "2.2.0+2" - sqflite_common: - dependency: transitive - description: - name: sqflite_common - sha256: bfd6973aaeeb93475bc0d875ac9aefddf7965ef22ce09790eb963992ffc5183f - url: "https://pub.dev" - source: hosted - version: "2.4.2+2" - stack_trace: - dependency: transitive - description: - name: stack_trace - sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 - url: "https://pub.dev" - source: hosted - version: "1.11.0" - stream_channel: - dependency: transitive - description: - name: stream_channel - sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - string_scanner: - dependency: transitive - description: - name: string_scanner - sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" - url: "https://pub.dev" - source: hosted - version: "1.2.0" - synchronized: - dependency: transitive - description: - name: synchronized - sha256: "33b31b6beb98100bf9add464a36a8dd03eb10c7a8cf15aeec535e9b054aaf04b" - url: "https://pub.dev" - source: hosted - version: "3.0.1" - term_glyph: - dependency: transitive - description: - name: term_glyph - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 - url: "https://pub.dev" - source: hosted - version: "1.2.1" - test_api: - dependency: transitive - description: - name: test_api - sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 - url: "https://pub.dev" - source: hosted - version: "0.4.16" - timeago: - dependency: "direct main" - description: - name: timeago - sha256: "3a38963615f1178531afa7177199e37522cf8dcbd93a144b597e32ec6d84bd9f" - url: "https://pub.dev" - source: hosted - version: "3.2.2" - typed_data: - dependency: transitive - description: - name: typed_data - sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" - url: "https://pub.dev" - source: hosted - version: "1.3.1" - url_launcher: - dependency: "direct main" - description: - name: url_launcher - sha256: "4f0d5f9bf7efba3da5a7ff03bd33cc898c84bac978c068e1c94483828e709592" - url: "https://pub.dev" - source: hosted - version: "6.1.5" - url_launcher_android: - dependency: transitive - description: - name: url_launcher_android - sha256: "3e2f6dfd2c7d9cd123296cab8ef66cfc2c1a13f5845f42c7a0f365690a8a7dd1" - url: "https://pub.dev" - source: hosted - version: "6.0.23" - url_launcher_ios: - dependency: transitive - description: - name: url_launcher_ios - sha256: bb328b24d3bccc20bdf1024a0990ac4f869d57663660de9c936fb8c043edefe3 - url: "https://pub.dev" - source: hosted - version: "6.0.18" - url_launcher_linux: - dependency: transitive - description: - name: url_launcher_linux - sha256: "318c42cba924e18180c029be69caf0a1a710191b9ec49bb42b5998fdcccee3cc" - url: "https://pub.dev" - source: hosted - version: "3.0.2" - url_launcher_macos: - dependency: transitive - description: - name: url_launcher_macos - sha256: "41988b55570df53b3dd2a7fc90c76756a963de6a8c5f8e113330cb35992e2094" - url: "https://pub.dev" - source: hosted - version: "3.0.2" - url_launcher_platform_interface: - dependency: transitive - description: - name: url_launcher_platform_interface - sha256: "4eae912628763eb48fc214522e58e942fd16ce195407dbf45638239523c759a6" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - url_launcher_web: - dependency: transitive - description: - name: url_launcher_web - sha256: "44d79408ce9f07052095ef1f9a693c258d6373dc3944249374e30eff7219ccb0" - url: "https://pub.dev" - source: hosted - version: "2.0.14" - url_launcher_windows: - dependency: transitive - description: - name: url_launcher_windows - sha256: b6217370f8eb1fd85c8890c539f5a639a01ab209a36db82c921ebeacefc7a615 - url: "https://pub.dev" - source: hosted - version: "3.0.3" - uuid: - dependency: transitive - description: - name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" - url: "https://pub.dev" - source: hosted - version: "3.0.7" - vector_math: - dependency: transitive - description: - name: vector_math - sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - win32: - dependency: transitive - description: - name: win32 - sha256: c9ebe7ee4ab0c2194e65d3a07d8c54c5d00bb001b76081c4a04cdb8448b59e46 - url: "https://pub.dev" - source: hosted - version: "3.1.3" - xdg_directories: - dependency: transitive - description: - name: xdg_directories - sha256: bd512f03919aac5f1313eb8249f223bacf4927031bf60b02601f81f687689e86 - url: "https://pub.dev" - source: hosted - version: "0.2.0+3" - xml: - dependency: transitive - description: - name: xml - sha256: "80d494c09849dc3f899d227a78c30c5b949b985ededf884cb3f3bcd39f4b447a" - url: "https://pub.dev" - source: hosted - version: "5.4.1" -sdks: - dart: ">=2.18.0 <4.0.0" - flutter: ">=3.3.0"